【IOT开发】MQTT知识(总结版)
消息等级QOS
一般呢,订阅设置为0,就可以了,那就说一下这个消息等级有什么用吧!
咱发送数据的时候也会携带一个消息等级:
假设是0
那么这条消息是不是真的发给MQTT服务器(Broker)了,就不知道了,如果设备多个,还真不敢保证真的发给服务器了。
假设是1
那么一个客户端发送消息以后呢,服务器一看消息等级是1,那么就会回给那个发送消息的客户端一个应答消息。客户端发送完消息以后其实内部会启动一个超时操作,如果多少时间内没有回复,那么它会再发一次
假设是2
这个呢就是消息一定要到达MQTT服务器.这个很苛刻,也比较占用内存
订阅/发布消息
一般包括以下内容
- 发布/订阅的主题
- 消息
- 回传标志(默认0)
- 消息等级【见1】
- 是否需要服务器保留消息【下面同医嘱一起讲】
- 消息的标识(一般用不到,默认1就可以)
遗嘱(will)
假设我手机和一个设备订阅主题和发布主题对应,我就能和这个设备通信了但是,我怎么知道这个设备掉线了呢?当然完全可以自己发信息给那个设备,如果不回复,就说明掉线了。
但是呢,MQTT服务器提供了一种方式假设我设置好设备的遗嘱消息是 offline 遗嘱发布的主题是 aaaaa,如果设备掉线,服务器就会给订阅了aaaaa的客户端发送 offline。
【注】:服务器如果在你设置的心跳包时间的1.5倍时间内,收不到心跳包就认为你掉线了。
心跳包
MQTT规定的,发送完连接协议之后,发送的心跳包数据是C0 00
发送时间:连接协议里面的心跳包时间(你可以提前发),然后服务器回复 D0 00
三元组
三元组是 product key/ device name / device secret
MQTT的C语言库一点记录
- 官方库里面判断返回的数据
使用MQTTPacket_read(数据解析完存到的数组,数组长度,提取数据函数)
,最主要的是这个 提取数据函数transport_getdata
,这个函数的格式不能变,官方规定的就是这个格式。
其中,Usart1ReadBuff为网络模块接收到的数据储存的地方,根据实际需要修改。
文章来源: recclay.blog.csdn.net,作者:ReCclay,版权归原作者所有,如需转载,请联系作者。
原文链接:recclay.blog.csdn.net/article/details/104024625
- 点赞
- 收藏
- 关注作者
评论(0)