概述
物联网开发笔记——使用网络调试助手连接阿里云物联网平台(基于MQTT协议)
其实作者本意是使用4G模块来实现与阿里云物联网平台的连接过程,但是由于自己用的4G模块自身的限制,使得阿里云连接总是无法建立,已经联系客服返厂检修了,于是我在此使用网络调试助手来演示如何与阿里云物联网平台建立连接。
一.准备工作
1.MQTT协议说明文档(3.1.1版本)
2.网络调试助手(可使用域名与服务器建立连接)
PS:与阿里云建立连解释,最好使用域名来完成连接过程,而不是使用IP号。这里我跟阿里云的售后工程师咨询过,表示对应的物联网平台的服务器IP是会改变的。
二.阿里云物联网平台云端操作
在阿里云物联网平台上创建相应的产品和设备。如下图
如图所示,阿里云规定你需要创建一个产品然后再在此产品下创建对应的设备。
创建设备后最重要的是设备的三元组信息
PS:读者请自行创建自己的三元组信息,此处仅作展示用,若使用此三元组信息大概率会连接不成功。
三.建立TCP连接对应的域名和端口号
阿里云官方说明文档规定如下:
域名:
Y
o
u
r
P
r
o
d
u
c
t
K
e
y
.
i
o
t
−
a
s
−
m
q
t
t
.
{YourProductKey}.iot-as-mqtt.
YourProductKey.iot−as−mqtt.{YourRegionId}.aliyuncs.com 端口:1883
eg:作者选用的为公共示例(免费),接入地区为华东二区:上海,则Region ID:cn-shanghai。${YourProductKey}为:a1QFeJHSoAp,端口号固定为:1883
则这里建立TCP连接的域名为:a1QFeJHSoAp.iot-as-mqtt.cn-shanghai.aliyuncs.com,端口号:1883
则在网络调试助手下设置为:
四.建立连接命令(CONNECT)
1.固定报头
0x10 ??(可变报头+有效负载总长度)
2.可变报头
具体见上篇博客,这里介绍一下我的设置
Byte8连接标志字节:使用用户名,使用密码,不使用遗嘱命令,清理会话标志置1,清理会话。则设置为:0xC2
Byte9-Byte10保持连接设置:定义多少秒发一次PING包,这里300秒发一次:0x01 2C
则可变报头十个字节设置为:
0x00 04 4D 51 54 54 04 C2 01 2C
3.有效负载
有效负载第一部分为客户端ID(ClientID):
阿里云关于ClientID格式规范为:
eg:Y002|securemode=3,signmethod=hmacsha1|
注意此部分为UTF-8格式,前两字节表示ID的长度,后面才是ClientID
化为16进制为:00 26 59 30 30 32 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
有效负载第二部分为用户名
阿里云用户名格式规范如下:
eg:Y002&a1QFeJHSoAp(UTF-8)
有效负载第三部分为密码:
阿里云密码填写规范为
这里作者使用的是hmacsha1算法加密,可以使用在线解密工具进行解密,这里就不作讲解
这样CONNECT报文名令数据填写完成再计算可变字节和有效负载的总长度,这样的出剩余长度值,转化为16进制,如下:
10 6E 00 04 4D 51 54 54 04 C2 03 00 00 26 59 30 30 32 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 10 59 30 30 32 26 61 31 51 46 65 4A 48 53 6F 41 70 00 28 65 66 39 62 32 39 35 66 31 61 37 34 65 34 64 61 31 38 36 32 37 37 66 34 64 35 38 37 31 66 31 35 38 31 38 30 35 31 38 30(警告:不要使用此段数据连接,此段报文仅作演示参考使用,极有可能连接不成功)
到此将CONNECT输入网络调试助手中
服务器返回CONNACK应答,表示建立连接成功。
物联网平台设备已上线
5.SUBSCRIBE(订阅命令)
**报文格式:**固定报头(0x82+剩余长度)+可变报头(客户端标识符)+有效载荷(TOPIC长度+T0PIC+QoS等级(0、1、2))
eg:订阅一个名称为/sys/a1QFeJHSoAp/${deviceName}/thing/service/property/set的TOPIC
示例报文:0x82 35 00 02 00 30 2F 73 79 73 2F 61 31 51 46 65 4A 48 53 6F 41 70 2F 59 30 30 32 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 00
在网络调试助手中输入SUBSCRIBE报文:
服务端回复SUBACK。
云端也显示订阅成功。
六.取消订阅(UNSUBSCRIBE)
**报文格式:**固定报头+可变报头(客户端标识符)+有效载荷(TOPIC长度+T0PIC)与SUBSCRIBE报文相似,这里不多做描述
eg:取消订阅一个名称为/sys/a1QFeJHSoAp/${deviceName}/thing/service/property/set的TOPIC
A0 34 00 02 00 30 2F 73 79 73 2F 61 31 51 46 65 4A 48 53 6F 41 70 2F 59 30 30 32 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
将UNSUBSCRIBE命令输入网络调试助手中:
服务端回复UNSUBACK
云端显示无订阅选项了
七.PUBLISH
**报文格式:**固定报头(QoS0,RETAIN设0,DUP置0,0x30+剩余长度)+可变报头(主题名TOPIC:UTF-8格式)+有效负载(发布的消息)
eg:向设备中的传感器——电源开关发送0的信息,表示开关断开
TOPIC:/sys/a1QFeJHSoAp/Y002/thing/event/property/post
DATA:{“method”:“thing.event.property.post”,“id”:“0000000020”,“params”:{“PowerSwitch”:0},“version”:“1.0.0”} (注意这里DATA前两字节不需标明信息长度)
则16进制为:0x30 96 01 00 2F 2F 73 79 73 2F 61 31 51 46 65 4A 48 53 6F 41 70 2F 59 30 30 32 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 65 76 65 6E 74 2E 70 72 6F 70 65 72 74 79 2E 70 6F 73 74 22 2C 22 69 64 22 3A 22 30 30 30 30 30 30 30 30 32 30 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 50 6F 77 65 72 53 77 69 74 63 68 22 3A 30 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D
通过网络调试助手发送数据后
云端电源开关值被置为0
好了PUBLISH命令演示完成
八.其他命令
1.PINGREQ:用户在没有数据上发时,应每隔一段时间发送PINGREQ命令以保持设备连接状态
2.DISCONNECT:断开连接状态,命令格式见MQTT协议内容
**小结:**至此MQTT连接示例已经讲解完成,此小结中对于基于阿里云物联网平台的MQTT的CONNECT、SUBSCRIBE、DISSUBSCRIBE、PUBLISH命令进行了重点讲解,这也是每一个物联网学习者所必须掌握的命令,推荐大家线下多进行操作,多查阅说明文档,这样MQTT协议就上收比较快了。
最后
以上就是拼搏咖啡为你收集整理的物联网开发笔记——使用网络调试助手连接阿里云物联网平台(基于MQTT协议)物联网开发笔记——使用网络调试助手连接阿里云物联网平台(基于MQTT协议)的全部内容,希望文章能够帮你解决物联网开发笔记——使用网络调试助手连接阿里云物联网平台(基于MQTT协议)物联网开发笔记——使用网络调试助手连接阿里云物联网平台(基于MQTT协议)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复