STM32與SIM800連線百度物接入MQTT伺服器教程
前言:
本文介紹如何運用STM32F103與SIM800C組成的裝置端連線百度物接入的教程,文章中主要以介紹連線方法為主,程式碼部分後續考慮釋出(一般情況下通過本文的參考即可完成與百度物接入的連線)。
由於STM32與SIM800C的使用教學在網上隨處可見,本文將不在此介紹。
正文:
首先開啟百度物接入主介面,複製我們的TCP伺服器地址到STM32程式碼中,用SIM800C模組連線到百度物接入的TCP伺服器。(具體連線請自行百度)
以下重點介紹MQTT協議常用的三種報文:
在實際應用中常用的報文有三類:連線報文、訂閱報文、釋出報文
連線報文:
組成:10+後續資料長度+00 04 4D 51 54 54 04 C2 00 78 +客戶端ID長度+客戶端ID+使用者名稱長度+使用者名稱+密碼長度+密碼
如:10 37 00 04 4D 51 54 54 04 C2 00 78 00 0C 44 65 76 69 63 65 49 64 2D 6B 66 62 00 0B 35 71 75 61 6E 37 6B 2F 6B 66 62 00 10 68 50 34 55 36 78 52 62 38 78 53 52 49 61 54 5A
解釋:
固定頭與可變頭:
10:報文型別為連線報文
37:後續資料總長度
00 04:協議名長度
4D 51 54 54:協議名為MQTT
04:協議級別(固定)
C2:連線標誌,沒特殊要求可不改,詳細說明在MQTT手冊3.1.2.3
00 78:最大保持連線時間為120S,當120秒內沒進行任何資料的收發時連線將會斷開
客戶端ID與登陸憑證:
00 0C:客戶端ID長度
44 65 76 69 63 65 49 64 2D 6B 66 62:客戶端ID
00 0B:使用者名稱長度
35 71 75 61 6E 37 6B 2F 6B 66 62:使用者名稱
00 10:金鑰長度
68 50 34 55 36 78 52 62 38 78 53 52 49 61 54 5A :金鑰
說明:連線報文需要客戶端ID、使用者名稱、金鑰。
客戶端ID:可以隨機定義(只要在伺服器中客戶端ID不出現重複即可)
使用者名稱:使用者名稱即我們在百度物接入建立的使用者名稱
祕鑰:在使用者建立完成時伺服器提供的祕鑰,若丟失只能通過物接入平臺重新生成。
將客戶端ID、使用者名稱、金鑰轉換為16進位制碼並根據上述說明組成連線報文傳送至伺服器當中,即可完成連線。
連線報文的功能:連線百度IOT伺服器
訂閱報文:
組成:82+後續資料長度+需訂閱的主題長度+00 0A+主題名長度+主題名+等級
如:82 15 00 0A 00 10 35 71 75 61 6E 37 6B 2F 50 43 5F 74 6F 70 69 63 00
解析:
82:報文型別為訂閱報文
15:後續資料長度
00 0A:訂閱報文的可變頭(固定)
00 10:主題名長度
35 71 75 61 6E 37 6B 2F 50 43 5F 74 6F 70 69 63:主題名
00:報文等級為0
主題即在百度物接入平臺建立策略時為其新增的主題,詳細可檢視上一文章。
訂閱報文功能:訂閱想要接收的報文主題,當組網內有客戶端向該主題釋出資訊的時候,伺服器會將該資訊轉發至該策略所有已訂閱該主題的客戶端當中。
釋出報文:
30+後續資料長度+要釋出的主題名長度+主題名+資料
如:30 16 00 11 35 71 75 61 6E 37 6B 2F 4B 46 42 5F 74 6F 70 69 63 31 32 33
解析:
30:報文型別為釋出報文
16:後續資料長度
00 11:要釋出的主題名長度
35 71 75 61 6E 37 6B 2F 4B 46 42 5F 74 6F 70 69 63:主題名
31 32 33:釋出的資料為123
釋出報文的功能:將資料釋出到某個主題當中,策略內所有訂閱了該主題的客戶端將收到此報文。
運用:
STM32通過SIM800C連線TCP伺服器後向其傳送連線報文完成連線,再向其傳送訂閱報文完成主題的訂閱操作。同一個策略中的客戶端向該主題釋出資訊時伺服器會將該資訊轉發至微控制器當中。同理,微控制器向伺服器傳送釋出報文,訂閱了該報文的主題的客戶端將收到微控制器所傳送的報文。