本教程聚焦于LuatOS在Air780EPM開發(fā)板上的應(yīng)用,演示如何通過腳本實現(xiàn)MQTT協(xié)議通信,助力物聯(lián)網(wǎng)設(shè)備快速聯(lián)網(wǎng)。
一、MQTT 協(xié)議詳解
1.1 什么是 MQTT?
MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協(xié)議)是一種基于發(fā)布/訂閱模式的輕量級通信協(xié)議。你可以把它想象成一個郵局系統(tǒng):
發(fā)布者(Publisher):就像寄信的人,把消息發(fā)送到特定的“郵箱”(主題)。
訂閱者(Subscriber):就像收信的人,他們事先告訴郵局(Broker)他們對哪些“郵箱”(主題)的信件感興趣。
Broker(代理):就像郵局,負責(zé)接收發(fā)布者的消息,并根據(jù)訂閱者的興趣將消息分發(fā)給他們。
MQTT 協(xié)議由 IBM 在 1999 年開發(fā),現(xiàn)在是 ISO 標(biāo)準(zhǔn)(ISO/IEC 20922),適用于物聯(lián)網(wǎng)(IoT)和機器對機器(M2M)通信。
1.2 MQTT 的核心工作機制
1. 發(fā)布/訂閱模式:
發(fā)布者(Publisher)將消息發(fā)送到特定的主題(Topic)。
訂閱者(Subscriber)向 Broker 訂閱感興趣的主題。
Broker 負責(zé)將發(fā)布到主題的消息路由給所有訂閱了該主題的客戶端。
這種模式實現(xiàn)了發(fā)布者和訂閱者的解耦,簡單來說就是它們不需要知道彼此的存在。
2. 服務(wù)質(zhì)量(QoS)等級:
QoS 0(最多一次):消息可能丟失,也可能因為網(wǎng)絡(luò)層或中間件的意外重放而出現(xiàn)重復(fù),但 MQTT 協(xié)議本身不會主動再發(fā)一次。適用于對可靠性要求不高的場景,如傳感器數(shù)據(jù)。
QoS 1(至少一次):發(fā)送端會一直重試,直到收到接收端的 PUBACK 確認(rèn),因此消息至少送達一次,但也可能因確認(rèn)丟失而被重復(fù)投遞。適用于需要確保消息送達但可以容忍重復(fù)的場景。
QoS 2(只有一次):通過四步握手(PUBLISH → PUBREC → PUBREL → PUBCOMP)保證消息恰好送達一次;若任一步丟失,發(fā)送端會重傳對應(yīng)報文,直至整個流程完成,從而避免重復(fù)或丟失。適用于對消息可靠性要求極高的場景,如金融交易。
3. 輕量級設(shè)計:
MQTT 協(xié)議頭最小只有 2 字節(jié),非常適合網(wǎng)絡(luò)帶寬和設(shè)備資源有限的環(huán)境。
協(xié)議簡單,易于實現(xiàn),降低了開發(fā)成本。
1.3 MQTT 的主要優(yōu)勢
低帶寬消耗:協(xié)議設(shè)計精簡,有效減少網(wǎng)絡(luò)流量。
低功耗:適用于電池供電的設(shè)備。
高可靠性:通過 QoS 機制保證消息傳遞的可靠性。
雙向通信:支持設(shè)備間和設(shè)備與服務(wù)器間的雙向通信。
多語言支持:支持多種編程語言,便于開發(fā)。
安全性強:支持用戶名/密碼和 SSL/TLS 加密,保障通信安全。
1.4 典型應(yīng)用場景
智能家居:智能燈泡、智能插座、溫控器等設(shè)備通過 MQTT 與家庭網(wǎng)關(guān)通信。
工業(yè)自動化:傳感器數(shù)據(jù)采集、設(shè)備狀態(tài)監(jiān)控。
環(huán)境監(jiān)測:氣象站、水質(zhì)監(jiān)測站等遠程數(shù)據(jù)收集。
車聯(lián)網(wǎng):車輛狀態(tài)信息上報、遠程控制指令下發(fā)。
醫(yī)療監(jiān)控:遠程病人監(jiān)護設(shè)備數(shù)據(jù)傳輸。
二、演示功能概述
1. 創(chuàng)建四路 mqtt 連接,詳情如下
注意:代碼中的 mqtt 服務(wù)器地址和端口會不定期重啟或維護,僅能用作測試用途,不可商用,說不定哪一天就關(guān)閉了。用戶開發(fā)項目時,需要替換為自己的商用服務(wù)器地址和端口。
創(chuàng)建一個 mqtt client,連接 mqtt server;
創(chuàng)建一個 mqtt ssl client,連接 mqtt ssl server,不做證書校驗;
創(chuàng)建一個 mqtt ssl client,連接 mqtt ssl server,client 僅單向校驗 server 的證書,server 不校驗 client 的證書和密鑰文件;
創(chuàng)建一個 mqtt ssl client,連接 mqtt ssl server,client 校驗 server 的證書,server 校驗 client 的證書和密鑰文件;
2. 每一路 mqtt 連接出現(xiàn)異常后,自動重連;
3. 每一路 mqtt 連接,client 按照以下幾種邏輯發(fā)送數(shù)據(jù)給 server
串口應(yīng)用功能模塊uart_app.lua,通過 uart1 接收到串口數(shù)據(jù),將串口數(shù)據(jù)增加send from uart:前綴后,使用mobile.imei().."/uart/up"主題,發(fā)送給 server;
定時器應(yīng)用功能模塊timer_app.lua,定時產(chǎn)生數(shù)據(jù),將數(shù)據(jù)增加send from timer:前綴后,使用mobile.imei().."/timer/up"主題,發(fā)送給 server;
4. 每一路 mqtt 連接,client 收到 server 數(shù)據(jù)后,將數(shù)據(jù)增加 recv from mqtt/mqtt ssl/mqtt ssl ca/mqtt ssl mutual ca(四選一)server: 前綴后,通過 uart1 發(fā)送出去;
5. 啟動一個網(wǎng)絡(luò)業(yè)務(wù)邏輯看門狗 task,用來監(jiān)控網(wǎng)絡(luò)環(huán)境,如果連續(xù)長時間工作不正常,重啟整個軟件系統(tǒng);
6. netdrv_device:配置連接外網(wǎng)使用的網(wǎng)卡,目前支持以下三種選擇(三選一)
(1) netdrv_4g:4G 網(wǎng)卡
(2) netdrv_eth_spi:通過 SPI 外掛 CH390H 芯片的以太網(wǎng)卡
(3) netdrv_multiple:支持以上兩種網(wǎng)卡,可以配置兩種網(wǎng)卡的優(yōu)先級
三、演示硬件環(huán)境

1、Air780EPM V1.3 版本開發(fā)板一塊 + 可上網(wǎng)的 sim 卡一張 +4g 天線一根 + 網(wǎng)線一根:
sim 卡插入開發(fā)板的 sim 卡槽
天線裝到開發(fā)板上
網(wǎng)線一端插入開發(fā)板網(wǎng)口,另外一端連接可以上外網(wǎng)的路由器網(wǎng)口
2、TYPE-C USB 數(shù)據(jù)線一根 + USB 轉(zhuǎn)串口數(shù)據(jù)線一根,Air780EPM V1.3 版本開發(fā)板和數(shù)據(jù)線的硬件接線方式為:
Air780EPM V1.3 版本開發(fā)板通過 TYPE-C USB 口供電;(外部供電/USB 供電 撥動開關(guān) 撥到 USB 供電一端)
TYPE-C USB 數(shù)據(jù)線直接插到核心板的 TYPE-C USB 座子,另外一端連接電腦 USB 口;
USB 轉(zhuǎn)串口數(shù)據(jù)線,一般來說,白線連接開發(fā)板的 UART1_TX,綠線連接開發(fā)板的 UART1_RX,黑線連接核心板的 GND,另外一端連接電腦 USB 口;
四、演示軟件環(huán)境
4.1 軟件環(huán)境
1. 燒錄工具:Luatools 下載調(diào)試工具
2. 內(nèi)核固件:Air780EPM V2012 版本固件(理論上,2025 年 8 月 10 日之后發(fā)布的固件都可以)
3. 腳本文件:Air780EPM MQTT 腳本文件
3. PC 端串口工具:例如SSCOM、LLCOM等都可以
4. MQTT 客戶端:MQTT 客戶端軟件 MQTTX
5. LuatOS 運行所需要的 lib 文件:使用 Luatools 燒錄時,勾選 添加默認(rèn) lib 選項,使用默認(rèn) lib 腳本文件。
準(zhǔn)備好軟件環(huán)境之后,接下來查看如何燒錄項目文件到 Air780EPM 開發(fā)板中,將本篇文章中演示使用的項目文件燒錄到 Air780EPM 開發(fā)板中。
4.2 API 介紹
sys 庫:https://docs.openluat.com/osapi/core/sys/
libnet 庫:https://docs.openluat.com/osapi/ext/libnet/
socket 庫:https://docs.openluat.com/osapi/core/socket/
mqtt 庫:https://docs.openluat.com/osapi/core/mqtt/
五、程序結(jié)構(gòu)

5.1 文件說明
main.lua:主程序入口文件,負責(zé)初始化系統(tǒng)、啟動網(wǎng)絡(luò)驅(qū)動和 MQTT 客戶端。
mqtt/:普通 MQTT 連接相關(guān)文件。
mqtt_main.lua:普通 MQTT 客戶端的初始化和事件處理。
mqtt_receiver.lua:普通 MQTT 客戶端的數(shù)據(jù)接收處理。
mqtt_sender.lua:普通 MQTT 客戶端的數(shù)據(jù)發(fā)送隊列管理。
mqtts/:MQTT SSL 連接(無證書校驗)相關(guān)文件。
mqtts_main.lua:MQTT SSL 客戶端的初始化和事件處理。
mqtts_receiver.lua:MQTT SSL 客戶端的數(shù)據(jù)接收處理。
mqtts_sender.lua:MQTT SSL 客戶端的數(shù)據(jù)發(fā)送隊列管理。
mqtts_ca/:MQTT SSL 連接(單向證書校驗)相關(guān)文件。
mqtts_ca_main.lua:MQTT SSL 單向證書校驗客戶端的初始化和事件處理。
mqtts_ca_receiver.lua:MQTT SSL 單向證書校驗客戶端的數(shù)據(jù)接收處理。
mqtts_ca_sender.lua:MQTT SSL 單向證書校驗客戶端的數(shù)據(jù)發(fā)送隊列管理。
openluat_root_ca.crt:服務(wù)器 CA 證書文件。
sntp_app.lua:時間同步應(yīng)用。
mqtts_mutual_ca/:MQTT SSL 連接(雙向證書校驗)相關(guān)文件。
mqtts_m_ca_main.lua:MQTT SSL 雙向證書校驗客戶端的初始化和事件處理。
mqtts_m_ca_receiver.lua:MQTT SSL 雙向證書校驗客戶端的數(shù)據(jù)接收處理。
mqtts_m_ca_sender.lua:MQTT SSL 雙向證書校驗客戶端的數(shù)據(jù)發(fā)送隊列管理。
airtest_client.crt:客戶端證書文件。
airtest_client.key:客戶端私鑰文件。
openluat_root_ca.crt:服務(wù)器 CA 證書文件。
sntp_app.lua:時間同步應(yīng)用。
netdrv/:網(wǎng)絡(luò)驅(qū)動相關(guān)文件。
netdrv_4g.lua:4G 網(wǎng)絡(luò)驅(qū)動。
netdrv_eth_spi.lua:SPI 以太網(wǎng)驅(qū)動。
netdrv_multiple.lua:多網(wǎng)絡(luò)驅(qū)動管理。
netdrv_device.lua:網(wǎng)絡(luò)設(shè)備配置文件。
network_watchdog.lua:網(wǎng)絡(luò)環(huán)境檢測看門狗。
timer_app.lua:定時器應(yīng)用,用于生成測試數(shù)據(jù)。
uart_app.lua:串口應(yīng)用,用于與 PC 端通信。
六、核心模塊詳解
6.1 主程序 (main.lua)
主程序文件main.lua是整個項目的入口點。它負責(zé)初始化系統(tǒng)環(huán)境。
6.1.1 初始化流程
1. 項目和版本定義:
定義PROJECT和VERSION變量。
2. 日志記錄:
使用log.info("main", PROJECT, VERSION)在日志中打印項目名和版本號。
3. 看門狗初始化(如果支持):
配置并啟動硬件看門狗,防止程序死循環(huán)卡死。
4. 加載功能模塊:
加載網(wǎng)絡(luò)環(huán)境檢測看門狗模塊(network_watchdog)。
加載網(wǎng)絡(luò)驅(qū)動設(shè)備模塊(netdrv_device)。
加載串口應(yīng)用模塊(uart_app)。
加載定時器應(yīng)用模塊(timer_app)。
加載MQTT客戶端主模塊(mqtt_main)。
加載MQTT SSL客戶端主模塊(mqtts_main、mqtts_ca_main、mqtts_m_ca_main)。
5. 啟動任務(wù)調(diào)度器:
調(diào)用sys.run()啟動LuatOS的任務(wù)調(diào)度器,開始執(zhí)行各個任務(wù)。

6.2 網(wǎng)絡(luò)驅(qū)動 (netdrv/)
網(wǎng)絡(luò)驅(qū)動模塊負責(zé)初始化和管理不同的網(wǎng)絡(luò)連接方式,如 4G 和以太網(wǎng)。
6.2.1 4G 網(wǎng)絡(luò)驅(qū)動 (netdrv_4g.lua)
監(jiān)聽IP_READY和IP_LOSE消息,監(jiān)控網(wǎng)絡(luò)連接狀態(tài)。
設(shè)置默認(rèn)網(wǎng)卡為socket.LWIP_GP。

6.2.2 以太網(wǎng)網(wǎng)絡(luò)驅(qū)動(netdrv_eth_spi.lua)
通過 SPI 接口外掛 CH390H 芯片實現(xiàn)以太網(wǎng)。
通過控制 GPIO20 引腳使能芯片供電。
配置 SPI1 接口參數(shù),用于與 CH390H 芯片通信。
通過netdrv.setup函數(shù)配置以太網(wǎng)卡,并開啟 DHCP 動態(tài)獲取 IP 地址。
設(shè)置默認(rèn)網(wǎng)卡為socket.LWIP_ETH。

6.2.3 多網(wǎng)絡(luò)驅(qū)動管理 (netdrv_multiple.lua)
管理多個網(wǎng)絡(luò)驅(qū)動實例,根據(jù)配置選擇合適的網(wǎng)絡(luò)連接方式。
通過exnetif.set_priority_order函數(shù)配置多網(wǎng)卡的控制參數(shù)以及優(yōu)先級。
通過exnetif.notify_status函數(shù)設(shè)置網(wǎng)卡狀態(tài)變化通知回調(diào)函數(shù)。

6.3 MQTT 客戶端 (mqtt/,mqtts/,mqtts_ca/,mqtts_mutual_ca/)
每個 MQTT 客戶端目錄都包含三個核心文件:_main.lua、_receiver.lua和_sender.lua,分別負責(zé)客戶端的初始化、數(shù)據(jù)接收和數(shù)據(jù)發(fā)送。
6.3.1 客戶端初始化 (_main.lua)
注意:代碼中的 mqtt 服務(wù)器地址和端口會不定期重啟或維護,僅能用作測試用途,不可商用,說不定哪一天就關(guān)閉了。用戶開發(fā)項目時,需要替換為自己的商用服務(wù)器地址和端口。
創(chuàng)建 MQTT 客戶端對象,配置服務(wù)器地址、端口、客戶端 ID、用戶名、密碼等參數(shù)。
設(shè)置事件回調(diào)函數(shù),處理連接、訂閱、接收和異常等事件。
啟動客戶端任務(wù),開始連接 MQTT 服務(wù)器。
6.3.2 數(shù)據(jù)接收 (_receiver.lua)
實現(xiàn)proc函數(shù),處理接收到的數(shù)據(jù)。
打印接收到的數(shù)據(jù)內(nèi)容。
通過sys.publish("FEED_NETWORK_WATCHDOG")觸發(fā)網(wǎng)絡(luò)看門狗喂狗。
6.3.3 數(shù)據(jù)發(fā)送 (_sender.lua)
實現(xiàn)send函數(shù),將數(shù)據(jù)添加到發(fā)送隊列。
管理發(fā)送隊列,按順序發(fā)送數(shù)據(jù)。
支持 QoS 配置和發(fā)送結(jié)果回調(diào)。
6.4 應(yīng)用功能 (timer_app.lua,uart_app.lua)
應(yīng)用功能模塊負責(zé)生成測試數(shù)據(jù)和處理串口通信。
6.4.1 定時器應(yīng)用 (timer_app.lua)
創(chuàng)建一個 5 秒循環(huán)的定時器。
定時生成遞增的測試數(shù)據(jù)。
通過sys.publish("SEND_DATA_REQ", data)發(fā)布發(fā)送請求消息。
實現(xiàn)發(fā)送結(jié)果回調(diào),根據(jù)發(fā)送結(jié)果決定是否重發(fā)數(shù)據(jù)。

6.4.2 串口應(yīng)用 (uart_app.lua)
配置 UART1,波特率為 115200。
接收來自 PC 的數(shù)據(jù),并通過 MQTT 發(fā)送。
將 MQTT 接收到的數(shù)據(jù)通過串口輸出到 PC。
實現(xiàn)數(shù)據(jù)緩沖和超時處理。

6.5 網(wǎng)絡(luò)環(huán)境檢測看門狗 (network_watchdog.lua)
網(wǎng)絡(luò)看門狗模塊負責(zé)監(jiān)控網(wǎng)絡(luò)連接狀態(tài)和數(shù)據(jù)收發(fā)情況,確保系統(tǒng)在網(wǎng)絡(luò)異常時能夠自動恢復(fù)。
6.5.1 設(shè)計原則
看門狗超時時間應(yīng)大于任意一個 MQTT 連接的發(fā)送間隔。
通過接收FEED_NETWORK_WATCHDOG消息來喂狗。
超時未收到喂狗消息時,系統(tǒng)自動重啟。
6.5.2 實現(xiàn)細節(jié)
創(chuàng)建network_watchdog_task_func任務(wù)函數(shù)。
任務(wù)函數(shù)循環(huán)等待FEED_NETWORK_WATCHDOG消息,超時時間為 5 分鐘。
超時則調(diào)用sys.restart("network timeout")重啟系統(tǒng)。

6.6 SSL 連接實現(xiàn)
項目展示了三種不同的 SSL 連接實現(xiàn)方式,滿足不同安全等級的需求。
6.6.1 無證書校驗 (mqtts/)
在創(chuàng)建 MQTT 客戶端時,設(shè)置ssl參數(shù)為true。
不進行服務(wù)器證書校驗,適用于對安全性要求不高的場景。
6.6.2 單向證書校驗 (mqtts_ca/)
加載服務(wù)器 CA 證書文件openluat_root_ca.crt。
在創(chuàng)建 MQTT 客戶端時,配置ssl參數(shù),指定 CA 證書路徑。
依賴sntp_app.lua同步系統(tǒng)時間,以驗證證書有效期。
6.6.3 雙向證書校驗 (mqtts_mutual_ca/)
同時加載服務(wù)器 CA 證書、客戶端證書和客戶端私鑰。
在創(chuàng)建 MQTT 客戶端時,配置ssl參數(shù),指定所有證書和密鑰的路徑。
使用特定端口(8886)進行連接。
七、系統(tǒng)與用戶消息類型
7.1 系統(tǒng)消息
IP_READY:網(wǎng)絡(luò) IP 地址已準(zhǔn)備好。
IP_LOSE:網(wǎng)絡(luò) IP 地址丟失。
NTP_UPDATE:SNTP 時間同步完成。
7.2 用戶消息
RECV_DATA_FROM_SERVER:從 MQTT 服務(wù)器接收到數(shù)據(jù)。
SEND_DATA_REQ:請求發(fā)送數(shù)據(jù)。
FEED_NETWORK_WATCHDOG:網(wǎng)絡(luò)看門狗喂狗消息。
八、演示功能
8.1 準(zhǔn)備工作
8.1.1 MQTT 客戶端建立
MQTT 客戶端測試工具:MQTT 客戶端軟件 MQTTX
(1)創(chuàng)建一個 MQTT 客戶端
這里我使用測試服務(wù)器(lbsmqtt.airm2m.com:1884)進行建立,大家一定不要將測試服務(wù)器用于正式批量的項目中。

(2)設(shè)置發(fā)布/訂閱主題
在設(shè)置發(fā)布/訂閱主題時,主題格式一定要根據(jù)要求來寫,否則會出現(xiàn)數(shù)據(jù)無法通信的情況。

8.1.2 MQTT SSL 客戶端建立(無證書校驗、單向認(rèn)證)
MQTT 客戶端測試工具:MQTT 客戶端軟件 MQTTX
(1)創(chuàng)建一個 MQTT 客戶端
這里我使用測試服務(wù)器(airtest.openluat.com:8888)進行建立,大家一定不要將測試服務(wù)器用于正式批量的項目中。 無證書校驗、單向認(rèn)證使用的是同一個域名端口,在 MQTTX 工具上創(chuàng)建客戶端只是用于與 Air780EPM 建立的 MQTT 客戶端進行數(shù)據(jù)通信,因此這時候可以在 MQTTX 工具上只建立一個 MQTT SSL 客戶端。

(2)設(shè)置發(fā)布/訂閱主題
在設(shè)置發(fā)布/訂閱主題時,主題格式一定要根據(jù)要求來寫,否則會出現(xiàn)數(shù)據(jù)無法通信的情況。

8.1.3 MQTT SSL 客戶端建立(雙向認(rèn)證)
MQTT 客戶端測試工具:MQTT 客戶端軟件 MQTTX
(1)創(chuàng)建一個 MQTT 客戶端
這里我使用測試服務(wù)器(airtest.openluat.com:8886)進行建立,大家一定不要將測試服務(wù)器用于正式批量的項目中。

(2)設(shè)置發(fā)布/訂閱主題
在設(shè)置發(fā)布/訂閱主題時,主題格式一定要根據(jù)要求來寫,否則會出現(xiàn)數(shù)據(jù)無法通信的情況。

8.2 不同網(wǎng)卡切換
Air780EPM 模組支持單 4g 網(wǎng)卡,單 spi 以太網(wǎng)卡,多網(wǎng)卡。
切換網(wǎng)卡為 4G 網(wǎng)卡:
在netdrv_device.lua模塊里只打開netdrv_4g模塊。netdrv_4g.lua模塊中的代碼不需要修改。

LuaTools 工具日志打印:
如下圖所示,如出現(xiàn)類似I/user.netdrv_4g.ip_ready_func IP_READY 10.63.142.199 255.255.255.255 0.0.0.0 nil的日志,則表示 4g 網(wǎng)卡連接成功。

切換網(wǎng)卡為以太網(wǎng)卡:
注意:Air780EPM 的以太網(wǎng)卡是通過 SPI 外掛 CH390H 芯片實現(xiàn)的。
在netdrv_device.lua模塊里只打開netdrv_eth_spi模塊。如果是使用官方的開發(fā)板,netdrv_eth_spi模塊中的代碼不需要修改。

luatools 日志打印:
如出現(xiàn)類似I/user.netdrv_eth_spi.ip_ready_func IP_READY 192.168.0.168 255.255.255.0 192.168.0.1 nil的日志,則表示以太網(wǎng)卡聯(lián)網(wǎng)成功。

多網(wǎng)卡自動切換:
可根據(jù)自己的需求調(diào)整網(wǎng)卡的優(yōu)先級,以下示例設(shè)置為以太網(wǎng)卡是最高優(yōu)先級。
首先在netdrv_device.lua文件中只打開netdrv_multiple模塊。

默認(rèn)以太網(wǎng)卡進行連接

拔掉網(wǎng)線后,網(wǎng)絡(luò)切換為 4g 網(wǎng)卡

8.3 MQTT 通信實操
MQTT 客戶端數(shù)據(jù)發(fā)送與接收:
下圖為 Air780EPM 模組建立的 MQTT 客戶端通過指定主題向其他同域名端口的 MQTT 客戶端發(fā)送數(shù)據(jù)成功后的日志打印。

如下圖在 MQTTX 測試工具上建立相同域名端口的 MQTT 客戶端(Client ID 需要不一致),通過訂閱指定主題,可以接收到其他同域名端口的 MQTT 客戶端通過該指定主題發(fā)送的數(shù)據(jù)。

如下圖所示,通過 MQTTX 測試工具上建立的 MQTT 客戶端向指定主題發(fā)送一個數(shù)據(jù)。

模組端在建立同域名端口的 MQTT 客戶端后,在代碼中還訂閱了指定主題,因此 MQTTX 測試工具上建立的同域名端口的 MQTT 客戶端通過指定主題發(fā)送數(shù)據(jù)時,模組端建立的同域名端口的 MQTT 客戶端可以接收到這個數(shù)據(jù),并在代碼中做了處理,從而讓其顯示在 LuaTools 工具上。

在 PC 端使用串口工具發(fā)送數(shù)據(jù)給 Air780EPM,Air780EPM 內(nèi)部會將接收到的數(shù)據(jù)通過建立的同域名端口的 MQTT 客戶端按照指定主題轉(zhuǎn)發(fā)出去,MQTTX 測試工具建立的同域名端口的 MQTT 客戶端通過訂閱這個指定主題可以接收到 Air780EPM 轉(zhuǎn)發(fā)出去的數(shù)據(jù)。

在 MQTTX 測試工具建立的同域名端口的 MQTT 客戶端,通過指定主題發(fā)送數(shù)據(jù)后,Air780EPM 模組建立的同域名端口的 MQTT 客戶端通過訂閱該指定主題后可以接收到數(shù)據(jù),并將數(shù)據(jù)通過 UART 轉(zhuǎn)發(fā)給 PC 端串口工具。

MQTT SSL 客戶端(無證書校驗)數(shù)據(jù)發(fā)送與接收:
下圖為 Air780EPM 模組建立的 MQTT SSL 客戶端(無證書校驗)通過指定主題向其他同域名端口的 MQTT SSL 客戶端發(fā)送數(shù)據(jù)成功后的日志打印。

如下圖在 MQTTX 測試工具上建立相域名端口的 MQTT SSL 客戶端(Client ID 需要不一致),通過訂閱指定主題,可以接收到其他同域名端口的 MQTT SSL 客戶通過該指定主題發(fā)送的數(shù)據(jù)。

如下圖所示,通過 MQTTX 測試工具建立的同域名端口的 MQTT SSL 客戶端向指定主題發(fā)送一個數(shù)據(jù)。

模組端在建立同域名端口 MQTT SSL 客戶端(無證書校驗)后,在代碼中訂閱了這個指定主題,因此當(dāng) MQTTX 測試工具建立的同域名端口的 MQTT SSL 客戶端通過指定主題發(fā)送數(shù)據(jù)時,模組端建立的同域名端口的 MQTT SSL 客戶端(無證書校驗)可以接收到這個數(shù)據(jù),并在代碼中做了處理,從而讓其顯示在 LuaTools 工具上。

在 PC 端使用串口工具發(fā)送數(shù)據(jù)給 Air780EPM,Air780EPM 內(nèi)部會將接收到的數(shù)據(jù)通過建立的同域名端口 MQTT SSL 客戶端(無證書校驗)按照指定主題轉(zhuǎn)發(fā)出去,MQTTX 測試工具建立的同域名端口的 MQTT SSL 客戶端通過訂閱這個指定主題可以接收到 Air780EPM 轉(zhuǎn)發(fā)出去的數(shù)據(jù)。

在 MQTTX 測試工具建立的同域名端口的 MQTT SSL 客戶端(無證書校驗)通過指定主題發(fā)送數(shù)據(jù)后,Air780EPM 模組建立的同域名端口的 MQTT SSL 客戶端(無證書校驗)通過訂閱該指定主題后可以接收到數(shù)據(jù),并將數(shù)據(jù)通過 UART 轉(zhuǎn)發(fā)給 PC 端串口工具。

MQTT SSL 客戶端(單向認(rèn)證)數(shù)據(jù)發(fā)送與接收
下圖為 Air780EPM 模組建立的 MQTT SSL 客戶端(單向認(rèn)證)通過指定主題向其他同域名端口的 MQTT 客戶端發(fā)送數(shù)據(jù)成功后的日志打印。

如下圖在 MQTTX 測試工具上建立同域名端口的 MQTT SSL 客戶端(Client ID 需要不一致),通過訂閱指定主題,可以接收到其他同域名端口的 MQTT SSL 客戶通過該主題發(fā)送的數(shù)據(jù)。

如下圖所示,通過 MQTTX 測試工具建立的同域名端口的 MQTT SSL 客戶端(單向認(rèn)證)向指定主題發(fā)送一個數(shù)據(jù)。

模組端在建立同域名端口 MQTT SSL 客戶端(單向認(rèn)證)后,在代碼中還訂閱了指定主題,因此當(dāng) MQTTX 測試工具建立的同域名端口的 MQTT SSL 客戶端通過指定主題發(fā)送數(shù)據(jù)時,模組端建立的同域名端口的 MQTT SSL 客戶端(單向認(rèn)證)可以接收到這個數(shù)據(jù),并在代碼中做了處理,從而讓其顯示在 LuaTools 工具上。

在 PC 端使用串口工具發(fā)送數(shù)據(jù)給 Air780EPM,Air780EPM 內(nèi)部會將接收到的數(shù)據(jù)通過建立的同域名端口的 MQTT SSL 客戶端(單向認(rèn)證)按照指定主題轉(zhuǎn)發(fā)出去,MQTTX 測試工具建立的同域名端口的 MQTT SSL 客戶端通過訂閱這個指定主題可以接收到 Air780EPM 轉(zhuǎn)發(fā)出去的數(shù)據(jù)。

在 MQTTX 測試工具建立的同域名端口的 MQTT SSL 客戶端(單向認(rèn)證)通過指定主題發(fā)送數(shù)據(jù)后,Air780EPM 模組建立的同域名端口的 MQTT SSL 客戶端(單向認(rèn)證)通過訂閱該指定主題后可以接收到數(shù)據(jù),并將數(shù)據(jù)通過 UART 轉(zhuǎn)發(fā)給 PC 端串口工具。

MQTT SSL 客戶端(雙向認(rèn)證)數(shù)據(jù)發(fā)送與接收
下圖為 Air780EPM 模組建立的 MQTT SSL 客戶端(雙向認(rèn)證)通過指定主題向其他同域名端口的 MQTT SSL 客戶端發(fā)送數(shù)據(jù)成功后的日志打印。

如下圖在 MQTTX 測試工具上建立同域名端口的 MQTT 客戶端(Client ID 需要不一致),通過訂閱指定主題,可以接收到其他同域名端口的 MQTT 客戶端通過該主題發(fā)送的數(shù)據(jù)。

如下圖所示,通過 MQTTX 測試工具建立的同域名端口的 MQTT SSL 客戶端向指定主題發(fā)送一個數(shù)據(jù)。

模組端在建立同域名端口 MQTT SSL 客戶端(雙向認(rèn)證)后,在代碼中還訂閱了指定主題,因此當(dāng) MQTTX 測試工具建立的同域名端口的 MQTT SSL 客戶端通過指定主題發(fā)送數(shù)據(jù)時,模組端建立的同域名端口的 MQTT SSL 客戶端(雙向認(rèn)證)可以接收到這個數(shù)據(jù),并在代碼中做了處理,從而讓其顯示在 LuaTools 工具上。

在 PC 端使用串口工具發(fā)送數(shù)據(jù)給 Air780EPM,Air780EPM 內(nèi)部會將接收到的數(shù)據(jù)通過建立的 MQTT SSL 客戶端(雙向認(rèn)證)按照指定主題轉(zhuǎn)發(fā)出去,MQTTX 測試工具建立的同域名端口的 MQTT SSL 客戶端通過訂閱這個指定主題可以接收到 Air780EPM 轉(zhuǎn)發(fā)出去的數(shù)據(jù)。

在 MQTTX 測試工具建立的同域名端口的 MQTT SSL 客戶端(雙向認(rèn)證)通過指定主題發(fā)送數(shù)據(jù)后,Air780EPM 模組建立的同域名端口的 MQTT SSL 客戶端(雙向認(rèn)證)通過訂閱該指定主題后可以接收到數(shù)據(jù),并將數(shù)據(jù)通過 UART 轉(zhuǎn)發(fā)給 PC 端串口工具。

九、總結(jié)
至此,我們演示了使用不同網(wǎng)卡進行 MQTT 通信的全過程,相信聰明的你已經(jīng)完全領(lǐng)悟 MQTT 通信的邏輯了,快來實際操作一下吧!
審核編輯 黃宇
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2948文章
48009瀏覽量
417388 -
MQTT
+關(guān)注
關(guān)注
5文章
735瀏覽量
25225 -
LuatOS
+關(guān)注
關(guān)注
0文章
165瀏覽量
2733
發(fā)布評論請先 登錄
LuatOS選型指南:基于Air780EPM的32/64位性能實測分析
一文搞懂Air780EPM的NTP通信:LuatOS腳本開發(fā)教程
Air780EPM嵌入式開發(fā):LuatOS下的MQTT通信實踐
實戰(zhàn)Air780EPM:構(gòu)建4G共享網(wǎng)關(guān),服務(wù)WiFi與有線設(shè)備!
Air780EPM開發(fā)板NTP對時教程:LuatOS腳本開發(fā)入門指南
Air780EPM開發(fā)板FTP功能實戰(zhàn):LuatOS嵌入式開發(fā)全解析
LuatOS Air780EPM 開發(fā)板 HTTP 教程:原理講解與項目實操!
SPI開發(fā)實戰(zhàn):硬件電路設(shè)計與CH390H應(yīng)用全攻略
Air8101多網(wǎng)融合戰(zhàn)略升級:Air780EPM模塊助力4G聯(lián)網(wǎng)落地
優(yōu)化你的設(shè)計:Air780EPM場景化ADC硬件電路指南!
Air780EPM — ADC硬件電路設(shè)計:場景化優(yōu)化與實踐!
Air780EPM應(yīng)用開發(fā):解鎖GPIO與LED的N種交互模式
解鎖Air780EPM:N種GPIO操控LED的實戰(zhàn)技巧!
如何解決Air780EPM開發(fā)中的調(diào)試難題?深度解析高效調(diào)試方法
深度解析Air780EPM模組:LuatOS下CAN總線通信的完整方案!
LuatOS嵌入式開發(fā)實戰(zhàn):Air780EPM與MQTT通信
評論