MQTT通信協議簡介
概述
MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是一種基于發布/訂閱(Publish/Subscribe)模式的“輕量級”通訊協議,該協議構建于TCP/IP協議上,由IBM在1999年發布。MQTT最大優點在于,可以極少的代碼和有限的帶寬,為連接遠程設備提供實時可靠的消息服務。
MQTT是輕量、簡單、開放和易于實現的,同時作為一種低開銷、低帶寬占用的即時通訊協議,使其在物聯網、小型設備、移動應用等方面有較廣泛的應用。
圖 1
MQTT具有如下特點:
1.輕量可靠:MQTT的報文格式精簡、緊湊,可在嚴重受限的硬件設備和低帶寬、高延遲的網絡上實現穩定傳輸。
2.發布/訂閱模式(Publish/Subscribe):發布/訂閱模式的優點在于發布者與訂閱者的解耦,實現異步協議。即訂閱者與發布者無需建立直接連接,亦無需同時在線。
3.為物聯網而生:提供心跳機制、遺囑消息、QoS質量等級 + 離線消息、主題和安全管理等全面的物聯網應用特性。
4.生態更完善:覆蓋范圍廣,已成為眾多云廠商物聯網平臺的標準通信協議。
應用場景
MQTT作為一種低開銷,低帶寬占用的即時通訊協議,可以極少的代碼和帶寬為聯網設備提供實時可靠的消息服務,適用于硬件資源有限的設備及帶寬有限的網絡環境。常見的應用場景如下:
1.物聯網M2M通信,物聯網大數據采集。
2.移動即時消息及消息推送。
4.車聯網通信,電動車站樁采集。
5.智慧城市、遠程醫療、遠程教育。
6.電力能源、石油能源。
Mosquitto工具安裝
Mosquitto是一款開源的MQTT消息代理(服務器)軟件,提供輕量級的、支持可發布/可訂閱的的消息推送模式。我司提供的評估板文件系統已支持Mosquitto工具,本文mqtt_client案例采用Mosquitto工具演示MQTT通信協議的通信功能。由于上位機Ubuntu系統作為通信對象,因此需在Ubuntu終端執行如下命令安裝Mosquitto工具,出現提示時輸入"Y"并按下回車即可。
Host# sudo apt-get install mosquitto-clients
圖 2
mqtt_client案例
案例說明
案例功能:使用libmosquitto(MQTT version 5.0/3.1.1)的API與MQTT代理服務器通信。基于MQTT通信協議,實現發布和訂閱消息功能。
程序流程圖如下圖所示。
圖 3
案例測試
本案例使用公網MQTTHiveMQ服務器與上位機Ubuntu Mosquitto工具通信。請通過網線將評估板千兆網口ETH0RGMII和上位機連接至公網,確保可正常訪問互聯網。
下表提供了可用的在線公共MQTT服務器,可根據需要自行切換。
表 1
評估板啟動,將案例bin目錄下mqtt_client可執行文件拷貝至評估板文件系統的任意目錄下,執行如下命令查看程序參數說明。
Target# ./mqtt_client --help
圖 4
評估板發布/上位機訂閱
在上位機執行如下命令,使用mosquitto_sub工具訂閱MQTT主題。
Host# mosquitto_sub -h broker.hivemq.com -p 1883 -t test/data
參數解析:
-h:指定MQTT服務器;
-p:指定MQTT服務器TCP端口;
-t:定義MQTT主題,可自定義命名。
圖 5
在評估板文件系統執行如下命令發布消息至MQTT服務器。
Target# ./mqtt_client -h broker.hivemq.com -p 1883 -M publish -t test/data -m 'www.tronlong.com'
參數解析:
-h:MQTT服務器
-p:MQTT服務器端口
-M:模式,publish為發布,subscribe為訂閱
-t:MQTT主題,可隨便命名
-m:發布的MQTT消息
圖 6?評估板發布
消息發布成功后,上位機將從MQTT服務器接收到對應的消息。
圖 7?上位機訂閱
評估板訂閱/上位機發布
在評估板文件系統執行如下命令訂閱MQTT主題。
Target# ./mqtt_client -h broker.hivemq.com -p 1883 -M subscribe -t test/data
圖 8
在上位機執行如下命令發布消息至MQTT服務器。
Host# mosquitto_pub -h broker.hivemq.com -p 1883 -t test/data -m www.tronlong.com
圖 9?上位機發布
消息發布成功后,評估板將從MQTT服務器接收到對應消息。
圖 10?評估板訂閱
案例編譯
將案例src文件夾拷貝至Ubuntu工作目錄下,請先確保已參考《Debian系統使用手冊》編譯過LinuxSDK。在案例src目錄執行如下命令,配置交叉編譯工具鏈環境變量,并修改Makefile文件。
Host# export PATH=/home/tronlong/RK3588/rk3588_linux_release_v1.2.1/extra-tools/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin:$PATH
Host# vimMakefile
圖 11
修改的內容如下:
SDK_PATH = /home/tronlong/RK3588/rk3588_linux_release_v1.2.1 //設置LinuxSDK源碼路徑
圖 12
執行如下命令,進行案例編譯。編譯完成后在當前目錄下生成可執行文件。
Host# make CC=aarch64-linux-gnu-gcc
圖 13
關鍵代碼
1.創建Mosquitto實例。
圖 14
2.設置回調函數。
圖 15
3.連接MQTT服務器。
圖 16
4.發布消息。
圖 17
5.訂閱主題。
圖 18
mqtt_sinewave_pub案例
案例說明
案例功能:使用libmosquitto(MQTT version 5.0/3.1.1)的API與MQTT代理服務器通信。評估板生成正弦波數據,每秒發送512個采樣點的數據至MQTT服務器;上位機通過Web頁面從MQTT服務器接收到數據后,將會繪制波形。
程序流程圖如下圖所示。
圖 19
案例測試
本案例使用公網MQTT HiveMQ服務器與上位機UbuntuWeb程序通信。請通過網線將評估板千兆網口ETH0RGMII和上位機連接至公網,確保可正常訪問互聯網。
評估板啟動,將案例bin目錄下mqtt_sinewave_pub可執行文件拷貝至評估板文件系統的任意目錄下,執行如下命令查看程序參數說明。
Target# ./mqtt_sinewave_pub --help
圖 20
執行如下命令運行程序,連接MQTT服務器,并發送正弦波數據至MQTT服務器。
Target# ./mqtt_sinewave_pub -h broker.hivemq.com -p 1883
圖 21
評估板程序運行后,在上位機使用瀏覽器打開"toolsweb_mqtt_sub"目錄下的index.html文件。在彈出的Web頁面(如下圖),依次輸入MQTT服務器:broker.hivemq.com,端口號:8000,最后點擊連接,Web頁面將會從MQTT服務器獲取正弦波數據并進行波形繪制。
備注:ARM端MQTT通信協議基于TCP協議,Web端MQTT通信協議基于WebSocket協議,因此使用的端口號不同。
圖 22
圖 23
案例編譯
將案例src文件夾拷貝至Ubuntu工作目錄下,請先確保已參考《Debian系統使用手冊》編譯過LinuxSDK。在案例src目錄執行如下命令,配置交叉編譯工具鏈環境變量,并修改Makefile文件。
Host# export PATH=/home/tronlong/RK3588/rk3588_linux_release_v1.2.1/extra-tools/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin:$PATH
Host# vimMakefile
圖 24
修改的內容如下:
SDK_PATH = /home/tronlong/RK3588/rk3588_linux_release_v1.2.1 //設置LinuxSDK源碼路徑
圖 25
執行如下命令,進行案例編譯。編譯完成后在當前目錄下生成可執行文件。
Host# make CC=aarch64-linux-gnu-gcc
圖 26
關鍵代碼
1.創建Mosquitto實例。
圖 27
2.設置回調函數。
圖 28
3.連接MQTT服務器。
圖 29
4.發送數據。
圖 30
審核編輯 黃宇
-
開發板
+關注
關注
26文章
6291瀏覽量
118093 -
瑞芯微
+關注
關注
27文章
794瀏覽量
54310 -
mqtt通訊協議
+關注
關注
0文章
15瀏覽量
3023 -
RK3588
+關注
關注
8文章
556瀏覽量
7325
發布評論請先 登錄
探索巔峰性能 |迅為瑞芯微RK3588開發板/核心板深度剖析
迅為瑞芯微RK3588開發板深度剖析丨首選的性能
迅為iTOP-RK3588S開發板/核心板瑞芯微RK3588S處理器6TOPS算力內置NPU
重磅!基于瑞芯微RK3588旗艦芯片打造的MinipcRK3588面世
創龍 瑞芯微 RK3588 國產2.4GHz八核 工業開發板—視頻圖像處理框架
創龍 瑞芯微 RK3588 國產2.4GHz八核 工業開發板—MQTT通信協議案例
評論