色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

MQTT應用看這篇!合宙Air780EP_LuatOS_MQTT應用指南

合宙LuatOS ? 來源:合宙LuatOS ? 作者:合宙LuatOS ? 2024-08-08 17:13 ? 次閱讀

簡介

Air780EP 是合宙的低功耗4G模組之一,支持LuatOS的腳本二次開發,即使是不太懂技術的老板,也能輕松使用 Air780EP開發產品
本文應各位大佬邀請,詳細講解了Air780EP 的MQTT的應用教程

MQTT協議具有長連接、低帶寬、高可靠性的優勢,非常適合物聯網設備的通信需求。
除了MQTT,Air780EP還提供了TCP、UDP、HTTP、WebSocket、FTP、NTP等多種網絡協議的支持,使得設備可以靈活地接入不同的網絡環境和平臺。

實用場景:需要服務器下發消息給設備,需要及時收到。例如,遠程開關,充電樁

合宙支持LuatOS功能的模組型號,除本文介紹的Air780EP外, 還有Air780EPA、Air780E、Air780EX、Air201、Air780EPT、Air780EPS等型號, 本文介紹的MQTT應用流程,同樣也適用于這些型號。

材料準備

需要用到的材料和工具:
780EP開發板一套,包括天線SIM卡,USB
PC電腦,以及登錄官方IOT后臺 https://iot.openluat.com/
固件和DEMO下載地址 LuatOS軟件包

wKgaomad_iCAGM1mACObj6OhrXM912.png

名詞解析:


user_name用戶名,password密碼,client_id用戶標識,MQTT可以通過前兩個參數保證連接的安全,通過client_id確保設備唯一性。


QOS表示消息質量,分為0,1,2三個等級,分別表示只發一次,至少收到一次和只收到一次,通過QOS可以根據數據的重要性靈活選擇發送方式以節省帶寬和保證數據可靠。

關于publish時QOS值的說明


QOS為0時,壓入底層TCP發送堆棧,視為成功
QOS為1時,收到服務器回應PUBACK,視為成功
QOS為2時,收到服務器響應PUBREC,立即上行PUBCOMP壓入TCP發送隊列,視為成功


mqtt_host主機,mqtt_port端口,MQTT需要連接的服務器參數。mqtt_host可以說是ip或者域名。
topic主題,根據主題區別消息類型和來源,主要用來分類數據。同時mqtt是發布訂閱模型,topic是發布和訂閱者通信的重要通道。
payload消息內容,發布和訂閱的具體數據。
retain保留消息,保留消息是一條將保留標志(retained flag)置為true的普通MQTT消息。

broker會針對主題依照QoS級別保留最后一條保留消息,當訂閱者訂閱主題時會立即收到保留消息。broker僅為每個主題保留一條保留消息。


API說明:

API接口 描述
mqtt.create() 創建一個mqtt client實例
mqttc:connect() 連接mqtt服務器
mqttc:subscribe() 訂閱主題
mqttc:unsubscribe() 取消訂閱主題
mqttc:publish() 發布消息
mqttc:disconnect() 斷開與服務器的連接


實現流程

1. 創建一個Task協程

接口

? sys.taskInit(func, arg1, arg2, argN)

參數

傳入值類型 解釋
function 待執行的函數,可以是匿名函數, 也可以是local或全局函數
any 需要傳遞的參數1,可選
any 需要傳遞的參數2,可選
any 需要傳遞的參數N,可選

返回值

返回值類型 解釋
task 協程對象

2. 等待網絡就緒

3. 創建一個mqtt實例

接口

? mqtt.create(adapter,host,port,ssl,isipv6)

參數

傳入值類型 解釋
int 適配器序號, 只能是socket.ETH0, socket.STA, socket.AP,如果不填,會選擇平臺自帶的方式,然后是最后一個注冊的適配器
string 服務器地址,可以是域名, 也可以是ip
int 端口號
bool/table 是否為ssl加密連接,默認不加密,true為無證書最簡單的加密,table為有證書的加密 server_cert 服務器ca證書數據 client_cert 客戶端證書數據 client_key 客戶端私鑰加密數據 client_password 客戶端私鑰口令數據 verify 是否強制校驗 0不校驗/1可選校驗/2強制校驗 默認2
bool/table bool 是否為ipv6,默認不是 table mqtt擴展參數, ipv6 是否為ipv6, rxSize 接收緩沖區大小

返回值

返回值類型 解釋
userdata 若成功會返回mqtt客戶端實例,否則返回nil

4. 連接服務器

接口: mqttc:connect()

參數:

返回值

返回值類型 解釋
boolean 發起成功返回true, 否則返回false

注意:本函數僅代表發起成功, 后續仍需根據ready函數判斷mqtt是否連接正常

5. 訂閱主題

接口

? mqttc:subscribe(topic, qos)

參數

傳入值類型 解釋
string/table 主題
int topic為string時生效 0/1/2 默認0

返回值

返回值類型 解釋
int 消息id,當qos為1/2時有效, 若底層返回失敗,會返回nil

6. 發布消息

接口:mqttc:publish(topic, data, qos, retain)

參數

傳入值類型 解釋
string 主題,必填
string 消息,必填,但長度可以是0
int 消息級別 0/1 默認0
int 是否存檔, 0/1,默認0

返回值

返回值類型 解釋
int 消息id, 當qos為1或2時會有效值. 若底層返回是否, 會返回nil

7. 接收消息

8. 斷開服務器的連接

接口:? mqttc:disconnect()

參數:

返回值

返回值類型 解釋
boolean 發起成功返回true, 否則返回false

示例

本文以demo_luaLuatOSdemomqtt這個demo為例作為演示,以MQTTX工具來測試MQTT運行狀況

1.在MQTTX軟件上建立連接

wKgZoma0iZSAC9brAAFNBWYfARY258.png

2.在MQTTX軟件上添加訂閱

注意:訂閱主題格式要求默認為 /luatos/pub/ 加模塊的IMEI號,例如 /luatos/pub/868488076506128

wKgaoma0ibiAF0x5AAFJ9bOCFRM493.png


3.設置MQTTX軟件上發布消息的主題

? 注意:格式要求默認為 /luatos/sub/ 加模塊的IMEI號,例如 /luatos/sub/868488076506128

wKgaoma0ic2ARCX9AABkQpX1h90627.png

4.燒錄腳本,上電開機后模塊會自動向服務器發送消息,這是代碼默認設置的,若不需要可以刪掉

wKgaoma0ifCAXJ7YAAHUPwY1Ev8702.png

5.模塊向服務器發送消息,通過Luatools軟件可以看到

wKgaoma0igWAYYEtAAGg_Mfk-Ko068.png


MQTT單鏈接示例

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

注意:user_name、password在有些服務器上是可以不傳入的,或者是對傳入的值沒有要求限制。要根據實際服務器要求來填寫

--根據自己的服務器修改以下參數
local mqtt_host = "lbsmqtt.airm2m.com"
local mqtt_port = 1884
local mqtt_isssl = false
local client_id = "abc"
local user_name = "user"
local password = "password"

local pub_topic = "/luatos/pub/" .. (mcu.unique_id():toHex())   -- 該變量在下方代碼有重新賦值,根據實際應用場景,可自行修改腳本邏輯
local sub_topic = "/luatos/sub/" .. (mcu.unique_id():toHex())   -- 該變量在下方代碼有重新賦值,根據實際應用場景,可自行修改腳本邏輯

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

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

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

sys.taskInit(function()
    -- 等待聯網
    local ret, device_id = sys.waitUntil("net_ready")
    -- 下面的是mqtt的參數均可自行修改
    -- client_id = device_id
    pub_topic = "/luatos/pub/" .. device_id
    sub_topic = "/luatos/sub/" .. device_id

    -- 打印一下上報(pub)和下發(sub)的topic名稱
    -- 上報: 設備 ---> 服務器
    -- 下發: 設備 

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

-- 這里演示在另一個task里上報數據, 會定時上報數據,不需要就注釋掉
sys.taskInit(function()
    sys.wait(3000)
	local data = "123,"
	local qos = 1 -- QOS0不帶puback, QOS1是帶puback的
    while true do
        sys.wait(3000)
        if mqttc and mqttc:ready() then
            local pkgid = mqttc:publish(pub_topic, data .. os.date(), qos)
            -- local pkgid = mqttc:publish(topic2, data, qos)
            -- local pkgid = mqttc:publish(topic3, data, qos)
        end
    end
end)

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

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

-- 以下是演示與uart結合, 簡單的mqtt-uart透傳實現,不需要就注釋掉
local uart_id = 1
uart.setup(uart_id, 9600)
uart.on(uart_id, "receive", function(id, len)
    local data = ""
    while 1 do
        local tmp = uart.read(uart_id)
        if not tmp or #tmp == 0 then
            break
        end
        data = data .. tmp
    end
    log.info("uart", "uart收到數據長度", #data)
    sys.publish("mqtt_pub", pub_topic, data)
end)
sys.subscribe("mqtt_payload", function(topic, payload)
    log.info("uart", "uart發送數據長度", #payload)
    uart.write(1, payload)
end)

MQTT多鏈接示例

多鏈接的核心,就是要創建兩個mqtt客戶端的對象,通過不同的變量控制,代碼部分如下:

    --------------------第一個mqtt客戶端--------------------
    mqttc1 = mqtt.create(nil, mqtt_host, mqtt_port, mqtt_isssl, ca_file)    -- 創建的第一個mqtt對象
    mqttc1:auth(client1_id,user_name,password) -- client_id必填,其余選填
    -- mqttc1:keepalive(240) -- 默認值240s
    mqttc1:autoreconn(true, 3000) -- 自動重連機制
    mqttc1:on(function(mqtt_client, event, data, payload)
        -- 用戶自定義代碼
        log.info("mqtt", "event", event, mqtt_client, data, payload)
        if event == "conack" then
            -- 聯上了
            sys.publish("mqtt_conack")
            mqtt_client:subscribe(sub_topic_client)--單主題訂閱
            -- mqtt_client:subscribe({[topic1]=1,[topic2]=1,[topic3]=1})--多主題訂閱
        elseif event == "recv" then
            -- 客戶端1 接收數據
            log.info("mqtt", "downlink", "topic", data, "payload", payload)
            sys.publish("mqtt_payload", data, payload)
        elseif event == "sent" then
            -- log.info("mqtt", "sent", "pkgid", data)
        -- elseif event == "disconnect" then
            -- 非自動重連時,按需重啟mqttc
            -- mqtt_client:connect()
        end~
    end)

    --------------------第二個mqtt客戶端--------------------
    mqttc2 = mqtt.create(nil, mqtt_host, mqtt_port, mqtt_isssl, ca_file)    -- 創建的第二個mqtt對象
    mqttc2:auth(client2_id,user_name,password) -- client_id必填,其余選填
    -- mqttc2:keepalive(240) -- 默認值240s
    mqttc2:autoreconn(true, 3000) -- 自動重連機制
    mqttc2:on(function(mqtt_client, event, data, payload)
        -- 用戶自定義代碼
        log.info("mqtt", "event", event, mqtt_client, data, payload)
        if event == "conack" then
            -- 聯上了
            sys.publish("mqtt_conack")
            
            mqtt_client:subscribe(sub_topic_client)     -- 主題訂閱 -> 訂閱主題可以額外自定義
            -- mqtt_client:subscribe({[topic1]=1,[topic2]=1,[topic3]=1})--多主題訂閱
        elseif event == "recv" then
            -- 客戶端2 接收數據
            log.info("mqtt", "downlink", "topic", data, "payload", payload)
            sys.publish("mqtt_payload", data, payload)
        elseif event == "sent" then
            -- log.info("mqtt", "sent", "pkgid", data)
        -- elseif event == "disconnect" then
            -- 非自動重連時,按需重啟mqttc
            -- mqtt_client:connect()
        end
    end)

    -- 客戶端1 發送數據
    mqttc1:publish(topic, data, qos)    -- 發布topic主題可以自定義,可以不相同
    -- 客戶端2 發送數據
    mqttc2:publish(topic, data, qos)    -- 發布topic主題可以自定義,可以不相同


常見問題:

Q: 模組支持MQTT最新的版本是多少?

A: MQTT_V3.1.1版本

Q: 模組最多支持幾路鏈接?

A: mqtt/tcp/udp的鏈接公用8路通道

好啦,通過以上步驟,你就能夠實現設備到MQTT服務器的連接與數據交互了。
評論區討論下你遇到的問題吧~

wKgZomax0JaACDSHAAhAbEqOp1Q823.pngwKgZomax0UiAIQxLAAoPzDux5vQ191.png

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    12

    文章

    9123

    瀏覽量

    85324
  • MQTT
    +關注

    關注

    5

    文章

    650

    瀏覽量

    22487
收藏 人收藏

    評論

    相關推薦

    Air780EP模塊Lua開發阿里云應用指南

    Air780EP模塊Lua開發阿里云超詳細教學!看完包學會!
    的頭像 發表于 08-08 09:00 ?933次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air780EP</b>模塊Lua開發阿里云應用<b class='flag-5'>指南</b>

    Air780EP模塊——AT指令MQTT接入OneNET開發指南

    過程,Air780EPMQTT是最佳拍檔,讓設備互聯變得輕松又靠譜。想不想試試這簡單又神奇的操作?那就來吧!本文詳細講解了基于Air80EP
    的頭像 發表于 08-19 16:40 ?2203次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air780EP</b>模塊——AT指令<b class='flag-5'>MQTT</b>接入OneNET開發<b class='flag-5'>指南</b>

    AT指令速通FTP:Air780EP模塊超詳細教程

    Air780EP低功耗4G模組AT開發接入FTP超詳細示例!
    的頭像 發表于 08-20 17:40 ?2490次閱讀
    AT指令速通FTP:<b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air780EP</b>模塊超詳細教程

    低功耗4G模組Air780EP——硬件設計01

    Air780EP是一款低功耗LTECat1無線通信模組。 支持FDD-LTE/TDD-LTE的4G遠距離無線 傳輸技術。 另外,模組提供了USB/UART/I2C等通用接口滿足IoT行業的各種應用訴求。 本文將主要介紹
    的頭像 發表于 09-02 16:47 ?1624次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>低功耗4G模組<b class='flag-5'>Air780EP</b>——硬件設計01

    FTP應用看這篇!Air780EP低功耗4G模組AT開發示例

    ? Air780EP的[低功耗4G模組]之一,支持全系列的AT指令以及LuatOS腳本二次開發。 本文應各位大佬邀請,詳細講解了Air780E
    的頭像 發表于 09-29 09:36 ?1814次閱讀
    FTP應用看這篇!<b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air780EP</b>低功耗4G模組AT開發示例

    LuatOS新版發布

    1LuatOS新版固件今日發布LuatOS-SoC@EC618新版固件——適用基于移芯EC618平臺設計研發的Air780EG、
    的頭像 發表于 02-07 14:03 ?1214次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>LuatOS</b>新版發布

    | Air780EP首版LuatOS固件發布,新品模組內測搶先體驗

    07日,Air780EP首版LuatOS固件發布。 軟件支持已就緒,開發板還會遠嗎?
    的頭像 發表于 12-11 12:20 ?2805次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b> | <b class='flag-5'>Air780EP</b>首版<b class='flag-5'>LuatOS</b>固件發布,新品模組內測搶先體驗

    Air780E/Air780EP/Air780EQ/Air201模塊遇到死機問題如何分析

    Air780E/Air780EP/Air780EQ/Air201模塊遇到死機問題如何分析簡介本文檔適用于
    的頭像 發表于 08-01 17:27 ?775次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b> <b class='flag-5'>Air780</b>E/<b class='flag-5'>Air780EP</b>/<b class='flag-5'>Air780</b>EQ/<b class='flag-5'>Air</b>201模塊遇到死機問題如何分析

    LuatOS產品規格書——Air780EQ

    LuatOS——低功耗4G模組——產品規格書——Air780EQ
    的頭像 發表于 08-29 14:37 ?479次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>LuatOS</b>產品規格書——<b class='flag-5'>Air780</b>EQ

    低功耗4G模組Air780EP——產品規格書

    低功耗4G模組Air780EP——產品規格信息介紹
    的頭像 發表于 08-30 18:07 ?1363次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>低功耗4G模組<b class='flag-5'>Air780EP</b>——產品規格書

    低功耗4G模組Air780EP——硬件設計02

    低功耗4G模組Air780EP——硬件設計
    的頭像 發表于 09-03 15:07 ?674次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>低功耗4G模組<b class='flag-5'>Air780EP</b>——硬件設計02

    LuatOS開發板Core_Air780EP使用說明

    Core-Air780EP 開發板是通信推出的基于 Air780EP 模組所開發的,包含電源,SIM卡,USB,天線,音頻等必要功能的最小硬件系統。以方便用戶在設計前期對
    的頭像 發表于 09-03 17:38 ?550次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>LuatOS</b>開發板Core_<b class='flag-5'>Air780EP</b>使用說明

    RNDIS網卡應用看這篇!Air780EP低功耗4G模組AT開發示例

    ?Air780EP的低功耗4G模組之一,支持全系列的AT指令以及LuatOS腳本二次開發。 本文應各位大佬邀請,特別講解Air780EP
    的頭像 發表于 09-30 06:59 ?553次閱讀
    RNDIS網卡應用看這篇!<b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air780EP</b>低功耗4G模組AT開發示例

    MQTT應用:Air780EP低功耗4G模組AT開發

    本文應各位大佬邀請,詳細講解Air780EP模組MQTT應用的多個AT命令。
    的頭像 發表于 10-25 17:27 ?323次閱讀
    <b class='flag-5'>MQTT</b>應用:<b class='flag-5'>Air780EP</b>低功耗4G模組AT開發

    Air780E模組AT指令下的MQTT應用:技術指南

    今天我要講的是Air780E模組AT指令下的MQTT應用,希望對大家有所幫助。
    的頭像 發表于 11-07 14:02 ?327次閱讀
    <b class='flag-5'>Air780</b>E模組AT指令下的<b class='flag-5'>MQTT</b>應用:技術<b class='flag-5'>指南</b>
    主站蜘蛛池模板: 亚洲AV久久无码精品国产网站| 欧美性情video sexo视频| 老色69久久九九精品高潮| 99精品日韩| 亚洲欲色欲色XXXXX在线AV| 欧美一区二区三区激情视频| 最新无码国产在线视频| 亚洲精品无码不卡在线播HE| 午夜福利92看看电影80| 天天靠天天擦天天摸| 日本黄色www| 日本无码欧美激情在线视频| 日本大尺码喷液过程视频| 欧美性xxx18一20| 青青草视频在线ac| 人妻免费久久久久久久了| 热思思| 日韩一本道无码v| 手机免费毛片| 亚欧视频在线观看| 亚洲免费在线观看视频| 亚洲欧美中文字幕网站大全 | 97人妻久久久精品系列A片| 中文文字幕文字幕亚洲色| 91麻豆久久| 极品少妇高潮啪啪无码吴梦| 伊人精品国产| 善良的小峓子2在钱中文版女主角 善良的小峓子2在钱免费中文字 | 趁老师睡着吃她的奶水| 双腿打开揉弄高潮H苏安安秦慕深| 国产精品爆乳尤物99精品| 永久adc视频年龄确认| 韩国hd高清xxx| 九九在线精品亚洲国产| 久久精品国产亚洲AV妓女不卡| 久久久无码精品一区二区三区| 久久亚洲精品专区蓝色区| 妹妹成人网| 色柚视频网站ww色| 亚洲大码熟女在线| 最近中文字幕MV免费高清视频8|