阿里云优惠卷,戳我领取!
摘要
最近做一个项目,要使用移远的M26模组,用MQTT协议将一个设备对接到阿里云的IoT平台。
1、注册阿里云IoT平台并创建产品
本文专注于写终端设备的对接流程,而不是IoT平台的配置,关于产品的创建,请看阿里的官方文档,很详细。
2、获取产品三元组
在IoT平台获取三元组ProductKey、DeviceName、DeviceSecret,这好比终端设备的身份证,有了它才能对接到阿里云平台上。
3、根据产品三元组,推算出MQTT协议所需的数据
1、clientID:
自己随便定义字符串 我这里示例为“12345”
2、mqttClientId:
格式为”clientID“+”|securemode=3,signmethod=hmacsha1,timestamp=10|“
3、mqttUsername:
格式为”DeviceName+&+ProductKey“
4、mqttPassword:哈希算法,得出的,后面给出了C语言库
代码示例:
strcpy(clientID, "12345");
sprintf(mqttClientId, "%s|securemode=3,signmethod=hmacsha1,timestamp=10|",clientID);
sprintf(mqttUsername, "%s&%s",DeviceName,ProductKey);
sprintf(str, "clientId%sdeviceName%sproductKey%stimestamp10",clientID,DeviceName,ProductKey);
aliyun_iot_common_hmac_sha1(str,strlen(str),mqttPassword,DeviceSecret,strlen(DeviceSecret));
以上都是MQTT协议所需的连接参数。
关于最后的aliyun_iot_common_hmac_sha1函数,是计算mqttPassword的哈希算法。
网上可以找到封装好的C语言库。
如果你看不太明白的话,可以再看这个参考文档。(初试连接阿里云IoT套件,教你一小时完成接入)。我在摸索的时候,它给了我很大的帮助。
确定自己手里的模组固件是否支持MQTT
BC28对MQTT协议栈的支持时从固件R01A07开始支持,发送AT指令查询一下,不支持的话要升级固件。
4、用BC28的AT指令,连接到阿里云平台
看下面的内容之前,建议先看一看官方的文档(BC28 MQTT官方指导文档 、BC28 AT指令官方文档 )。
1、ATI 命令回显
返回ok
2、AT+CPSMS=0 关闭PSM模式
ok
3、AT+CEDRXS=0,5 关闭eDRX模式
ok
4、AT+NCCID 读取sim卡串号
+NCCID:XXXXXX。。。。
5、AT+CSQ 查询信号强度
+CSQ:XX.99
6、AT+CEREG? 查看入网状态
+CEREG:0,1
7、AT+CGATT? 查看网络状况
+CGATT:1
8、AT+QMTOPEN=0,“阿里域名”,1883
ok
ps:上海华东区的域名格式为 :iot-as-mqtt.cn-shanghai.aliyuncs.com
9、AT+QMTCONN=0,“123456”
+QMTCONN: 0,0,0
ps:123456为clientID,随便定义
这样整个连接流程就OK了,在阿里云平台可以看到
此时产品已经上线,但是想要传输数据和接收数据还需要2个指令
10、AT+QMTSUB=0,1,“topic”,2 //订阅消息,订阅之后能接受到这里发布的消息。
ok
ps topic可以在阿里云后台找到:
11、AT+QMTPUB=0,0,0,1,“topic”
返回:>
然后输入要发送的数据 ,末尾带上0x1A (ctrl+Z)。
这样数据就能发布到指定的topic内,服务器订阅了这个后就能收到数据~