鏈接--->https://sanwen8.cn/p/649shZ1.html
OneNET現已全面適配標准MQTT協議,相信這一功能的增加會**便於開發者進行設備的接入。
OneNET提供了MQTT的C語言版本的SDK供大家使用,接下來我們將利用該SDK,將MQTT協議移植到麒麟座開發板上,希望這邊文章能對希望使用MQTT接入OneNET的開發者提供一定幫助。☀
(本文中使用的SDK、調試工具、以及說明文檔,均可以在官網文檔中心中的MQTT專區下載)
— 下載SDK —
(一)
▶ 首先進入我們的MQTT說明專區,找到C語言SDK下載鏈接,下載SDK。
其中:
mqtt/config.h
mqtt/mqtt.h
mqtt/mqtt_buffer.h
src/mqtt.c
src/mqtt_buffer.c
為MQTT相關的.c 以及.h文件sample/c/sample.c 是使用示例文件
— 代碼的移植—
(二)
▶ 將上述.c 以及 .h 文件復制到 開發板的工程中 Protocol/mqtt目錄下,在工程中添加mqtt.c以及mqtt_buffer.c文件(記得修改Include Path 路徑)
▶ 由於SDK是在linux環境下編譯以及測試的,移植到STM32環境下帶來了平台的差異性。
▶ 主要記得修改如下地方:
1、修改MQTT相關的.h文件的include路徑,使之與工程環境相匹配
2、屏蔽掉原來的assert函數,和inline關鍵字
3、修改分配的緩沖區的大小
主要是 MqttSample_Init()函數中的Mqtt_InitContext() 函數,SDK中分配了 1<<20大小的字節,由於STM32資源有限,這里需要改小一點,本例中為1000字節。
4、修改接口的初始化、收、發函數。
原SDK是在linux系統中利用網口來實現通信,而開發板中使用串口連接通信模塊的形式實現通信,相關的函數都需要作相應的修改,詳見代碼文件。
— 代碼示例 —
(三)
(1)源代碼如下:
在平台創建一個公開協議產品(設備接入協議類型選擇MQTT協議),這里不介紹產品創建過程,請參考平台文檔中心“接入幫助”部分的相關內容。
(2)本例中的代碼流程如下圖:
(3)開發板資源分配如下:
代碼中需要修改的參數位置:
main.c
line 40:
line 789
esp8266.h
line1 :
— SDK使用示例 —
(四)
▶ MQTT連接
▶ MQTT訂閱
▶ MQTT發布消息
▶ MQTT回復命令
▶ MQTT上傳數據
▶ 接收數據解析
— 代碼接入測試 —
(五)
▶ 使用MQTT simulate device 來模擬同產品目錄下的另外一個設備
▶ 打開設備電源,在調試串口目錄下可以看到調試信息
▶ 使用模擬設備與平台建立連接
可以看到產品topic列表中已經有開發板所創建的 test_topic(訂閱自動創建)
— topic發布以及接收測試 —
(六)
▶ 在訂閱框中輸入key_press ,點擊訂閱(該topic為開發板按鍵發布消息的topic)
▶ 按下開發板上的key2,見調試信息:
▶ 觸發消息之后,在模擬器側,就可以收到該topic的消息了
▶ 使用模擬軟件,向test_topic發送一則消息
▶ 在開發板側,可以從調試信息中看到,已經收到了該topic消息
至此,topic的訂閱與發布測試已完成。
— 命令下發與應答測試 —
(七)
▶ 在線發送命令給開發板
▶ 在調試信息中可以看到以及接收了該命令並成功解析
▶ 此時LED7已經被點亮