一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RyanMqtt使用介紹和示例代碼(2)

冬至子 ? 來源:Ryan_CW ? 作者:Ryan_CW ? 2023-09-28 10:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

mqttx截圖

1.jpg

mqtt sub (mqtt訂閱主題)

接下來我們?cè)囈幌掠嗛喼黝},使用多通配符來測(cè)試

先測(cè)試 “” 通配符,””比較特殊,應(yīng)用不能使用”$”開頭的系統(tǒng)主題!
按規(guī)范服務(wù)端不能將 $ 字符開頭的主題名匹配通配符 (#或+) 開頭的主題過濾器

由于應(yīng)用不能使用”**”開頭的系統(tǒng)主題所以 “broker.emqx.io” 不允許訂閱 “**SYS”, 但是為了測(cè)試我把我的mqtt服務(wù)器設(shè)置為允許訂閱,下圖示例使用我的mqtt服務(wù)器來進(jìn)行測(cè)試。 如果您測(cè)試的時(shí)候發(fā)現(xiàn)訂閱失敗請(qǐng)查看您的mqtt服務(wù)器是否允許應(yīng)用訂閱”$”開頭的系統(tǒng)主題

我使用emqx服務(wù)端,當(dāng)訂閱 “$SYS/#” 時(shí)會(huì)觸發(fā)保留消息打印地址、應(yīng)用名、版本等信息

RyanMqtt訂閱結(jié)果

1.jpg

mqttx訂閱結(jié)果

1.jpg

再來測(cè)試 “/“、”#”、”+” 通配符
為了快速我就在一個(gè)主題里面使用多個(gè)通配符,發(fā)送符合不同通配符的消息來進(jìn)行測(cè)試
訂閱主題:testdown/+/nihao/#

下圖中紅框發(fā)送的是符合訂閱主題通配符的,黑框是不符合訂閱主題通配符的。
可以看到RyanMqtt可以準(zhǔn)確的接收到通配符消息。

1.jpg

1.jpg

mqtt unsub (mqtt取消訂閱主題)
取消訂閱主題,取消沒訂閱的主題時(shí)會(huì)自動(dòng)忽略。

可以看到取消訂閱后再發(fā)送消息,RyanMqtt就不會(huì)收到了

下圖第一個(gè)紅框?yàn)榈谝淮稳∠梢杂|發(fā)回調(diào),第二次取消就沒有任何響應(yīng)。

1.jpg

1.jpg

mqtt listsub (mqtt獲取已訂閱主題)
打印結(jié)果執(zhí)行順序?yàn)?

打印已訂閱主題 —> 訂閱”testdown/+/nihao/#”主題 —> 打印已訂閱主題 —> 訂閱”testdown2”主題 —> 打印已訂閱主題 —> 取消訂閱”testdown/+/nihao/#”主題 —> 打印已訂閱主題

1.jpg

mqtt listack (打印ack鏈表,輔助功能)
ack鏈表包含發(fā)送qos1 / qos2 的ack報(bào)文、接收qos1 / qos2 的ack報(bào)文、訂閱 / 取消訂閱主題的ack報(bào)文。
根據(jù)上面的描述可以知道 ack鏈表 通常都應(yīng)該為空。只有在上訴情況下才會(huì)存在,但是礙于篇幅這里無法進(jìn)行測(cè)試了,等下一篇文章測(cè)試qos1 / qos2消息穩(wěn)定性時(shí)再進(jìn)行展示

1.jpg

mqtt listmsg (打印msg鏈表,輔助功能)
msg鏈表保存著訂閱主題的信息,接收消息、取消訂閱的時(shí)候都會(huì)操作msg鏈表。
所以listmsg和listsub是一摸一樣的操作,結(jié)果自然也就一樣,這里就不展示了

mqtt data (打印測(cè)試信息用戶自定義的)
接口我用來測(cè)試qos消息穩(wěn)定性,沒有實(shí)際意義。

4、將RyanMqtt添加到自己項(xiàng)目代碼里,不使用msh示例
上面我們使用msh示例來進(jìn)行RyanMqtt的測(cè)試,但在項(xiàng)目中我們肯定不會(huì)通過msh來操作mqtt,所以我們將根據(jù)msh示例來將RyanMqtt添加到代碼里
首先我們思考下mqtt的執(zhí)行流程,根據(jù)示例來看我們需要

處理訂閱消息
連接mqtt服務(wù)器 —> 訂閱主題 —> 收到訂閱主題的消息 —> 在回調(diào)函數(shù)里面消費(fèi)消息(調(diào)函數(shù)的執(zhí)行環(huán)境是mqtt客戶端的線程,所以非常不建議在回調(diào)函數(shù)里面做復(fù)雜邏輯操作,一是會(huì)阻塞mqtt線程運(yùn)行,二是可能會(huì)導(dǎo)致mqtt線程爆棧。還是看使用場(chǎng)景如果需要串行處理mqtt消息在回調(diào)里面使用是挺好的)

發(fā)布消息
連接mqtt服務(wù)器 —> 發(fā)布主題消息(qos1 / qos2會(huì)有發(fā)送成功或者超過重發(fā)次數(shù)的回調(diào))

重連邏輯

配置mqtt客戶端自動(dòng)重連 —> 連接服務(wù)器
不配置mqtt客戶端自動(dòng)重連 —> 連接服務(wù)器 —> 獲取mqtt客戶端狀態(tài)(斷連狀態(tài)手動(dòng)調(diào)用重連函數(shù))
根據(jù)上面的處理方式我們來進(jìn)行代碼編寫,為了方便我都放在main函數(shù)了

這是原始main函數(shù),只設(shè)置了netdev狀態(tài)變更回調(diào)

1.jpg

先添加頭文件,如下圖

1.jpg

1、先添加連接服務(wù)器函數(shù),這里直接將msh示例中的connect函數(shù)復(fù)制到main.c,并處理報(bào)錯(cuò)地方(自行處理都很簡(jiǎn)單,都是資源未定義),圖片放不下我就不截圖了

2、再添加訂閱主題函數(shù),訂閱主要要等mqtt連接成功后。所以不管有沒有使能clearSession,都非常推薦在連接成功回調(diào)函數(shù)中訂閱主題 如下圖所示

1.jpg

3、再添加發(fā)布消息,這里簡(jiǎn)單起見直接加個(gè)循環(huán),每10秒發(fā)送一個(gè)hello。(mqtt沒有連接成功時(shí)也可以發(fā)布但是mqtt客戶端不會(huì)進(jìn)行處理,會(huì)直接丟棄不管qos等級(jí)) 如下圖所示

1.jpg

4、消費(fèi)訂閱主題的消息,這里是直接打印出來消息的主題、報(bào)文id、載荷長(zhǎng)度、載荷指針,推薦通過消息隊(duì)列發(fā)送到別的線程進(jìn)行處理,或者您如果知道在回調(diào)函數(shù)處理的副作用的話可以在回調(diào)函數(shù)中直接處理

注:載荷指針最后一位沒有 “?”,可能會(huì)存在臟數(shù)據(jù),需要用戶手動(dòng)處理。下圖給出一種處理方案
或者mqtt消息一般為json,可以使用RyanJson / cJSON來處理json數(shù)據(jù),都可以自動(dòng)識(shí)別尾部臟數(shù)據(jù)

1.jpg

5、這樣我們就添加完成了,燒錄進(jìn)行測(cè)試
如下面兩個(gè)圖所示,每秒上傳一次消息,接收到消息后進(jìn)行打印出來。結(jié)果如我們所想

1.jpg

1.jpg

5、總結(jié)
這篇文章簡(jiǎn)單介紹了RyanMqtt的使用,包括msh示例和添加到自己的工程代碼里面。但文章礙于篇幅限制介紹的始終很淺,想深入的了解還是要看代碼,RyanMqtt注釋都為中文。

接下來應(yīng)該還會(huì)寫兩篇文章介紹RyanMqtt,一篇進(jìn)行RyanMqtt的qos1 / qos2消息等級(jí)的穩(wěn)定性測(cè)試,另一篇介紹下RyanMqtt移植指南

后面看要不要詳細(xì)介紹一下mqtt協(xié)議,RyanMqtt代碼倉(cāng)庫(kù)docs/下有mqtt3.1.1協(xié)議中文版本pdf,一般來說看文檔就可以了。
以及mqtt5.0,5.0增加了很多激動(dòng)人心的特性,在考慮要不要適配一下,看大家需求了,可能遙遙無期哈哈哈哈哈。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19851

    瀏覽量

    234131
  • 接收機(jī)
    +關(guān)注

    關(guān)注

    8

    文章

    1221

    瀏覽量

    54372
  • 回調(diào)函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    88

    瀏覽量

    11861
  • MQTT協(xié)議
    +關(guān)注

    關(guān)注

    0

    文章

    98

    瀏覽量

    5875
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    RyanMqtt使用介紹示例代碼(1)

    此步驟不做過多解釋,是lwip就用lwip,是at設(shè)備就用at_socket。推薦所有平臺(tái)都使用SAL框架(RyanMqtt軟件包會(huì)自動(dòng)使能)。
    的頭像 發(fā)表于 09-28 10:09 ?1679次閱讀
    <b class='flag-5'>RyanMqtt</b>使用<b class='flag-5'>介紹</b>和<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>(1)

    RyanMqtt實(shí)現(xiàn)MQTT3.1.1協(xié)議的客戶端

    還沒有同步到packages庫(kù)列表,暫時(shí)還無法在軟件包列表搜索到。提pr應(yīng)該3天了…….介紹RyanMqtt 實(shí)現(xiàn)了 MQTT3.1.1 協(xié)議的客戶端。此庫(kù)針對(duì)資源受限的嵌入式設(shè)備進(jìn)行了優(yōu)化。初衷:在
    發(fā)表于 12-01 15:19

    excel vba代碼 示例講解

    excel vba代碼 示例講解
    發(fā)表于 09-07 09:36 ?25次下載
    excel vba<b class='flag-5'>代碼</b> <b class='flag-5'>示例</b>講解

    MSP430F21x2示例代碼

    MSP430F21x2示例代碼
    發(fā)表于 05-02 15:44 ?19次下載
    MSP430F21x<b class='flag-5'>2</b><b class='flag-5'>示例</b><b class='flag-5'>代碼</b>

    MSP430F22x2, MSP430F22x4 示例代碼

    MSP430F22x2, MSP430F22x4 示例代碼
    發(fā)表于 05-02 17:07 ?18次下載
    MSP430F22x<b class='flag-5'>2</b>, MSP430F22x4 <b class='flag-5'>示例</b><b class='flag-5'>代碼</b>

    MSP430F41x2示例代碼

    MSP430F41x2示例代碼
    發(fā)表于 05-02 17:37 ?4次下載
    MSP430F41x<b class='flag-5'>2</b><b class='flag-5'>示例</b><b class='flag-5'>代碼</b>

    python代碼示例之基于Python的日歷api調(diào)用代碼實(shí)例

    本文檔的主要內(nèi)容詳細(xì)介紹的是python代碼示例之基于Python的日歷api調(diào)用代碼實(shí)例。
    發(fā)表于 09-06 14:25 ?42次下載
    python<b class='flag-5'>代碼</b><b class='flag-5'>示例</b>之基于Python的日歷api調(diào)用<b class='flag-5'>代碼</b>實(shí)例

    ESP-NOW技術(shù)的介紹和使用方式及示例代碼資料免費(fèi)下載

    本文介紹了樂鑫自主研發(fā)的ESP-NOW技術(shù),說明了使用方式并提供了示例代碼包括了:1.ESP-NOW技術(shù)簡(jiǎn)介,2.ESP-NOW使用方式,3.示例
    發(fā)表于 03-15 08:00 ?59次下載
    ESP-NOW技術(shù)的<b class='flag-5'>介紹</b>和使用方式及<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>資料免費(fèi)下載

    AD593X代碼示例

    AD593X代碼示例
    發(fā)表于 03-23 08:18 ?14次下載
    AD593X<b class='flag-5'>代碼</b><b class='flag-5'>示例</b>

    下載Blackfin 2D圖形庫(kù)的免費(fèi)生產(chǎn)版本以及示例和演示代碼。

    下載Blackfin 2D圖形庫(kù)的免費(fèi)生產(chǎn)版本以及示例和演示代碼
    發(fā)表于 04-13 08:55 ?0次下載
    下載Blackfin <b class='flag-5'>2</b>D圖形庫(kù)的免費(fèi)生產(chǎn)版本以及<b class='flag-5'>示例</b>和演示<b class='flag-5'>代碼</b>。

    BeMicro代碼示例

    BeMicro代碼示例
    發(fā)表于 05-10 12:21 ?0次下載
    BeMicro<b class='flag-5'>代碼</b><b class='flag-5'>示例</b>

    華為游戲服務(wù)示例代碼教程案例

    概述 游戲服務(wù)kit安卓示例代碼集成了華為游戲服務(wù)的眾多API,提供了示例代碼程序供您參考和使用,下面是對(duì)示例
    發(fā)表于 04-11 11:09 ?4次下載

    適用于Megawin 8051 MCU的I2C(軟件模擬)示例代碼

    適用于Megawin 8051 MCU的I2C(軟件模擬)示例代碼
    發(fā)表于 06-30 17:22 ?2次下載
    適用于Megawin 8051 MCU的I<b class='flag-5'>2</b>C(軟件模擬)<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>

    基于keil的AD7366示例代碼

    基于keil的AD7366示例代碼分享
    發(fā)表于 10-08 14:58 ?3次下載

    自己編寫函數(shù)示例代碼很難嗎?分享幾個(gè)示例

    Q A 問: Arduino Uno的函數(shù)示例 我決定自己編寫函數(shù)示例代碼,因?yàn)檫@應(yīng)該是Arduino中的基本示例。網(wǎng)絡(luò)上確實(shí)有關(guān)于使用函數(shù)的文檔,但是,如果要嘗試使用
    的頭像 發(fā)表于 11-16 16:05 ?820次閱讀
    自己編寫函數(shù)<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>很難嗎?分享幾個(gè)<b class='flag-5'>示例</b>!