? ? ? ? 這個好像也用不到,不過可以先貼出來。簡單看了一下也沒深入分析,直接扒過來了,感覺涉及到了上位機的學習了。我這下位機的可能用不到,就是貼過來好了。
????????應用概述
????????使用 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"
????????}
????????阿里云操作
????????產品操作
????????打開阿里云找到物聯網平臺,開通業務后進入控制臺。
????????點開設備管理的產品頁面,點擊新建產品。根據需求和圖示說明創建產品。
????????具體詳細介紹見阿里云頁面(如何在物聯網平臺創建產品_物聯網平臺(IoT)-阿里云幫助中心)

????????設備操作
????????創建產品完成后就可以進入設備頁面添加設備,在對應產品頁面進入設備管理,按照提示添
加設備 (在做正式產品時建議使用 imei 為 devicename,方便后期維護)
????????阿里云設備創建

????????連接阿里云
????????一機一密 AT HTTP 鑒權連接
????????首先需要使用 HmacMD5 計算哈希值用于簽名,使用網址:計算工具
????????明文:
????????clientId866714044533668deviceName866714044533668productKeya1qsHBbKtmc
????????秘鑰: c25262e140bb58d4ec3de5028a2cc836
????????結果: 655d19e9c43e27d8c66419a6724eb56a
????????拼接 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=655d19e9c43e27d8c66419a6724eb56a&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=073074d8b722eacb1f6d2054d99e9d64&signMethod=HmacMD5e10adc3949ba59abbe56e057f20f883e
????????明文:deviceName866714044533668productKeya1qsHBbKtmcrandom123456
????????秘鑰:nNmPacH5aL8EViD4
????????HmacMD5 計算結果:073074d8b722eacb1f6d2054d99e9d64d8d847e2558c6382fc35d2c91f626501a1qsHBbKtmcnNmPacH5aL8EViD4
????????ProductKey = b1KCi45LcCP
????????ProductSecret = VWll9fiYWKiwraBk
????????DeviceName = 862991419835241
????????productKey=a1qsHBbKtmc&deviceName=866714044533668&random=123456&sign=073074d8b722eacb1f6d2054d99e9d64&signMethod=HmacMD5deviceName866714044533668productKeya1qsHBbKtmcrandom123456nNmPacH5aL8EViD4073074d8b722eacb1f6d2054d99e9d64
當設備屬于公共實例,使用一型一密預注冊認證方式時,動態注冊參數如下:
????????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指令的運行,如果用到了,可以也就會熟悉吧。不過最近動力不太足,這里暫時沒氣力了。