大家好,超子又和大家见面了,超子我能力有限,技术不高,有什么错误的地方,欢迎板砖。今天我们一起构建MQTT协议中的CONNECT报文连接Tlink物联网平台。在前面的文章《Tlink物联网平台使用心得(1)建立产品和设备》中,超子介绍了Tlink平台如何建立设备组和设备,以及传感器的相关设置,这些内容需要大家提前掌握。然后我们来构建报文。
首先是CONNECT报文的固定报头是,0x10 ??,??表示剩余长度,我们需要确定了可变报头和负载后才能计算出剩余长度,所以暂时待定。
CONNECT报文中的可变报头用来设置信息和各种功能,Tlink物联网平台和阿里云物联网平台的一样,所以直接把阿里云的可变报头拿过来就行,简化的16进制书写,去掉0x,结果如下:
00 04 4D 51 54 54 04 C2 00 64
CONNECT报文中的负载包含客户端ID,用户名和密码3个重要的消息,先总结下各种信息对应的什么内容。
用户名和密码说明
客户端ID:对应设备的序列号
用户名:如上图所示,是固定的MQTT
密码:如上图所示,是固定的MQTTPW
用户名和密码已经确定下来了,我们一起来找一下客户端ID的信息在什么地方。
设备序列号
我们在左侧的导航栏中,进入设备管理界面,可以看到我们上一篇文章中新建的两个设备,红圈所示就是设备的序列号,也就是我们需要的客户端ID。我们先以开关设备为例,设备的序列号长度是16,我们把设备序列号字符串换成16进制,而且前面还得加上两个字节,表示长度16,最终的16进制,简化书写,去掉0x后的结果如下:
00 10 32 33 4C 36 39 38 4F 4A 44 53 30 51 31 4D 47 34
再看负载中的用户名,是固定的MQTT,长度4个字节,那么换成16进制,然后前面再加上两个字节,表示长度4,最终的16进制,简化书写,去掉0x后的结果如下:
00 04 4D 51 54 54
再看负载中的密码,是固定的MQTTPW,长度6个字节,那么换成16进制,然后前面再加上两个字节,表示长度6,最终的16进制,简化书写,去掉0x后的结果如下:
00 06 4D 51 54 54 50 57
到此整个负载就搞定了,接下来我们把客户端ID+用户名+密码连接起来,简化16进制,去掉0x结果如下:
00 10 32 33 4C 36 39 38 4F 4A 44 53 30 51 31 4D 47 34 00 04 4D 51 54 54 00 06 4D 51 54 54 50 57
我们一起数一下,整个负载部分共计32个字节 。剩余长度=可变报头+负载=10+32=42,42/128=0,一个字节就能搞定,换成16进制就是0x2A,最后我们把固定报头、可变报头和负载连接起来,简化16进制,去掉0x的最终结果如下:
10 2A 00 04 4D 51 54 54 04 C2 00 64 00 10 32 33 4C 36 39 38 4F 4A 44 53 30 51 31 4D 47 34 00 04 4D 51 54 54 00 06 4D 51 54 54 50 57
到此CONNECT报文构建完毕,我们用网络助手实测一下,Tlink物联网平台提供的域名和端口号如下所示:
mq.tlink.io:1883
我们实际测试一下CONNECT报文,看看能不能正常的连接上Tlink物联网平台。
网络助手实际测试报文
使用网络调试助手软件发送报文后,Tlink物联网平台回复我们的CONNACK报文中,我们看最后1个字节是0x00,,说明我们的CONNECT报文正确。如此一来我们今天的任务就圆满完成了。