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

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

3天內不再提示

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

冬至子 ? 來源:Ryan_CW ? 作者:Ryan_CW ? 2023-09-28 10:09 ? 次閱讀

測試環(huán)境:stm32F401RCT6、RT-Thread版本: v4.1.0、RT-Thread Studio版本: 2.2.6、網(wǎng)絡硬件使用ec800m移植at_socket使用sal框架。

1、添加網(wǎng)絡硬件
RyanMqtt依賴SAL框架 / LWIP。

此步驟不做過多解釋,是lwip就用lwip,是at設備就用at_socket。推薦所有平臺都使用SAL框架(RyanMqtt軟件包會自動使能)。

2、添加RyanMqtt
這里使用的Studio開發(fā)環(huán)境,點擊 RT-Thread Settings,選擇添加軟件包,搜索RyanMqtt添加。

開啟RyanMqtt msh示例,版本建議選擇latest (latest包含了最新的錯誤修復和特性,推送前都經過測試的。但是rt-thread使用gitee鏡像,同步需要1-3天,如果要使用最新latest版本請修改為github源)

添加后如下圖所示,直接編譯然后燒錄

1.jpg

3、使用msh測試例子
網(wǎng)絡硬件必須要能連接到網(wǎng)絡,否則mqtt沒有任何意義
編譯燒錄后在串口終端輸入 “help” / table鍵,打印shell命令信息,查看是否有mqtt命令,如下圖所示。

注:沒有mqtt命令的請查看RyanMqtt軟件包是否開啟了msh示例

1.jpg

接著我們輸入 “mqtt” / “mqtt help” 命令,打印信息如下圖所示

1.jpg

可以看到msh示例程序給出的部分mqtt功能命令,左側為mqtt示例命令,中間為命令介紹,右側為需要傳遞的參數(shù)。

接下來我們依次試試每個命令的功能。

mqtt state (打印mqtt客戶端狀態(tài))
打印當前mqtt的狀態(tài)。狀態(tài)定義為

typedef enum
{
    RyanMqttInvalidState = -1, // 無效狀態(tài)
    RyanMqttInitState = 0,     // 初始化狀態(tài)
    RyanMqttStartState,        // 開始狀態(tài)
    RyanMqttConnectState,      // 連接狀態(tài)
    RyanMqttDisconnectState,   // 斷開連接狀態(tài)
    RyanMqttReconnectState,    // 重新連接狀態(tài)
} RyanMqttState_e;

讓我們嘗試一下
無效狀態(tài),因為我們還沒有調用連接函數(shù),mqtt客戶端還沒有被初始化,所以為無效狀態(tài)

1.jpg

mqtt connect (mqtt連接服務器)
連接mqtt服務器,可以看到參數(shù)為null。連接服務器的配置信息在RyanMqttTest.c文件的頭部,如下所示
修改下面配置信息來連接你的mqtt服務器,”broker.emqx.io” 為emqx的開放mqtt服務器。
注意:mqtt客戶端id必須唯一,請務必進行修改!

1.jpg

讓我們嘗試一下connect

1.jpg

可以看到打印了一條 “mqtt連接成功回調” 。為什么會打印呢? 這我們就要看看mqtt connect命令做了什么?
首先我們要找到cmdTab,這里存放了示例的所有命令。

1.jpg

我們點擊connect示例對應的函數(shù) “MqttConnect”秘密就發(fā)生在mqttConfig的回調函數(shù)和注冊事件中。我們在注冊事件回調中選擇了所有事件,其中就包括了mqtt連接成功事件。如下圖所示
當mqtt連接成功時就會調用mqttConfig中的mqttEventHandle函數(shù)指針。在mqttEventHandle內部我們打印了一條 “mqtt連接成功回調”

3.jpg

回調函數(shù)內部

1.jpg

可注冊的回調事件定義為

1.jpg

mqtt disc (mqtt斷開連接服務器)
主動斷開mqtt服務器的連接,使用效果如下,回調函數(shù)中打印了 “mqtt斷開連接回調”
圖中 “204” 為斷開連接事件的eventData,可查看可注冊的回調事件定義對于eventData的定義。
注:為什么斷開連接后會自動重連呢? 我們在調用connect示例的時候使能了 “自動重連” 并定義了重連時間。

1.jpg

mqtt reconnect (mqtt斷開連接時重新連接服務器)
當我們沒有使能 “自動重連” 時,我們可以手動調用 RyanMqttReconnect 函數(shù)來進行重連
注:如果mqtt客戶端不為 RyanMqttDisconnectState 狀態(tài),此接口不會進行任何操作

mqtt destory (mqtt銷毀客戶端)
銷毀mqtt客戶端,釋放mqtt客戶端申請的所有資源。

銷毀mqtt客戶端因為安全問題,設置為異步操作,當接收到 RyanMqttEventDestoryBefore 事件后才真正開始銷毀。真正開始銷毀速度非???!就只是釋放資源。
至于最多要多長時間才可以銷毀?如果網(wǎng)絡層移植的沒有問題,最長時間為初始化config里的recvTimeout

注:客戶端需要初始化后的才可以被銷毀,否則會忽視

1.jpg

mqtt pub (mqtt發(fā)布消息)
根據(jù)命令提示,需要傳入 主題、消息等級、發(fā)送內容、發(fā)送條數(shù)、間隔時間(可以為0)
這里我們使用 mqttx工具來做上位機

使用命令:mqtt pub testup 2 hello 10 0

1.jpg

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

    關注

    6030

    文章

    44491

    瀏覽量

    632008
  • STM32
    +關注

    關注

    2264

    文章

    10854

    瀏覽量

    354308
  • 硬件設計
    +關注

    關注

    18

    文章

    394

    瀏覽量

    44517
  • 代碼
    +關注

    關注

    30

    文章

    4723

    瀏覽量

    68237
  • 上位機
    +關注

    關注

    27

    文章

    930

    瀏覽量

    54696
  • 回調函數(shù)

    關注

    0

    文章

    87

    瀏覽量

    11529
  • LwIP協(xié)議棧

    關注

    0

    文章

    19

    瀏覽量

    7330
  • RT-Thread
    +關注

    關注

    31

    文章

    1261

    瀏覽量

    39840
  • STM32F401
    +關注

    關注

    1

    文章

    16

    瀏覽量

    10458
收藏 人收藏

    評論

    相關推薦

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

    先測試 “$” 通配符,”$”比較特殊,應用不能使用”$”開頭的系統(tǒng)主題!
    的頭像 發(fā)表于 09-28 10:24 ?1060次閱讀
    <b class='flag-5'>RyanMqtt</b>使用<b class='flag-5'>介紹</b>和<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>(2)

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

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

    RyanMqtt在間隔1s發(fā)送消息時常就報錯RyanSocketFailedError

    使用RyanMqtt庫以及例子,在間隔1s發(fā)送消息時常就報錯RyanSocketFailedError,然后就進入重連機制
    發(fā)表于 08-04 16:48

    excel vba代碼 示例講解

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

    MSP430x11x1,MSP430F21x1 示例代碼

    MSP430x11x1,MSP430F21x1 示例代碼
    發(fā)表于 05-03 10:48 ?9次下載
    MSP430x11x<b class='flag-5'>1</b>,MSP430F21x<b class='flag-5'>1</b> <b class='flag-5'>示例</b><b class='flag-5'>代碼</b>

    python代碼示例之基于Python的日歷api調用代碼實例

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

    ESP-NOW技術的介紹和使用方式及示例代碼資料免費下載

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

    Arduino雨滴傳感器的使用示例代碼免費下載

    本文檔的主要內容詳細介紹的是Arduino雨滴傳感器的使用示例代碼免費下載。
    發(fā)表于 03-27 11:39 ?43次下載
    Arduino雨滴傳感器的使用<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>免費下載

    機器學習的一些代碼示例合集

    本文檔的主要內容詳細介紹的是機器學習的一些代碼示例合集。
    發(fā)表于 04-29 08:00 ?1次下載
    機器學習的一些<b class='flag-5'>代碼</b><b class='flag-5'>示例</b>合集

    AD593X代碼示例

    AD593X代碼示例
    發(fā)表于 03-23 08:18 ?14次下載
    AD593X<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>

    華為游戲服務示例代碼教程案例

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

    基于keil的AD7366示例代碼

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

    安全驅動示例代碼和實現(xiàn)

    示例代碼獲取和集成 本示例中的驅動只實現(xiàn)了對內存的讀寫操作,并提供了測試使用的TA和CA。 讀者可使用如下指令從GitHub上獲取到示例代碼
    的頭像 發(fā)表于 10-30 16:07 ?593次閱讀
    安全驅動<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>和實現(xiàn)

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

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