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

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

此步驟不做過(guò)多解釋,是lwip就用lwip,是at設(shè)備就用at_socket。推薦所有平臺(tái)都使用SAL框架(RyanMqtt軟件包會(huì)自動(dòng)使能)。

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

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

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

1.jpg

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

注:沒(méi)有mqtt命令的請(qǐng)查看RyanMqtt軟件包是否開(kāi)啟了msh示例

1.jpg

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

1.jpg

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

接下來(lái)我們依次試試每個(gè)命令的功能。

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

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

讓我們嘗試一下
無(wú)效狀態(tài),因?yàn)槲覀冞€沒(méi)有調(diào)用連接函數(shù),mqtt客戶端還沒(méi)有被初始化,所以為無(wú)效狀態(tài)

1.jpg

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

1.jpg

讓我們嘗試一下connect

1.jpg

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

1.jpg

我們點(diǎn)擊connect示例對(duì)應(yīng)的函數(shù) “MqttConnect”秘密就發(fā)生在mqttConfig的回調(diào)函數(shù)和注冊(cè)事件中。我們?cè)谧?cè)事件回調(diào)中選擇了所有事件,其中就包括了mqtt連接成功事件。如下圖所示
當(dāng)mqtt連接成功時(shí)就會(huì)調(diào)用mqttConfig中的mqttEventHandle函數(shù)指針。在mqttEventHandle內(nèi)部我們打印了一條 “mqtt連接成功回調(diào)”

3.jpg

回調(diào)函數(shù)內(nèi)部

1.jpg

可注冊(cè)的回調(diào)事件定義為

1.jpg

mqtt disc (mqtt斷開(kāi)連接服務(wù)器)
主動(dòng)斷開(kāi)mqtt服務(wù)器的連接,使用效果如下,回調(diào)函數(shù)中打印了 “mqtt斷開(kāi)連接回調(diào)”
圖中 “204” 為斷開(kāi)連接事件的eventData,可查看可注冊(cè)的回調(diào)事件定義對(duì)于eventData的定義。
注:為什么斷開(kāi)連接后會(huì)自動(dòng)重連呢? 我們?cè)谡{(diào)用connect示例的時(shí)候使能了 “自動(dòng)重連” 并定義了重連時(shí)間。

1.jpg

mqtt reconnect (mqtt斷開(kāi)連接時(shí)重新連接服務(wù)器)
當(dāng)我們沒(méi)有使能 “自動(dòng)重連” 時(shí),我們可以手動(dòng)調(diào)用 RyanMqttReconnect 函數(shù)來(lái)進(jìn)行重連
注:如果mqtt客戶端不為 RyanMqttDisconnectState 狀態(tài),此接口不會(huì)進(jìn)行任何操作

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

銷毀mqtt客戶端因?yàn)榘踩珕?wèn)題,設(shè)置為異步操作,當(dāng)接收到 RyanMqttEventDestoryBefore 事件后才真正開(kāi)始銷毀。真正開(kāi)始銷毀速度非???!就只是釋放資源。
至于最多要多長(zhǎng)時(shí)間才可以銷毀?如果網(wǎng)絡(luò)層移植的沒(méi)有問(wèn)題,最長(zhǎng)時(shí)間為初始化config里的recvTimeout

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

1.jpg

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

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

1.jpg

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

    關(guān)注

    6067

    文章

    44960

    瀏覽量

    648773
  • STM32
    +關(guān)注

    關(guān)注

    2291

    文章

    11022

    瀏覽量

    363413
  • 硬件設(shè)計(jì)
    +關(guān)注

    關(guān)注

    18

    文章

    431

    瀏覽量

    45147
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4893

    瀏覽量

    70442
  • 上位機(jī)
    +關(guān)注

    關(guān)注

    27

    文章

    963

    瀏覽量

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

    關(guān)注

    0

    文章

    88

    瀏覽量

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

    關(guān)注

    0

    文章

    19

    瀏覽量

    7642
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1385

    瀏覽量

    41672
  • STM32F401
    +關(guān)注

    關(guān)注

    1

    文章

    16

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

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

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

    RyanMqtt在間隔1s發(fā)送消息時(shí)常就報(bào)錯(cuò)RyanSocketFailedError

    使用RyanMqtt庫(kù)以及例子,在間隔1s發(fā)送消息時(shí)常就報(bào)錯(cuò)RyanSocketFailedError,然后就進(jìn)入重連機(jī)制
    發(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調(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)下載

    本文介紹了樂(lè)鑫自主研發(fā)的ESP-NOW技術(shù),說(shuō)明了使用方式并提供了示例代碼包括了: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)下載

    Arduino雨滴傳感器的使用示例代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是Arduino雨滴傳感器的使用示例代碼免費(fèi)下載。
    發(fā)表于 03-27 11:39 ?43次下載
    Arduino雨滴傳感器的使用<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>

    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次下載

    基于keil的AD7366示例代碼

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

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

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

    LP5891-Q1示例代碼用戶指南

    電子發(fā)燒友網(wǎng)站提供《LP5891-Q1示例代碼用戶指南.pdf》資料免費(fèi)下載
    發(fā)表于 11-12 14:08 ?1次下載
    LP5891-Q<b class='flag-5'>1</b><b class='flag-5'>示例</b><b class='flag-5'>代碼</b>用戶指南

    TPS929xxx-Q1示例代碼

    電子發(fā)燒友網(wǎng)站提供《TPS929xxx-Q1示例代碼.pdf》資料免費(fèi)下載
    發(fā)表于 11-13 14:59 ?2次下載
    TPS929xxx-Q<b class='flag-5'>1</b><b class='flag-5'>示例</b><b class='flag-5'>代碼</b>