ESP32-IDF05-5 WIFI-MQTT高级内容
Posted Ciaran-byte
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP32-IDF05-5 WIFI-MQTT高级内容相关的知识,希望对你有一定的参考价值。
mqtt高级内容
声明
该部分是参考的太极创客的内容完成的,感觉他们的视频和教程非常好,本文仅仅是笔记,可以去听原版的
mqtt高级内容
1. Qos服务质量等级
1.1 什么是Qos
Qos是服务质量等级的缩写,用于告诉物联网系统,哪些信息是重要信息,需要准确无误的传输,哪些信息不那么重要,即使丢失也没有问题。
1.2 Qos服务质量级别
- Qos=0 最多发一次
- Qos=1 最少发一次
- Qos=2 保证收一次
级别高,传输稳定,但是占用的网络带宽资源就多
1.2.1 Qos=0
0级别表示服务端和客户端交互数据是完全没有保障的。客户端和服务端不会对传输信息是否成功进行确认和检查。
发送端数据只发送一次。信息能不能传输到,依靠网络的可靠性。
1.2.2 Qos=1
至少发送1次,要求接收端给发送端1个确认信息,发送端会继续给接收端发送信息。
1.2.3 Qos=2
发送端会发送两次确认信息。两次确认信息都得到回复以后,才会认为对方接收到了
1.3 如何发送Qos>0 的数据
1.3.1 发送Qos=1的数据
分为三步,缺一不可
- 在发送端发送数据的时候,Qos就必须为1
- 接收端在连接服务端的时候cleansession要设置为false
- 客户端进行订阅主题的时候,要设置Qos=1
1.3.2 发送Qos=2的数据
- 接收端连接服务端的时候cleansession设置为false
- 接收端订阅主题的时候Qos=2
- 发布端发布消息的时候Qos=2
1.4 服务质量降级
如果发布客户端和接收客户端服务质量不同,会按照更低的服务质量进行。也就是上面那个案例,接收客户端会按照服务质量1级进行接收
上图案例会按照服务质量0进行数据传输
2. 保留消息
2.1 什么是保留消息
当我们向任何主题发布一个保留消息的时候。任何一个接受客户端,订阅这个主题的时候,会马上受到这个消息
2.2 如果修改保留消息
如果向订阅主题发布新的保留消息,原来的那个就会取消
2.3 如何删除保留消息
如果要删除保留消息,只需要向订阅主题发布一条空的保留消息即可
2.4 保留消息报文
2.5 保留消息的用途
比如有些客户端向服务端发送数据一天才发送一次,这样的话,新客户端订阅这个主题第一次收到消息可能需要等一天,所以使用保留消息的话,可以让订阅的客户端马上就能收到消息。
3. 心跳机制
3.1 心跳机制是什么
客户端需要向服务端不断发送心跳信息,表示客户端与服务端是连接的。
3.2 机制
客户端需要不断将向服务端发送PINGREQ心跳数据包,而服务端会向客户端发送PINGRESP心跳响应。
在客户端向服务端进行connect的时候,会有一个心跳时间信息,就是说客户端必须在心跳时间间隔内向服务端发送消息
客户端只有在必要的时候才会向服务端发送心跳数据包。因为如果在心跳时间内,客户端向服务器发送过其他数据,是不需要发送心跳数据包的。
如果服务端没有在1.5倍心跳间隔时间内收到客户端的数据,就认为客户端掉线了。
4. mqtt遗嘱
4.1 什么是遗嘱(will)
当发送客户端与服务端意外断开的时候,服务端会向订阅了主题遗嘱信息的客户端发送遗嘱信息。
4.2 断开连接与意外断开
客户端会向服务端发送disconnect数据包,客户端会和服务端正常断开连接
当服务端通过心跳机制发现客户端断开连接的时候,会认为是意外断开
4.3 遗嘱的使用
在客户端与服务器连接的时候,可以设置遗嘱信息。这部分相关的设置包括
- 遗嘱主题:接收客户端可以订阅这个遗嘱主题,当这个发送设备意外断开的时候,服务器就向订阅了这个遗嘱主题的客户端发送遗嘱信息
- 遗嘱信息:要发送的信息
- 遗嘱Qos
- 遗嘱保留信息
4.4 遗嘱使用建议
5. 用户密码认证
在connect数据包中进行填写
以上是关于ESP32-IDF05-5 WIFI-MQTT高级内容的主要内容,如果未能解决你的问题,请参考以下文章
ESP32 ESP-IDF开发环境搭建,Windows下基于ESP-IDF | Cmake | VScode插件的 ESP32 开发环境搭建