这个好像也用不到,不过可以先贴出来。简单看了一下也没深入分析,直接扒过来了,感觉涉及到了上位机的学习了。我这下位机的可能用不到,就是贴过来好了。
应用概述
使用 AT 方式连接阿里云分为一机一密和一型一密,其中一机一密又包含 HTTP 认证二
次连接和 MQTT 直连两种方式。
步骤
1. 训练波特率
2. 激活 PDP (之前也研究过了,也设置过了。下面再贴一遍过来吧。)
使用如下AT命令,激活了一路id为1、APN为自动获取的默认APN的PDP承载(就是连接并开启了相关通道,无需在担心通讯了,算是设备本身的资料了)
AT+SAPBR=3,1,"CONTYPE","GPRS"
OK
AT+SAPBR=3,1,"APN",""
OK
AT+SAPBR=1,1
OK
AT+SAPBR=2,1
+SAPBR: 1,1,"10.55.40.48"
OK
3. 连接阿里云
这个本次研究就是这个了。
材料准备
准备设备证书及产品证书。
1.
--设备证书
{
"ProductKey" : "a1qsHBbKtmc" ,
"DeviceName" : "866714044533668" ,
"DeviceSecret" : "c25262e140bb58d4ec3de5028a2cc836"
} -- 产品证书
{
"ProductSecret" : "nNmPacH5aL8EViD4" ,
"ProductKey" : "a1qsHBbKtmc"
}
阿里云操作
产品操作
打开阿里云找到物联网平台,开通业务后进入控制台。
点开设备管理的产品页面,点击新建产品。根据需求和图示说明创建产品。

设备操作
创建产品完成后就可以进入设备页面添加设备,在对应产品页面进入设备管理,按照提示添
加设备 (在做正式产品时建议使用 imei 为 devicename ,方便后期维护)
阿里云设备创建

连接阿里云
一机一密 AT HTTP 鉴权连接
首先需要使用 HmacMD5 计算哈希值用于签名,使用网址: 计算工具
明文:
clientId866714044533668deviceName866714044533668productKeya1qsHBbKtmc
秘钥: c25262e140bb58d4ec3de5028a2cc836
结果: 655 d19e9c43e27d8c66419a6724eb56a
拼接 DOWNLOAD 参数
productKey=a1qsHBbKtmc&sign=655d19e9c43e27d8c66419a6724eb56a&clientId=866714044533668&deviceName=866714044533668
具体交互流程如下所示
[ 2021-05-21 20 : 24 : 55.620 ]# SEND ASCII>
AT+HTTPINIT
[ 2021-05-21 20 : 24 : 55.674 ]# RECV ASCII>
AT+HTTPINIT
OK
[ 2021-05-21 20 : 25 : 04.547 ]# SEND ASCII>
AT+HTTPPARA= "URL" ,https://iot-auth.cn-shanghai.aliyuncs.com/auth/devicen
ame
[ 2021-05-21 20 : 25 : 04.601 ]# RECV ASCII>
AT+HTTPPARA= "URL" ,https://iot-auth.cn-shanghai.aliyuncs.com/auth/devicen
ame
OK
[ 2021-05-21 20 : 25 : 11.724 ]# SEND ASCII>
AT+HTTPPARA= "USER_DEFINED" , "Content-Type:
application/x-www-form-urlencoded"
[ 2021-05-21 20 : 25 : 11.776 ]# RECV ASCII>
AT+HTTPPARA= "USER_DEFINED" , "Content-Type:
application/x-www-form-urlencoded"
OK
[ 2021-05-21 20 : 25 : 22.028 ]# SEND ASCII>
AT+HTTPDATA= 120 , 20000
[ 2021-05-21 20 : 25 : 22.078 ]# RECV ASCII>
AT+HTTPDATA= 120 , 20000
DOWNLOAD
[ 2021-05-21 20 : 25 : 29.643 ]# SEND ASCII>
productKey=a1qsHBbKtmc&sign= 655 d19e9c43e27d8c66419a6724eb56a&clientId= 866714044533668 &deviceName= 866714044533668
[ 2021-05-21 20 : 25 : 42.079 ]# RECV ASCII>
OK
[ 2021-05-21 20 : 25 : 52.388 ]# SEND ASCII>
AT+HTTPACTION= 1
[ 2021-05-21 20 : 25 : 52.450 ]# RECV ASCII>
AT+HTTPACTION= 1
OK
[ 2021-05-21 20 : 25 : 53.034 ]# RECV ASCII>
+HTTPACTION: 1 , 200 , 124
[ 2021-05-21 20 : 25 : 59.556 ]# SEND ASCII>
AT+HTTPREAD
[ 2021-05-21 20 : 25 : 59.624 ]# RECV ASCII>
AT+HTTPREAD
+HTTPREAD: 124
{ "code" : 200 , "data" :{ "iotId" : "8rCqP6OVgi90P5a479IC000000" , "iotToken" : "^1^1621599952882^218a0a267fc6c36" }, "message" : "success" }
OK -- 收到服务器返回数据其中 iotId 为 MQTT Client 的用户名, iotToken 的值为 MQTT Clientd 的密码
[ 2021-05-21 20 : 29 : 48.876 ]# SEND ASCII>
AT+MCONFIG= "866714044533668" , "8rCqP6OVgi90P5a479IC000000" , "^1^1621599952882^218a0a267fc6c36"
[ 2021-05-21 20 : 29 : 48.932 ]# RECV ASCII>
AT+MCONFIG= "866714044533668" , "8rCqP6OVgi90P5a479IC000000" , "^1^1621599952882^218a0a267fc6c36"
OK
[ 2021-05-21 20 : 29 : 57.900 ]# SEND ASCII>
AT+SSLMIPSTART= "a1qsHBbKtmc.iot-as-mqtt.cn-shanghai.aliyuncs.com" , 1883
[ 2021-05-21 20 : 29 : 57.950 ]# RECV ASCII>
AT+SSLMIPSTART= "a1qsHBbKtmc.iot-as-mqtt.cn-shanghai.aliyuncs.com" , 1883
OK
[ 2021-05-21 20 : 29 : 58.474 ]# RECV ASCII>
CONNECT OK
[ 2021-05-21 20 : 30 : 03.332 ]# SEND ASCII>
AT+MCONNECT= 1 , 120
[ 2021-05-21 20 : 30 : 03.383 ]# RECV ASCII>
AT+MCONNECT= 1 , 120
OK
[ 2021-05-21 20 : 30 : 03.493 ]# RECV ASCII>
CONNACK OK

一机一密 AT 直连 MQTT
当设备属于公共实例,使用一型一密预注册认证方式时,动态注册参数如下:
mqttClientId: clientId+ "|securemode=3,signmethod=hmacsha1,timestamp=132323232|"
mqttUsername: deviceName+ "&" +productKey
mqttPassword: sign_hmac(deviceSecret,content)

具体交互流程如下所示
[ 2021-05-21 21 : 26 : 59.670 ]# SEND ASCII>
AT+MCONFIG= "866714044533668|securemode=3,signmethod=hmacmd5|" , "866714044533668&a1qsHBbKtmc" , "655d19e9c43e27d8c66419a6724eb56a"
[ 2021-05-21 21 : 26 : 59.725 ]# RECV ASCII>
AT+MCONFIG= "866714044533668|securemode=3,signmethod=hmacmd5|" , "866714044533668&a1qsHBbKtmc" , "655d19e9c43e27d8c66419a6724eb56a"
OK
[ 2021-05-21 21 : 27 : 00.958 ]# SEND ASCII>
AT+SSLMIPSTART= "a1qsHBbKtmc.iot-as-mqtt.cn-shanghai.aliyuncs.com" , 1883
[ 2021-05-21 21 : 27 : 01.007 ]# RECV ASCII>
AT+SSLMIPSTART= "a1qsHBbKtmc.iot-as-mqtt.cn-shanghai.aliyuncs.com" , 1883
OK
[ 2021-05-21 21 : 27 : 01.567 ]# RECV ASCII>
CONNECT OK
[ 2021-05-21 21 : 27 : 02.333 ]# SEND ASCII>
AT+MCONNECT= 1 , 120
[ 2021-05-21 21 : 27 : 02.385 ]# RECV ASCII>
AT+MCONNECT= 1 , 120
OK
[ 2021-05-21 21 : 27 : 02.527 ]# RECV ASCII>
CONNACK OK
一型一密 AT 方式连接
一型一密与一机一密的主要区别在于第一次连接的时候需要根据协议请求秘钥。首先需要在阿里云打开动态注册开关如下图所示。

用到的参数如下所示。
{
"ProductSecret" : "nNmPacH5aL8EViD4" ,
"ProductKey" : "a1qsHBbKtmc"
"DeviceName" "866714044533668"
} --random 为随机数,长度不定
productKey=a1qsHBbKtmc&deviceName= 866714044533668 & random = 123456 &sign= 073074 d8b722eacb1f6d2054d99e9d64&signMethod=HmacMD5 e10adc3949ba59abbe56e057f20f883e
明文:deviceName866714044533668productKeya1qsHBbKtmcrandom123456
秘钥:nNmPacH5aL8EViD4
HmacMD5 计算结果: 073074 d8b722eacb1f6d2054d99e9d64d8d847e2558c6382fc35d2c91f626501a1qsHBbKtmcnNmPacH5aL8EViD4
ProductKey = b1KCi45LcCP
ProductSecret = VWll9fiYWKiwraBk
DeviceName = 862991419835241
productKey=a1qsHBbKtmc&deviceName= 866714044533668 & random = 123456 &sign= 073074 d8b722eacb1f6d2054d99e9d64&signMethod=HmacMD5deviceName866714044533668productKeya1qsHBbKtmcrandom123456nNmPacH5aL8EViD4 073074 d8b722eacb1f6d2054d99e9d64
当设备属于公共实例,使用一型一密预注册认证方式时,动态注册参数如下:
mqttClientId:
clientId+ "|securemode=2,authType=xxxx,random=xxxx,signmethod=xxxx|"
mqttUserName: deviceName+ "&" +productKey
mqttPassword: sign_hmac(productSecret,content)
AT 交互流程如下
[ 21 : 37 : 43.379 ] 发 → ◇ AT+HTTPINIT
[ 21 : 37 : 43.383 ] 收 ← ◆ AT+HTTPINIT
OK
[ 21 : 37 : 48.704 ] 发
→◇ AT+HTTPPARA= "URL" , "https://iot-auth.cn-shanghai.aliyuncs.com/auth/register/device"
[ 21 : 37 : 48.713 ] 收
←◆ AT+HTTPPARA= "URL" , "https://iot-auth.cn-shanghai.aliyuncs.com/auth/register/device"
OK
[ 21 : 37 : 55.164 ] 发 → ◇ AT+HTTPPARA= "USER_DEFINED" , "Content-Type:application/x-www-form-urlencoded"
[ 21 : 37 : 55.170 ] 收 ← ◆ AT+HTTPPARA= "USER_DEFINED" , "Content-Type:application/x-www-form-urlencoded"
OK
[ 21 : 38 : 00.207 ] 发 → ◇ AT+HTTPDATA= 120 , 20000
[ 21 : 38 : 00.215 ] 收 ← ◆ AT+HTTPDATA= 120 , 20000
DOWNLOAD
[ 21 : 38 : 07.980 ] 发
→◇ productKey=a1qsHBbKtmc&deviceName= 867435054361274 & random = 123456 &sign=f25999d2e8ff8f5854b95d0ea9e0cd0c&signMethod=HmacMD5
[ 21 : 38 : 07.989 ] 收 ← ◆
OK
[ 21 : 38 : 17.459 ] 发 → ◇ AT+HTTPACTION= 1
[ 21 : 38 : 17.467 ] 收 ← ◆ AT+HTTPACTION= 1
OK
[ 21 : 38 : 18.931 ] 收 ← ◆
+HTTPACTION: 1 , 200 , 149
[ 21 : 38 : 23.636 ] 发 → ◇ AT+HTTPREAD
[ 21 : 38 : 23.645 ] 收 ← ◆ AT+HTTPREAD
+HTTPREAD: 149
{ "code" : 200 , "data" :{ "deviceName" : "867435054361274" , "deviceSecret" : "82cdb125154973a7c9fac52be5b757c2" , "productKey" : "a1qsHBbKtmc" }, "message" : "success" }
OK
发布与订阅消息
发布
[ 2021-05-21 23 : 02 : 04.961 ]# RECV ASCII>
CONNACK OK
[ 2021-05-21 23 : 02 : 16.503 ]# SEND ASCII>
AT+MPUB= "/a1qsHBbKtmc/866714044533668/user/update" , 0 , 0 , "HelloWorld"
[ 2021-05-21 23 : 02 : 16.554 ]# RECV ASCII>
AT+MPUB= "/a1qsHBbKtmc/866714044533668/user/update" , 0 , 0 , "HelloWorld"
OK

订阅
[ 2021-05-21 23 : 04 : 59.487 ]# SEND ASCII>
AT+MSUB= "/a1qsHBbKtmc/866714044533668/user/get" , 0
[ 2021-05-21 23 : 04 : 59.603 ]# RECV ASCII>
AT+MSUB= "/a1qsHBbKtmc/866714044533668/user/get" , 0
OK
[ 2021-05-21 23 : 04 : 59.725 ]# RECV ASCII>
SUBACK
[ 2021-05-21 23 : 05 : 16.759 ]# SEND ASCII>
AT+MQTTMSGSET= 0
[ 2021-05-21 23 : 05 : 16.808 ]# RECV ASCII>
AT+MQTTMSGSET= 0
OK
[ 2021-05-21 23 : 05 : 41.965 ]# RECV ASCII>
+MSUB: "/a1qsHBbKtmc/866714044533668/user/get" , 7 byte ,Hello!!

补:完全扒过来的,因为我不是很熟,就不深入分析了。
再补:实际上大差不差的,也就是AT指令的运行,如果用到了,可以也就会熟悉吧。不过最近动力不太足,这里暂时没气力了。