<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLBC26AA/aly.html" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
前言
建議用戶先學習完自建物聯網平台,使用完自己搭建的MQTT之后再來學習此部分.
當前的各種物聯網平台整體思想是提供一個網頁端讓用戶去注冊設備
這個設備就對應一個MQTT客戶端,然后把這個設備的信息放到單片機/APP/微信小程序上使用.
單片機/APP/微信小程序等就作為了客戶端接入了物聯網平台.
物聯網平台應該說是對設備進行管理的平台.
開通阿里雲物聯網平台
https://www.aliyun.com/
1.搜索 物聯網平台 (如果沒有開通請自行開通)

創建產品(並在產品下面添加設備)
1.咱們做產品的時候,一般都是有個產品.

2.設置下產品的名稱

3.產品弄好了,就要在產品下面掛上設備

4.設置下添加的設備的名字



注意:看看自己的這里是那個區域的,后面會用到

提示:后面咱就會使用下面三個參數(三元組)組合MQTT參數
"ProductKey": "a1m7er1nJbQ",
"DeviceName": "Mqtt",
"DeviceSecret": "7GUrQwgDUcXWV3EIuLwdEvmRPWcl7VsU"
https://help.aliyun.com/document_detail/86706.html 阿里雲的說明文檔
MQTT的IP地址

"ProductKey": "a1m7er1nJbQ",
"DeviceName": "Mqtt",
"DeviceSecret": "7GUrQwgDUcXWV3EIuLwdEvmRPWcl7VsU"
${YourProductKey}.iot-as-mqtt.${region}.aliyuncs.com
1.替換ProductKey:
a1m7er1nJbQ.iot-as-mqtt.${region}.aliyuncs.com
2.替換 ${region}



最終IP地址:
a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com
MQTT的端口號(1883)

MQTT的Client ID

1.我就規定我的clientId是 112233445566
2.咱呢先不走SSL, 所以 securemode=3 (注意:即使走SSL,端口號也是1883)
3.最后一個呢,咱就選用 hmacsha1(這個選擇的是計算MQTT密碼的算法)
最終Client ID:
112233445566|securemode=3,signmethod=hmacsha1|
MQTT的用戶名
"ProductKey": "a1m7er1nJbQ",
"DeviceName": "Mqtt",
"DeviceSecret": "7GUrQwgDUcXWV3EIuLwdEvmRPWcl7VsU"

最終用戶名: Mqtt&a1m7er1nJbQ
MQTT的密碼



所以MQTT連接的密碼:
8B286A9E99B49E19A0964589E8F3C2DBB1C1A8DE
最終
IP地址: a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com
端口號: 1883
Client ID: 112233445566|securemode=3,signmethod=hmacsha1|
用戶名: Mqtt&a1m7er1nJbQ
密碼: 8B286A9E99B49E19A0964589E8F3C2DBB1C1A8DE
測試
1.打開調試助手




2.填入相應的參數,點擊連接


使用網頁端調試助手連接
1.關閉測試軟件
注:一開始說了,一個設備就作為一個MQTT客戶端,也只能一個設備使用.

2.打開網頁端調試助手



3.提示:
WS方式:
IP地址: ws://a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com:443/mqtt
ClientID: 112233445566|securemode=3,signmethod=hmacsha1|
用戶名: Mqtt&a1m7er1nJbQ
密碼: 8B286A9E99B49E19A0964589E8F3C2DBB1C1A8DE

WSS方式:
IP地址: wss://a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com:443/mqtt
ClientID: 112233445566|securemode=2,signmethod=hmacsha1|
用戶名: Mqtt&a1m7er1nJbQ
密碼: 8B286A9E99B49E19A0964589E8F3C2DBB1C1A8DE

使用單片機設備連接(BC260Y)
1.關閉測試軟件
注:一開始說了,一個設備就作為一個MQTT客戶端,也只能一個設備使用.

2.打開這節的單片機程序

3.根據自己的替換下面的參數

4.別忘了安裝好手機卡和天線

5.編譯下載到單片機測試


單片機程序說明
1.根據參數組合IP地址,然后以TCP連接TCP服務器(MQTT服務器本身就是TCP服務器)

2.發送接入MQTT服務器協議


3.為了便於處理數據,接收模組數據采用了兩份緩存,一個接收全部數據,一個只緩存網絡數據


使用Android連接
1.打開本節的Android工程

2.修改參數
注意:一開始說了,一個設備就作為一個MQTT客戶端,也只能一個設備使用.
或者也可以再注冊個設備,然后把參數給APP使用.
如果多個客戶端用的同一個設備的參數,就會互相擠掉線.

4.安裝到手機以后查看下日志

Android程序說明
1.整體說明

org.eclipse.paho.client.mqttv3-1.2.0: 使用的mqtt的jar包
MyMqttClient 是再次封裝的class文件
2.根據參數拼接MQTT信息

3.計算密碼

4.連接MQTT服務器


使用微信小程序連接
1.打開工程

2.修改MQTT參數
注意:一開始說了,一個設備就作為一個MQTT客戶端,也只能一個設備使用.
或者也可以再注冊個設備,然后把參數給小程序使用.
如果多個客戶端用的同一個設備的參數,就會互相擠掉線.

3.如果想快速測試,可以設置軟件不校驗服務器域名(測試的時候這樣方便點)

4.不過還是建議在微信小程序平台上設置域名白名單

注:wss://阿里雲的域名
我的設備接入的域名是: a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com

5.正常運行以后,控制台會打印

微信小程序源碼說明
1.整體說明

paho-mqtt.js : 底層MQTT包
mqtt.js : 在底層包之上封裝的包
hmac_sha1.js : 計算MQTT密碼
public.js : 公共函數
2.連接MQTT


關於單片機程序密碼計算
1.首先咱選擇的密碼計算方式是 hmacsha1
為計算密碼,單片機程序移植了Mbedtls

2.關於計算密碼

注:hmacsha1(參數是DeviceSecret , 參數是 clientId${clientId}deviceName${deviceName}productKey${productKey})
3.單片機程序

4.使用

接着說
3.連接成功以后調用連接成功回調函數


關於組合計算MQTT密碼程序
sprintf((char *)MainBuffer,"clientId%sdeviceName%sproductKey%s",ClientID,DeviceName,ProductKey);
上面是按照官方要求拼接,
aly_hmac_sha1((char *)MainBuffer,strlen((char *)MainBuffer),DeviceSecret,strlen(DeviceSecret),MQTTPassWord);
這個函數是自己添加的程序

參考的阿里雲文檔




