測試環(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源)
添加后如下圖所示,直接編譯然后燒錄
3、使用msh測試例子
網(wǎng)絡硬件必須要能連接到網(wǎng)絡,否則mqtt沒有任何意義
編譯燒錄后在串口終端輸入 “help” / table鍵,打印shell命令信息,查看是否有mqtt命令,如下圖所示。
注:沒有mqtt命令的請查看RyanMqtt軟件包是否開啟了msh示例
接著我們輸入 “mqtt” / “mqtt help” 命令,打印信息如下圖所示
可以看到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)
mqtt connect (mqtt連接服務器)
連接mqtt服務器,可以看到參數(shù)為null。連接服務器的配置信息在RyanMqttTest.c文件的頭部,如下所示
修改下面配置信息來連接你的mqtt服務器,”broker.emqx.io” 為emqx的開放mqtt服務器。
注意:mqtt客戶端id必須唯一,請務必進行修改!
讓我們嘗試一下connect
可以看到打印了一條 “mqtt連接成功回調” 。為什么會打印呢? 這我們就要看看mqtt connect命令做了什么?
首先我們要找到cmdTab,這里存放了示例的所有命令。
我們點擊connect示例對應的函數(shù) “MqttConnect”秘密就發(fā)生在mqttConfig的回調函數(shù)和注冊事件中。我們在注冊事件回調中選擇了所有事件,其中就包括了mqtt連接成功事件。如下圖所示
當mqtt連接成功時就會調用mqttConfig中的mqttEventHandle函數(shù)指針。在mqttEventHandle內部我們打印了一條 “mqtt連接成功回調”
回調函數(shù)內部
可注冊的回調事件定義為
mqtt disc (mqtt斷開連接服務器)
主動斷開mqtt服務器的連接,使用效果如下,回調函數(shù)中打印了 “mqtt斷開連接回調”
圖中 “204” 為斷開連接事件的eventData,可查看可注冊的回調事件定義對于eventData的定義。
注:為什么斷開連接后會自動重連呢? 我們在調用connect示例的時候使能了 “自動重連” 并定義了重連時間。
mqtt reconnect (mqtt斷開連接時重新連接服務器)
當我們沒有使能 “自動重連” 時,我們可以手動調用 RyanMqttReconnect 函數(shù)來進行重連
注:如果mqtt客戶端不為 RyanMqttDisconnectState 狀態(tài),此接口不會進行任何操作
mqtt destory (mqtt銷毀客戶端)
銷毀mqtt客戶端,釋放mqtt客戶端申請的所有資源。
銷毀mqtt客戶端因為安全問題,設置為異步操作,當接收到 RyanMqttEventDestoryBefore 事件后才真正開始銷毀。真正開始銷毀速度非???!就只是釋放資源。
至于最多要多長時間才可以銷毀?如果網(wǎng)絡層移植的沒有問題,最長時間為初始化config里的recvTimeout
注:客戶端需要初始化后的才可以被銷毀,否則會忽視
mqtt pub (mqtt發(fā)布消息)
根據(jù)命令提示,需要傳入 主題、消息等級、發(fā)送內容、發(fā)送條數(shù)、間隔時間(可以為0)
這里我們使用 mqttx工具來做上位機
使用命令:mqtt pub testup 2 hello 10 0
-
單片機
+關注
關注
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
發(fā)布評論請先 登錄
相關推薦
評論