1 MQTT 通信協議簡介
1.1 概述
MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是一種基
于發布/訂閱(Publish/Subscribe)模式的“輕量級”通訊協議,該協議構建于 TCP/IP 協議上,
由 IBM 在 1999 年發布。MQTT 最大優點在于,可以極少的代碼和有限的帶寬,為連接遠
程設備提供實時可靠的消息服務。
MQTT 是輕量、簡單、開放和易于實現的,同時作為一種低開銷、低帶寬占用的即時
通訊協議,使其在物聯網、小型設備、移動應用等方面有較廣泛的應用。
MQTT 具有如下特點:
(1) 輕量可靠:MQTT 的報文格式精簡、緊湊,可在嚴重受限的硬件設備和低帶寬、
高延遲的網絡上實現穩定傳輸。
(2) 發布/訂閱模式(Publish/Subscribe):發布/訂閱模式的優點在于發布者與訂閱者的
解耦,實現異步協議。即訂閱者與發布者無需建立直接連接,亦無需同時在線。
(3) 為物聯網而生:提供心跳機制、遺囑消息、QoS 質量等級 + 離線消息、主題和
安全管理等全面的物聯網應用特性。
(4) 生態更完善:覆蓋范圍廣,已成為眾多云廠商物聯網平臺的標準通信協議
1.2 應用場景
MQTT 作為一種低開銷,低帶寬占用的即時通訊協議,可以極少的代碼和帶寬為聯網
設備提供實時可靠的消息服務,適用于硬件資源有限的設備及帶寬有限的網絡環境。常
見的應用場景如下:
(1) 物聯網 M2M 通信,物聯網大數據采集。
(2) 移動即時消息及消息推送。
(4) 車聯網通信,電動車站樁采集。
(5) 智慧城市、遠程醫療、遠程教育。
(6) 電力能源、石油能源。
1.3 Mosquitto 工具安裝
Mosquitto 是一款開源的 MQTT 消息代理(服務器)軟件,提供輕量級的、支持可發
布/可訂閱的的消息推送模式。我司提供的評估板文件系統已支持 Mosquitto 工具,本文
mqtt_client 案例采用 Mosquitto 工具演示 MQTT 通信協議的通信功能。由于上位機 Ubuntu
系統作為通信對象,因此需在 Ubuntu 終端執行如下命令安裝 Mosquitto 工具。
Host# sudo apt-get install mosquitto-clients
2 mqtt_client 案例
2.1 案例說明
案例功能:使用 libmosquitto(MQTT version 3.1.1 client library)的 API 與 MQTT 代理服
務器通信。基于 MQTT 通信協議,實現發布和訂閱消息功能。
程序流程圖如下圖所示。
2.2 案例測試
本案例使用公網 MQTT HiveMQ 服務器與上位機 Ubuntu Mosquitto 工具通信。請通過
網線將評估板千兆網口 ETH0 RGMII 和上位機連接至公網,確保可正常訪問互聯網。
下表提供了可用的在線公共 MQTT 服務器,可根據需要自行切換。
評估板啟動,將案例 bin 目錄下 mqtt_client 可執行文件拷貝至評估板文件系統的任意
目錄下,執行如下命令查看程序參數說明。
Target#
./mqtt_client --help
2.2.1
評估板發布/上位機訂閱
在上位機執行如下命令,使用 mosquitto_sub 工具訂閱 MQTT 主題。
Host# mosquitto_sub -h broker.hivemq.com -p 1883 -t test/data
參數解析:
-h:指定 MQTT 服務器;
-p:指定 MQTT 服務器 TCP 端口;
-t:定義 MQTT 主題,可自定義命名。
=
在評估板文件系統執行如下命令發布消息至 MQTT 服務器。
Target#
./mqtt_client -h broker.hivemq.com -p 1883 -M publish -t test/data -m
'www.tronlong.com'
2.3 案例編譯
將案例 src 文件夾拷貝至 Ubuntu 工作目錄下,請先確保已參考 Linux 系統使用手冊編
譯過 LinuxSDK,構建 T507 處理器對應的 GCC 編譯器。進入 src 目錄執行如下命令,使用
LinuxSDK 開發包目錄下的 GCC 編譯器進行案例編譯。編譯完成后,將在當前目錄下生成
可執行文件。
Host# CC=/home/tronlong/T507/LinuxSDK/out/t507/tlt507-evm/longan/buildroot/host/usr
/bin/aarch64-linux-gnu-gcc make
2.4 關鍵代碼
(1) 創建 Mosquitto 實例。
(2) 設置回調函數。
(3) 連接 MQTT 服務器。
(4) 發布消息。
(5) 訂閱主題
3 mqtt_sinewave_pub 案例
3.1 案例說明
案例功能:使用 libmosquitto(MQTT version 3.1.1 client library)的 API 與 MQTT 代理服
務器通信。評估板生成正弦波數據,每秒發送 512 個采樣點的數據至 MQTT 服務器;上
位機通過 Web 頁面從 MQTT 服務器接收到數據后,將會繪制波形。
程序流程圖如下圖所示。
3.2 案例測試
本案例使用公網 MQTT HiveMQ 服務器與上位機 Ubuntu Web 程序通信。請通過網線
將評估板千兆網口 ETH0 RGMII 和上位機連接至公網,確保可正常訪問互聯網。
評估板啟動,將案例 bin 目錄下 mqtt_sinewave_pub 可執行文件拷貝至評估板文件系
統的任意目錄下,執行如下命令查看程序參數說明。
Target#
./mqtt_sinewave_pub --help
執行如下命令運行程序,連接 MQTT 服務器,并發送正弦波數據至 MQTT 服 務器。
Target#
./mqtt_sinewave_pub -h broker.hive
mq.com -p 1883
評估板程序運行后,將案例"toolsweb_mqtt_sub"目錄下 index.html 文件,使用上位
機瀏覽器打開。在彈出的 Web 頁面(如下圖),依次輸入 MQTT 服務器:broker.hivemq.com,
端口號:8000,最后點擊連接,Web 頁面將會從 MQTT 服務器獲取正弦波數據并進行波
形繪制。
備注:ARM 端 MQTT 通信協議基于 TCP 協議,Web 端 MQTT 通信協議基于 WebSocket 協
議,因此使用的端口號不同。
3.3 案例編譯
將案例 src 文件夾拷貝至 Ubuntu 工作目錄下,請先確保已參考 Linux 系統使用手冊編
譯過 LinuxSDK,構建 T507 處理器對應的 GCC 編譯器。進入 src 目錄執行如下命令,使用
LinuxSDK 開發包目錄下的 GCC 編譯器進行案例編譯。編譯完成后,將在當前目錄下生成
可執行文件。
Host# CC=/home/tronlong/T507/LinuxSDK/out/t507/tlt507-evm/longan/buildroot/host/usr
/bin/aarch64-linux-gnu-gcc make
3.4 關鍵代碼
(1) 創建 Mosquitto 實例。
(2) 設置回調函數。
(3) 連接 MQTT 服務器。
(4) 發送數據。
審核編輯 黃宇
-
通信協議
+關注
關注
28文章
915瀏覽量
40438 -
MQTT
+關注
關注
5文章
653瀏覽量
22691
發布評論請先 登錄
相關推薦
評論