![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MQTT
文章平均质量分 72
MQTT协议学习
ONE_Day|
这个作者很懒,什么都没留下…
展开
-
MQTT协议-心跳请求和心跳响应
用定时器中断调用mqtt_Ping函数进行定时发送,定时器可在客户端连接上服务器并发送了一个报文数据后打开,假设CONNECT报文设置的保持连接时间是100秒,那心跳请求可以每30秒或50秒发送一次,只要小于100秒就行,因此定时器可初始化为30秒或50秒,根据实际来定。心跳请求报文比较简单,只有固定报头,固定报头由两个字节组成,第一个字节为固定为C0,第二个字节为剩余长度,但后面没有有效载荷的内容,因此剩余长度为0,所以心跳请求报文就为C0 00。CONNECT报文的可变报头是由。原创 2023-03-09 16:19:15 · 4153 阅读 · 1 评论 -
MQTT协议-发布消息(客户端向服务器发送)
计算的剩余长度为169个,因为大于128,所以用两个字节表示,169=128*a+b,可计算出a = 1,b = 41,a转为十六进制为01,b先转为二进制0010 1001,最高位需要变为1,所以为1010 1001,转为十六进制为A9,所以剩余长度就填A9 01。再发送上面组装好的发布信息报文,阿里云并没有回复,这是对的,因为组装时设置的Qos等级是0,没有响应部分,所以阿里云也没有应答。有效载荷是JSON格式,可以参照服务器下发的内容,修改其中的值,再发送回去。组合固定报头+可变报头+有效载荷。原创 2023-03-09 16:12:58 · 2769 阅读 · 0 评论 -
MQTT协议-发布消息(服务器向客户端发送)
不能忘记加上固定报头和可变报头,组合成订阅主题报文发送报文,收到阿里云应答,表示订阅成功。原创 2023-03-09 15:51:38 · 4349 阅读 · 0 评论 -
MQTT协议-发布消息和发布确认
固定报头由两个字节组成,第一个字节的高4位固定为0011,第2位和第1位表示Qos等级,可设置为等级0,所以是00,第3位和第0位也可以设置为0,第二个字节是剩余长度,用?报文标识符只有在Qos等级是1或者2时才出现在报文中,因为本次实验设置的等级是0,所以这个报文标识符就没有。所以可变报头的数据就只有发布权限的主题名,在阿里云里可以选择物模型的Topic类,方便后续传输真实数据。可变报头由两部分组成,一个是主题名,一个是报文标识符,主题名就是阿里云里具有发布权限的Topic类。原创 2023-03-08 23:59:59 · 1546 阅读 · 0 评论 -
MQTT协议-取消订阅和取消订阅确认
在订阅主题时有效载荷是由主题过滤器和服务质量要求组成的,但这里取消订阅就没有了服务质量要求,只有一个主题过滤器,该主题也是具有订阅权限的Topic类,要转为十六进制才能组合报文。可变报头的字节与订阅主题报文的可变报头内容一致,也就是取消和订阅的是同一个主题,不能没有订阅就取消,根据前面文章知道订阅主题报文的可变报头为00 0A,所以这里也是00 0A。先发送CONNECT报文连接阿里云,再发送订阅主题报文,最后发送取消订阅主题报文,阿里云回复了取消订阅确认报文B0 02 00 0A,后续对该报文进行解析。原创 2023-03-08 23:25:46 · 1015 阅读 · 0 评论 -
MQTT协议-订阅主题和订阅确认
加上固定报头和可变报头,可得计算??后面的字节数量,为35个,小于128,因此使用单字节表示剩余长度,转为十六进制为0x23,因此最终的订阅报文如下。原创 2023-03-08 23:03:30 · 3544 阅读 · 0 评论 -
MQTT协议-使用CONNECT报文连接阿里云
将网络调试助手改为TCP Client,远程主机地址填入i6deo513xT1.iot-as-mqtt.cn-shanghai.aliyuncs.com,端口号1883,点击HEX,将上面组合好的CONNECT报文复制粘贴到输入框,点击连接,再点击发送。根据公式180=128*a+b,计算可得a = 1,b = 52,a在高8位,b在低8位,低位在前,高位在后,所以书写顺序是b a。将80转为十六进制0x50,放到文本文档的十六进制数据前面,要符合UTF-8编码,所以还要在前面加上00。原创 2023-03-08 00:04:43 · 1460 阅读 · 5 评论 -
MQTT协议-CONNECT报文剩余长度计算
因为数据位只有7位,全部为1的情况下最大可表示的值为127,即后续字节数量小于128个的话,可以使用一个字节来表示完,大于等于128个的话,一个字节就表示不了,最高位表示该字节后是否还有字节来表示长度,为0,则后面没有再表示长度的字节,说明字节数量小于128个,为1,表示后面还有字节来一起表示长度,说明字节数量大于等于128个。高8位的1表示的数值为128,根据公式300=128*a+b,计算出a和b的值,a是高8位的,b是低8位的。2、把02的二进制写出来,AC为低8位,02为高8位。原创 2023-03-07 23:26:47 · 708 阅读 · 0 评论 -
MQTT协议-CONNECT报文介绍
Connect报文主要用于客户端连接服务器的,未涉及具体数据的传输,可以使用网络调试助手来连接阿里云平台,用十六进制格式发送这一串报文,来连接平台上的一个设备,使其显示在线。原创 2023-03-07 23:12:29 · 1728 阅读 · 0 评论