目录
10. PUBLISH 发布消息(双向的,C < = > S)
此教程使用电脑网络调试助手,MQTT接入阿里云物联网平台,手动计算MQTT 报文帧,实现IOT设备的数据解析与上报。
逐字节详解 MQTT控制报文帧的合成和解析,对于单片机设备 MQTT接入物联网平台,有很好的借鉴作用。
相关文章:
- MQTT3.1.1 通信协议 - 帧格式详解:MQTT 报文帧格式详解
- 阿里云物联网平台,注册产品、设备、设备三元组:阿里云 - 物联网 MQTT注册产品、设备、设备三元组
此教程,使用的设备证书三元组为
{
"ProductKey": "a1wFylTxYeD",
"DeviceName": "co_0001",
"DeviceSecret": "7ab0c4b3532b5783df5fdc58a2895d7a"
}
阿里云物联网控制台:阿里云
1. CONNECT 连接服务器
- 有效载荷字段中,客户端ID、用户名、密码的合成方法:
| 客户端ID | *|securemode=3,signmethod=hmacsha1| | *为设备名称 |
|---|---|---|
| 用户名 | *&# | *为设备名称,#是ProductKey |
| 密码 | 用DeviceSecret做为秘钥对clientId*deviceName*productKey#进行hmacsha1加密后的结果 | *为设备名称,#是ProductKey |
结合自己的设备证书,最终合成的客户端ID、用户名、密码:
客户端ID:co_0001|securemode=3,signmethod=hmacsha1|
用户名:co_0001&a1wFylTxYeD
clientIdco_0001deviceNameco_0001productKeya1wFylTxYeD
-------------------------------用DeviceSecret做为秘钥,进行HmacSHA1加密---------------------------------
密码:e782b5e55b37655c27812a60c307b0a7575d8f6d
将上面这些统统转换为 16进制,以备帧合成过程中使用。
| 字符格式 | 16 进制ASC2编码格式 | 长度 | |
|---|---|---|---|
| 客户端ID | co_0001|securemode=3,signmethod=hmacsha1| | 63 6F 5F 30 30 30 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C | 41 |
| 用户名 | co_0001&a1wFylTxYeD | 63 6F 5F 30 30 30 31 26 61 31 77 46 79 6C 54 78 59 65 44 | 19 |
| 密码 | e782b5e55b37655c27812a60c307b0a7575d8f6d | 65 37 38 32 62 35 65 35 35 62 33 37 36 35 35 63 32 37 38 31 32 61 36 30 63 33 30 37 62 30 61 37 35 37 35 64 38 66 36 64 | 40 |
- CONNECT 报文帧的合成过程:
10 ?? (固定报头。??为剩余长度,待后续报文合成完毕后计算)
10 ?? 00 04 4D 51 54 54 04 C2 01 2C(可变报头。01 2C为Keep alive的时长300,单位秒。可自行定义)
10 ?? 00 04 4D 51 54 54 04 C2 01 2C 00 29 63 6F 5F 30 30 30 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C(客户端ID的字节长度41 + 客户端ID)
10 ?? 00 04 4D 51 54 54 04 C2 01 2C 00 29 63 6F 5F 30 30 30 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C 00 13 63 6F 5F 30 30 30 31 26 61 31 77 46 79 6C 54 78 59 65 44 (用户名的字节长度19 + 用户名)
10 ?? 00 04 4D 51 54 54 04 C2 01 2C 00 29 63 6F 5F 30 30 30 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C 00 13 63 6F 5F 30 30 30 31 26 61 31 77 46 79 6C 54 78 59 65 44 00 28 65 37 38 32 62 35 65 35 35 62 33 37 36 35 35 63 32 37 38 31 32 61 36 30 63 33 30 37 62 30 61 37 35 37 35 64 38 66 36 64 (密码的字节长度40 + 密码)
10 74 00 04 4D 51 54 54 04 C2 01 2C 00 29 63 6F 5F 30 30 30 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C 00 13 63 6F 5F 30 30 30 31 26 61 31 77 46 79 6C 54 78 59 65 44 00 28 65 37 38 32 62 35 65 35 35 62 33 37 36 35 35 63 32 37 38 31 32 61 36 30 63 33 30 37 62 30 61 37 35 37 35 64 38 66 36 64(可变报头 + 有效载荷 的总长度 = 116)
- 最终合成后的CONNECT报文:
10 74 00 04 4D 51 54 54 04 C2 01 2C 00 29 63 6F 5F 30 30 30 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C 00 13 63 6F 5F 30 30 30 31 26 61 31 77 46 79 6C 54 78 59 65 44 00 28 65 37 38 32 62 35 65 35 35 62 33 37 36 35 35 63 32 37 38 31 32 61 36 30 63 33 30 37 62 30 61 37 35 37 35 64 38 66 36 64
留意中文输入法,可能会乱码。

本文深入解析MQTT协议的工作原理,包括连接、确认、断开等关键步骤,并通过实例展示如何使用网络调试助手实现设备与阿里云物联网平台的数据交互。涵盖了从连接服务器到消息发布的全过程,特别适合初学者理解MQTT协议。

1557

被折叠的 条评论
为什么被折叠?



