<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 超全教程Air201:MQTT實(shí)用示例

超全教程Air201:MQTT實(shí)用示例

發(fā)布人:13673998452 時(shí)間:2025-01-10 來(lái)源:工程師 發(fā)布文章

今天我們學(xué)習的是關(guān)于A(yíng)ir201的MQTT實(shí)用示例的終極指南。

 

本教程教你通過(guò)使用腳本代碼,對Air201模組進(jìn)行MQTT鏈接操作。

 

操作例程包括:

MQTT單鏈接

MQTT多鏈接

MQTT SSL不帶證書(shū)鏈接

MQTT SSL帶證書(shū)鏈接

大家可根據自身需求,選擇對應的例程學(xué)習。

 

1. 搭建環(huán)境
 

新同學(xué)建議先看前期的基礎知識相關(guān)教程,更有助于理解和操作。

wKgaoWcsoiuAUi3OAANUcDKHwSk769.png

本章所需要用到的腳本存于LuatOS-Air201demomqtt文件夾中;若沒(méi)有找到該腳本,可能代碼并非最新,請根據前面教學(xué)重新拉取。

 

1.1 硬件準備

 

Air201 PCBA

帶有數據通信功能的數據線(xiàn)

Win10以上PC

 

1.2 軟件準備

 

LuaTools調試工具:
https://docs.openluat.com/Luatools/

 

最新固件:
https://gitee.com/openLuat/LuatOS-Air201/tree/master/core
 

 

最新腳本:
https://gitee.com/openLuat/LuatOS-Air201/tree/master/demo/mqtt

 

MQTTX工具:
https://mqttx.app/ 
 

本章教程以MQTTX工具為例進(jìn)行學(xué)習,大家也可以使用其他MQTT工具。

我們先把MQTTX工具配置一下:

 

▼ MQTTX工具配置 ▼

下載好軟件后,根據下方圖中操作指示填寫(xiě)信息:

wKgaoWcsolmAW0NMAAG_5uYBnK0702.png

填寫(xiě)好信息,點(diǎn)擊右上角【連接】。

下一步,開(kāi)始添加訂閱主題和發(fā)布消息主題:

wKgZoWcsomaAacEdAAGBaPhU7rk288.png


 

這里,要特別注意一下主題格式。

 

訂閱主題格式

要求默認為:/luatos/pub/ 加模組的IMEI號
 

例如:
/luatos/pub/864536071785271 

 

發(fā)布主題格式
要求默認為:/luatos/sub/ 加模組的IMEI號
 

例如:
/luatos/sub/864536071785271

 

MQTTX配置已經(jīng)完成,現在開(kāi)始正式學(xué)習。學(xué)成之后便可通過(guò)MQTT進(jìn)行自由通信了,實(shí)際效果如下圖所示:

wKgaoWcsoneAJ4BwAAPZW0p0HH8608.png

 

2. MQTT單鏈接示例

 

2.1 main.lua說(shuō)明

在main.lua中我們需要調用single_mqtt,代碼參考如下:

wKgZoWcsooyAb2MsAARfGH7_PYk590.png

 

2.2 single_mqtt.lua說(shuō)明

下面將對single_mqtt.lua中的代碼進(jìn)行簡(jiǎn)單說(shuō)明,并指導大家修改指定參數,以便順利進(jìn)行MQTT單鏈接操作。

 

1)在代碼開(kāi)頭部分,根據自己的服務(wù)器修改指定的參數。

需要注意的是user_name和password在有些服務(wù)器上是可以不傳入的,或者是對傳入的值沒(méi)有要求限制。

要根據實(shí)際服務(wù)器要求來(lái)填寫(xiě)。

wKgZoWcsop6AI0P8AAKrJH-m89A792.png

 

2)此task實(shí)現的是MQTT的連接、訂閱消息、發(fā)布消息的流程。

要先等待網(wǎng)絡(luò )就緒之后,才可進(jìn)行MQTT后續操作。

待網(wǎng)絡(luò )就緒之后,根據代碼編寫(xiě)情況此時(shí)client_id、pub_topic和sub_topic會(huì )發(fā)生變化,會(huì )覆蓋掉代碼開(kāi)頭部分時(shí)的配置,這點(diǎn)需要注意。device_id為模組的IMEI號。

wKgaoWcsorCACXaiAAUAzG6oxfY865.pngwKgZoWcsosKAULN5AAbfq-ftPeQ268.pngwKgZoWcsotKASDPWAAPQ4TzJhlI803.png

 

3)此task的功能為模組每3秒向服務(wù)器發(fā)送一次數據:

wKgZoWcsot-ALDpXAAK-5Gh5sUA117.png

 

4)此代碼可實(shí)現mqtt-uart透傳,利用串口工具給服務(wù)器發(fā)消息或者接收來(lái)自服務(wù)器的消息。

注意:要使用串口1,且波特率為9600。

wKgaoWcsou2AZaAWAAQ8xqPo0M8971.png

 

5)此task是通過(guò)使用rtos.meminfo()查詢(xún)內存信息,并進(jìn)行打印。

RTOS庫詳細信息請參考:

 

RTOS底層操作庫

https://wiki.luatos.com/api/rtos.html?highlight=rtos#rtos-meminfo-type

wKgZoWcsovmAFgl8AAFH_XwiB7Y602.png

 

2.3 示例效果

MQTT單鏈接示例如下圖所示,實(shí)現效果為模塊每3秒向服務(wù)器發(fā)送一次數據。

wKgaomcsowqAdGJ1AAPOC_FISn8888.png

前面代碼中所提到的mqtt-uart透傳實(shí)現效果圖如下所示:

wKgZomcsoxSAU_miAAL9qJS1K_s649.png

 

3. MQTT多鏈接示例

 

3.1 main.lua說(shuō)明

在main.lua中我們需要調用multilink_mqtt,代碼參考如下:

wKgaomcsoyiAE-gIAARhKGwDFqA644.png

 

3.2 multilink_mqtt.lua說(shuō)明

 

1)在代碼開(kāi)頭部分,請根據自己的服務(wù)器修改指定的參數。

特別說(shuō)明:
client1_pub_topic
client1_sub_topic
client2_pub_topic
client2_sub_topic

以上幾項在后面函數中會(huì )再次賦參數,因此會(huì )覆蓋掉這里的參數,所以大家可以選擇不填。

wKgaoWcsoz-ABCdOAAP7YzRNFmM231.png

 

2)此create_mqtt函數主要功能是創(chuàng )建并配置MQTT客戶(hù)端對象。

具體步驟包括:

使用mqtt.create創(chuàng )建一個(gè)MQTT客戶(hù)端對象,并將其存儲在mqtt_param表的mqttc字段中;

使用log.info打印MQTT客戶(hù)端的配置信息;

使用mqttc:auth進(jìn)行MQTT三元組配置;

使用mqttc:autoreconn配置自動(dòng)重連機制,true表示啟動(dòng)自動(dòng)重連機制,3000為自動(dòng)重連周期,單位為ms。

wKgZomcso0yANyLkAASPkY_Cs5o443.png

 

3)此mqtt_client1函數主要功能是創(chuàng )建并配置一個(gè)MQTT客戶(hù)端1(client1),并鏈接到指定的MQTT服務(wù)器。

具體步驟包括:

client1_pub_topic和client1_sub_topic分別定義了客戶(hù)端1的上報主題和訂閱主題,device_id為設備的IMEI號;

使用log.info函數打印客戶(hù)端1的上報和下發(fā)主題;

使用create_mqtt函數創(chuàng )建MQTT客戶(hù)端1,并傳入mqtt1_param表中參數;

設置MQTT客戶(hù)端1的事件回調函數,event為事件類(lèi)型標識,可能出現的值有"conack"(連接確認)、"recv"(接收消息)、"sent"(發(fā)送完成)、"disconnect"(服務(wù)器斷開(kāi)連接)等,再根據不同事件類(lèi)型執行不同的功能;

調用connect方法連接到MQTT服務(wù)器。

wKgaoWcso16AXrVpAAZF5iBhSGQ831.pngwKgZoWcso2yAZjRzAAMZh2zBBA8601.png

 

4)此mqtt_client2函數主要功能是創(chuàng )建并配置一個(gè)MQTT客戶(hù)端2(client2),并鏈接到指定的MQTT服務(wù)器。

代碼內容與mqtt_client1類(lèi)似,此處不再復述。

wKgaoWcso3uANnn5AAbmoVkdcNs034.pngwKgZomcso4mAEb7YAAFN6TxtOEU993.png

 

5)此sys.taskInit為主task函數

函數主要功能是初始化剛才那兩個(gè)MQTT客戶(hù)端,確保它們能夠成功連接到服務(wù)器,并進(jìn)行周期性的發(fā)布消息以實(shí)現與服務(wù)器的通信。代碼中還進(jìn)行了設備聯(lián)網(wǎng)檢查及庫的兼容性驗證,確保在合適環(huán)境下運行。

具體步驟包括:

使用sys.waitUntil讓系統等待網(wǎng)絡(luò )連接就緒;

使用mobile.imei()獲取模塊IMEI號后賦值給device_id作為設備ID;

代碼檢查是否存在有可用的MQTT庫。若不存在,進(jìn)入一個(gè)無(wú)限循環(huán),每秒打印一個(gè)日志信息,告知用戶(hù)未找到MQTT庫;

分別啟動(dòng)兩個(gè)MQTT客戶(hù)端,并等待與服務(wù)器成功連接的確認;

設定要發(fā)布的數據及qos(服務(wù)質(zhì)量)等級,qos為1表示消息至少會(huì )被傳遞一次;

使用一個(gè)無(wú)限循環(huán),每隔3秒檢查MQTT客戶(hù)端是否準備好,并發(fā)送帶有時(shí)間戳的數據到指定的主題。

wKgaomcso5eAfCruAATrRSBC4E0538.pngwKgZomcso6mANWaJAAPdCQmtrEs584.png

 

6)此sys.taskInit的主要功能是,每隔3秒打印一次Lua程序和操作系統的內存使用情況。

wKgZomcso7OAL1udAAF6-U7Pslw892.png

 

3.3 示例效果

 

Client 1:

wKgZoWcso8KAfWrjAAQLQEpJ1ZM791.png

Client 2:

wKgZoWcso8yAffu6AAQaJJZ0Wpk048.png

 

4. MQTT SSL不帶證書(shū)鏈接示例

 

4.1 main.lua說(shuō)明

在main.lua中我們需要調用ssl_mqtt,代碼參考如下:

wKgaoWcso9-AI4gYAARc8AW4N7E729.png

 

4.2 ssl_mqtt.lua說(shuō)明

 

1)在代碼開(kāi)頭部分,根據自己的服務(wù)器修改對應參數。

 

特別注意:

MQTT SSL不帶證書(shū)鏈接與帶證書(shū)鏈接為同一個(gè)文件,我們本節教程是MQTT SSL不帶證書(shū)鏈接,因此要將mqtt_isssl的值改為true ,大家可自行參考下方代碼進(jìn)行修改。

wKgZoWcso--AYji5AAVrOwmVYr8125.png

2)其余代碼部分就與MQTT單鏈接示例中的single_mqtt.lua 代碼相同,同樣為避免重復信息過(guò)多,影響閱讀感受,大家可轉到上文2.2 single_mqtt.lua說(shuō)明進(jìn)行了解。

 

4.3 示例效果

wKgaoWcso_-AHXuQAAQgKibSzQs587.png

 

5. MQTT SSL帶證書(shū)鏈接示例

 

5.1 main.lua說(shuō)明

在main.lua中我們依舊需要調用ssl_mqtt,代碼參考如下:

wKgaoWcspBaAM2PgAARdQKc3T4k169.png

 

5.2 ssl_mqtt.lua說(shuō)明

1)在代碼開(kāi)頭部分,依舊需要大家根據自己的服務(wù)器進(jìn)行修改對應參數。

不過(guò)需要注意的是,本次是使用MQTT SSL帶證書(shū)鏈接,所以需要將mqtt_isssl的值改為table;

另外需要注意的是,既然是帶證書(shū)鏈接,那么肯定是需要準備好證書(shū)文件了,大家在使用自己的服務(wù)器時(shí),一定要準備好對應的證書(shū)文件才行,證書(shū)文件建議直接放在 LuatOS-Air201demomqtt 文件夾下,證書(shū)文件路徑根據代碼中示例自行修改。

在燒錄時(shí),要將證書(shū)文件作為腳本文件一同燒錄到模組中。詳細燒錄教程,大家可自行參考:
https://docs.openluat.com/Luatools/

wKgaoWcspCeAZ1V3AAW74W3PkQg204.png

2)其余代碼部分就與MQTT單鏈接示例中的single_mqtt.lua代碼相同,為避免重復信息過(guò)多,影響閱讀感受,大家可轉到上文大家可以轉到2.2 single_mqtt.lua說(shuō)明進(jìn)行了解。

 

5.3 示例效果

wKgZoWcspJKAXrqWAAPlU3NX-ys656.png

分享完畢,歡迎關(guān)注~


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。




相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>