引言
前一段时间做了一个物联网的项目,主要是通过各种模块(ESP8266、AIR202、CH9121)连接上阿里云的物联网平台进行通信,因此来记录一下流程,可能有很多不足和错误的地方恳请大佬们批评指正。
本节讲的是怎么利用网络调试助手先建立TCP/IP连接以后再通过发送MQTT报文来连接上阿里云。
MQTT报文
利用网络调试助手连接上阿里云需要了解什么是MQTT报文。根据我的理解它是一种轻量级的通信协议,其中常用的报文类型有:建立连接、订阅、推送消息三个类型。 其中订阅和推送可能有点不好理解,可以把它当作社交软件上的关注和推送,只有关注了某个博主(对应MQTT里面的话题),博主发布新的作品(对应MQTT里面的消息)后我们才会受到。当建立了TCP/IP连接以后首先需要发送建立连接报文,然后订阅相关的主题,之后就可以接收到该主题推送的消息了。
连接报文
连接报文包括了固定报头、可变报头和有效载荷三个部分。
固定报头一共有两个字节,为10和剩余的报文长度字段
可变报头包含了:协议名、协议级别、连接标志、清理会话和遗嘱标志等,在实际实现种设置为00 04 4D 51 54 54 04 C2 00 64。其中00 04为协议所要求的,4D 51 54 54是“MQTT”的ASCII编码,04为版本号,C2是连接标志位,包含了遗嘱标志、清除会话、保留消息等信息,00 64是保持连接字节,表示两者之间通信的最大时间间隔。实际我们使用中需要更改的是00 64 两个字节,可以根据自己的需求来设置
有效载荷包含了客户端ID的长度,客户端ID,用户名的长度,用户名的十六进制,密码的长度和密码的十六进制表示。客户端ID、用户名和密码都是根据阿里云所提供的三元码而来。其中客户端ID是:
Device_name+” |securemode=3,signmethod=hmacsha1|”
用户名是:
Device_name+”&”+ProcuctKey
密码是:DeviceSecret作为密钥对
clientId*deviceName*productKey#
采用hnacsha1加密后的字符串。其中Device_name、ProcuctKey、DeviceSecret就是阿里云提供的三元码信息,clientId
把报文的三个部分全部构造完毕以后就可以组合起来当作连接报文,实际发送部分后面再讲。
这是我的连接报文,前面两个是固定报头和可变报头,后面马赛克的地方是有效载荷。
订阅报文
在阿里云的物联网平台当连接上阿里云后会默认已经订阅了相关的主题,其实是不用再发送订阅报文的,但是为了了解MQTT全部的流程,还是讲解一下。
订阅主题包括了固定报头、可变报头、有效载荷三个部分
固定报头一共有两个字节,第一个字节是82,第二个字节是剩余长度
可变报头包括包含了报文标识符,用来区分报文,尤其是在重发的报文中用于标识是否为同一个报文,并且在需要应答的场景中用来确定是对于哪个报文的应答。
有效载荷包含一个主题过滤器,表示了客户端想订阅的主题。前面两个字节是主题的长度,后面的字节是主题的名称,最后一个字节是消息等级,一般用等级0。
推送消息报文
发布消息报文包括固定报头、可变报头和有效载荷三个部分。
固定报头两个字节,包含了重发标志、服务质量等级、保留标志等消息,第一个字节设定为30,第二个字节为报文长度
可变报头包含主题名和报文标识符,前面两个字节是主题名的长度,后面是主题名。如果是等级1的消息则会加上报文标识符,等级0的不用加标识符。
有效载荷包含了发送消息的内容。
阿里云有自己的物理模型。在测试中发送来的消息如下
{“method”:“thing.event.property.post”,“id”:“1589083247”,“params”:{“WorkSwitch”:1},“version”:“1.0.0”}
因此当收到消息后对该消息进行解析即可,可以看到消息中有把WorkSwitch设置为1。
连接阿里云
- 建立TCP/IP连接
再网络调试助手里面设置成TCP CLIENT,然后主机地址写101.133.195.226 :1883,点击建立连接
2.发送连接报文
把上面写出来的建立连接的报文在下面按照16进制发送即可,连接上服务器以后会收到20 02 00 00报文
可以看到已经连接上了阿里云
3.接受推送消息
当我在在线调试里面设置了工作开关为1打开的时候,网络调试助手会受到所推送的消息如下
其中可以按照上面所说的解析这个报文,其中报文的
2F 73 79 73 2F 61 31 6A 66 35 42 41 38 47 7A 70 2F 44 65 76 69 63 65 5F 31 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74 7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 73 65 72 76 69 63 65 2E 70 72 6F 70 65 72 74 79 2E 73 65 74 22 2C 22 69 64 22 3A 22 31 31 32 33 38 35 35 36 39 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 57 6F 74 6B 53 77 69 74 63 68 22 3A 31 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D
部分代表的信息是
/sys/a1jf5BA8Gzp/Device_1/thing/service/property/set{“method”:“thing.service.property.set”,“id”:“112385569”,“params”:{“WotkSwitch”:1},“version”:“1.0.0”}
可以看到是接收到了吧工作开关打开的命令。
以上便是有关网络调试助手连接阿里云物联网平台的内容,新手作文可能写的很乱,恳请大家谅解。