• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 博客專欄

    EEPW首頁 > 博客 > 超全教程Air201:MQTT實用示例

    超全教程Air201:MQTT實用示例

    發布人:13673998452 時間:2025-01-10 來源:工程師 發布文章

    今天我們學習的是關于Air201的MQTT實用示例的終極指南。

     

    本教程教你通過使用腳本代碼,對Air201模組進行MQTT鏈接操作。

     

    操作例程包括:

    MQTT單鏈接

    MQTT多鏈接

    MQTT SSL不帶證書鏈接

    MQTT SSL帶證書鏈接

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

     

    1. 搭建環境
     

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

    wKgaoWcsoiuAUi3OAANUcDKHwSk769.png

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

     

    1.1 硬件準備

     

    Air201 PCBA

    帶有數據通信功能的數據線

    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工具為例進行學習,大家也可以使用其他MQTT工具。

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

     

    ▼ MQTTX工具配置 ▼

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

    wKgaoWcsolmAW0NMAAG_5uYBnK0702.png

    填寫好信息,點擊右上角【連接】。

    下一步,開始添加訂閱主題和發布消息主題:

    wKgZoWcsomaAacEdAAGBaPhU7rk288.png


     

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

     

    訂閱主題格式

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

    例如:
    /luatos/pub/864536071785271 

     

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

    例如:
    /luatos/sub/864536071785271

     

    MQTTX配置已經完成,現在開始正式學習。學成之后便可通過MQTT進行自由通信了,實際效果如下圖所示:

    wKgaoWcsoneAJ4BwAAPZW0p0HH8608.png

     

    2. MQTT單鏈接示例

     

    2.1 main.lua說明

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

    wKgZoWcsooyAb2MsAARfGH7_PYk590.png

     

    2.2 single_mqtt.lua說明

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

     

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

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

    要根據實際服務器要求來填寫。

    wKgZoWcsop6AI0P8AAKrJH-m89A792.png

     

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

    要先等待網絡就緒之后,才可進行MQTT后續操作。

    待網絡就緒之后,根據代碼編寫情況此時client_id、pub_topic和sub_topic會發生變化,會覆蓋掉代碼開頭部分時的配置,這點需要注意。device_id為模組的IMEI號。

    wKgaoWcsorCACXaiAAUAzG6oxfY865.pngwKgZoWcsosKAULN5AAbfq-ftPeQ268.pngwKgZoWcsotKASDPWAAPQ4TzJhlI803.png

     

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

    wKgZoWcsot-ALDpXAAK-5Gh5sUA117.png

     

    4)此代碼可實現mqtt-uart透傳,利用串口工具給服務器發消息或者接收來自服務器的消息。

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

    wKgaoWcsou2AZaAWAAQ8xqPo0M8971.png

     

    5)此task是通過使用rtos.meminfo()查詢內存信息,并進行打印。

    RTOS庫詳細信息請參考:

     

    RTOS底層操作庫

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

    wKgZoWcsovmAFgl8AAFH_XwiB7Y602.png

     

    2.3 示例效果

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

    wKgaomcsowqAdGJ1AAPOC_FISn8888.png

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

    wKgZomcsoxSAU_miAAL9qJS1K_s649.png

     

    3. MQTT多鏈接示例

     

    3.1 main.lua說明

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

    wKgaomcsoyiAE-gIAARhKGwDFqA644.png

     

    3.2 multilink_mqtt.lua說明

     

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

    特別說明:
    client1_pub_topic
    client1_sub_topic
    client2_pub_topic
    client2_sub_topic

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

    wKgaoWcsoz-ABCdOAAP7YzRNFmM231.png

     

    2)此create_mqtt函數主要功能是創建并配置MQTT客戶端對象。

    具體步驟包括:

    使用mqtt.create創建一個MQTT客戶端對象,并將其存儲在mqtt_param表的mqttc字段中;

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

    使用mqttc:auth進行MQTT三元組配置;

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

    wKgZomcso0yANyLkAASPkY_Cs5o443.png

     

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

    具體步驟包括:

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

    使用log.info函數打印客戶端1的上報和下發主題;

    使用create_mqtt函數創建MQTT客戶端1,并傳入mqtt1_param表中參數;

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

    調用connect方法連接到MQTT服務器。

    wKgaoWcso16AXrVpAAZF5iBhSGQ831.pngwKgZoWcso2yAZjRzAAMZh2zBBA8601.png

     

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

    代碼內容與mqtt_client1類似,此處不再復述。

    wKgaoWcso3uANnn5AAbmoVkdcNs034.pngwKgZomcso4mAEb7YAAFN6TxtOEU993.png

     

    5)此sys.taskInit為主task函數

    函數主要功能是初始化剛才那兩個MQTT客戶端,確保它們能夠成功連接到服務器,并進行周期性的發布消息以實現與服務器的通信。代碼中還進行了設備聯網檢查及庫的兼容性驗證,確保在合適環境下運行。

    具體步驟包括:

    使用sys.waitUntil讓系統等待網絡連接就緒;

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

    代碼檢查是否存在有可用的MQTT庫。若不存在,進入一個無限循環,每秒打印一個日志信息,告知用戶未找到MQTT庫;

    分別啟動兩個MQTT客戶端,并等待與服務器成功連接的確認;

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

    使用一個無限循環,每隔3秒檢查MQTT客戶端是否準備好,并發送帶有時間戳的數據到指定的主題。

    wKgaomcso5eAfCruAATrRSBC4E0538.pngwKgZomcso6mANWaJAAPdCQmtrEs584.png

     

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

    wKgZomcso7OAL1udAAF6-U7Pslw892.png

     

    3.3 示例效果

     

    Client 1:

    wKgZoWcso8KAfWrjAAQLQEpJ1ZM791.png

    Client 2:

    wKgZoWcso8yAffu6AAQaJJZ0Wpk048.png

     

    4. MQTT SSL不帶證書鏈接示例

     

    4.1 main.lua說明

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

    wKgaoWcso9-AI4gYAARc8AW4N7E729.png

     

    4.2 ssl_mqtt.lua說明

     

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

     

    特別注意:

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

    wKgZoWcso--AYji5AAVrOwmVYr8125.png

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

     

    4.3 示例效果

    wKgaoWcso_-AHXuQAAQgKibSzQs587.png

     

    5. MQTT SSL帶證書鏈接示例

     

    5.1 main.lua說明

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

    wKgaoWcspBaAM2PgAARdQKc3T4k169.png

     

    5.2 ssl_mqtt.lua說明

    1)在代碼開頭部分,依舊需要大家根據自己的服務器進行修改對應參數。

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

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

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

    wKgaoWcspCeAZ1V3AAW74W3PkQg204.png

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

     

    5.3 示例效果

    wKgZoWcspJKAXrqWAAPlU3NX-ys656.png

    分享完畢,歡迎關注~


    *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。




    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 福泉市| 焦作市| 太原市| 凯里市| 衢州市| 平阴县| 闽侯县| 乌苏市| 南汇区| 虞城县| 宝山区| 剑河县| 达孜县| 蚌埠市| 鲁山县| 大石桥市| 林周县| 巴楚县| 出国| 收藏| 阿克苏市| 静乐县| 嘉兴市| 台安县| 同心县| 临高县| 西贡区| 白水县| 公安县| 伊宁县| 吉木乃县| 县级市| 桃源县| 盐山县| 天台县| 乐都县| 北宁市| 德州市| 来安县| 平顺县| 永胜县|