1. 程式人生 > 其它 >001-STM32F103+EC200(移遠4G Cat1)基本控制篇(阿里雲物聯網平臺)--C#,網頁,android,微信小程式,微控制器等使用MQTT接入阿里雲物聯網平臺

001-STM32F103+EC200(移遠4G Cat1)基本控制篇(阿里雲物聯網平臺)--C#,網頁,android,微信小程式,微控制器等使用MQTT接入阿里雲物聯網平臺

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/EC200/aliyun.html" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

 

前言

這節測試下使用STM32+EC200(移遠4G Cat1) 和 Android 和 微信小程式 和 網頁端 接入阿里雲物聯網平臺

當前的各種物聯網平臺整體思想是提供一個網頁端讓使用者去註冊裝置

這個裝置就對應一個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的埠號是什麼

 

 

現在看MQTT的Client ID是怎麼組合的

 

 

 

1.我就規定我的前面的clientId是  112233445566 (這個任意)

2.咱呢先不走SSL,  所以  securemode=3 (注意:即使走SSL,埠號也是1883)

3.最後一個呢,咱就選用 hmacsha1(這個選擇的是計算MQTT密碼的演算法)

最終MQTT的 Client ID:

112233445566|securemode=3,signmethod=hmacsha1|

 

客戶端(裝置)連線的MQTT的使用者名稱

{
"ProductKey": "a1m7er1nJbQ",
"DeviceName": "Mqtt",
"DeviceSecret": "7GUrQwgDUcXWV3EIuLwdEvmRPWcl7VsU"
}

 

 

 

終端使用者名: Mqtt&a1m7er1nJbQ

 

客戶端(裝置)連線的MQTT的密碼

{
"ProductKey": "a1m7er1nJbQ",
"DeviceName": "Mqtt",
"DeviceSecret": "7GUrQwgDUcXWV3EIuLwdEvmRPWcl7VsU"
}

 

 

 

 

 

 

 

 

 

 

 

 

所以MQTT連線的密碼

8B286A9E99B49E19A0964589E8F3C2DBB1C1A8DE

 

 

最終

IP地址:     a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com

埠號:    1883

Client ID: 112233445566|securemode=3,signmethod=hmacsha1|

使用者名稱:    Mqtt&a1m7er1nJbQ

密碼:       8B286A9E99B49E19A0964589E8F3C2DBB1C1A8DE

 

測試

1.開啟MQTT除錯助手

 

 

 

 

 

 

 

 

 

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

 

 

 

 

4.WSS方式:

IP地址: wss://a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com:443/mqtt

ClientID: 112233445566|securemode=2,signmethod=hmacsha1|

使用者名稱: Mqtt&a1m7er1nJbQ

密碼: 8B286A9E99B49E19A0964589E8F3C2DBB1C1A8DE

 

 

 

 

使用微控制器連線

1.關閉測試軟體

注:一開始說了,一個裝置就作為一個MQTT客戶端,也只能一個裝置使用.

 

 

2.安裝好模組

微控制器通過串列埠2和GPRS模組通訊;  微控制器PA8引腳作為復位模組使用

(微控制器)PA2  ----   (EC200)RX;

(微控制器)PA3  ----   (EC200)TX;

(微控制器)PA8  ----   (EC200)RST

 

 

3.開啟這節的微控制器程式

 

 

4.使用微控制器串列埠1列印串列埠日誌(115200)

 

 

5.修改為阿里雲的裝置引數.

 

 

 

6.然後下載程式到微控制器,檢視日誌

 

 

 

 

微控制器程式說明

1,串列埠2接收模組資料的時候,單獨使用一個快取,快取了TCP接收的資料

 

 

 

 

 

 

2.整體概況

 

 

 

 

①:控制模組連線TCP伺服器(MQTT伺服器)

②:計算MQTT密碼

③:MQTT訊息處理封裝包(快取管理,支援訊息等級0,1,2)

④:使用Mbedtls裡面的sha1或者md5 計算密碼檔案

 

 

3.初始化MQTT,註冊相應的回撥函式

 

 

 

我編寫的包是以註冊回撥函式的形式使用.

 

 

 

 

4.先使用TCP連線上TCP伺服器(MQTT伺服器就是TCP伺服器嘛)

 

 

 

 

 

 

5.連線上TCP以後,傳送連線MQTT協議

 

 

 

(關於組合計算密碼在最後面會有詳細說明)

 

 

 

6.傳送連線協議給伺服器以後,如果伺服器返回連線成功訊息,便會呼叫MQTT連線成功回撥函式

 

 

 

 

 

 

7.連線上了以後就輪訓mqtt_send_function函式

咱們後面呼叫訂閱,釋出的函式的時候, 資料都會儲存在快取裡面, 然後通過輪訓 mqtt_send_function函式,把MQTT的資料傳送出去

 

 

 

 

這個函式裡面還處理了心跳包

 

 

 

8.接收訊息

連線MQTT成功以後收到的伺服器傳送的資料需要讓 mqtt_read_function函式處理, 該函式內部會處理訊息並呼叫相應的回撥函

 

 

 

 

 

 

使用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.密碼計算需要sha1或MD5,我微控制器移植了Mbedtls

 

 

 

2.密碼計算的第二種方式 

 

3.按照官方說明拼接引數

 

 

 

4.使用加密演算法計算密碼

aly_hmac_sha1((char *)tcp_mqtt_buff,strlen((char *)tcp_mqtt_buff),DeviceSecret,strlen(DeviceSecret),(unsigned char *)mqtt_password);

這個函式是自己新增的程式

 

5.上面原始碼可以看出, 不是用sha1普通的計算下.

其實是阿里雲平臺這樣規定的組合計算

 

 

 

 

 

 

 

 

 

 

使用者也可以用阿里雲提供的 SDK包裡面的程式檔案實現計算密碼.

 

結語

再重複一句話,在物聯網平臺上面,一個產品就是一個MQTT客戶端.

如果客戶想多個裝置連線雲平臺就需要自己多建立幾個裝置.

裝置(MQTT客戶端)上報資料在雲平臺顯示,見後面章節.