測試環(huán)境:stm32F401RCT6、RT-Thread版本: v4.1.0、RT-Thread Studio版本: 2.2.6、網絡硬件使用ec800m移植at_socket使用sal框架。
1、添加網絡硬件
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測試例子
網絡硬件必須要能連接到網絡,否則mqtt沒有任何意義
編譯燒錄后在串口終端輸入 “help” / table鍵,打印shell命令信息,查看是否有mqtt命令,如下圖所示。
注:沒有mqtt命令的請查看RyanMqtt軟件包是否開啟了msh示例
接著我們輸入 “mqtt” / “mqtt help” 命令,打印信息如下圖所示
可以看到msh示例程序給出的部分mqtt功能命令,左側為mqtt示例命令,中間為命令介紹,右側為需要傳遞的參數。
接下來我們依次試試每個命令的功能。
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),因為我們還沒有調用連接函數,mqtt客戶端還沒有被初始化,所以為無效狀態(tài)
mqtt connect (mqtt連接服務器)
連接mqtt服務器,可以看到參數為null。連接服務器的配置信息在RyanMqttTest.c文件的頭部,如下所示
修改下面配置信息來連接你的mqtt服務器,”broker.emqx.io” 為emqx的開放mqtt服務器。
注意:mqtt客戶端id必須唯一,請務必進行修改!
讓我們嘗試一下connect
可以看到打印了一條 “mqtt連接成功回調” 。為什么會打印呢? 這我們就要看看mqtt connect命令做了什么?
首先我們要找到cmdTab,這里存放了示例的所有命令。
我們點擊connect示例對應的函數 “MqttConnect”秘密就發(fā)生在mqttConfig的回調函數和注冊事件中。我們在注冊事件回調中選擇了所有事件,其中就包括了mqtt連接成功事件。如下圖所示
當mqtt連接成功時就會調用mqttConfig中的mqttEventHandle函數指針。在mqttEventHandle內部我們打印了一條 “mqtt連接成功回調”
回調函數內部
可注冊的回調事件定義為
mqtt disc (mqtt斷開連接服務器)
主動斷開mqtt服務器的連接,使用效果如下,回調函數中打印了 “mqtt斷開連接回調”
圖中 “204” 為斷開連接事件的eventData,可查看可注冊的回調事件定義對于eventData的定義。
注:為什么斷開連接后會自動重連呢? 我們在調用connect示例的時候使能了 “自動重連” 并定義了重連時間。
mqtt reconnect (mqtt斷開連接時重新連接服務器)
當我們沒有使能 “自動重連” 時,我們可以手動調用 RyanMqttReconnect 函數來進行重連
注:如果mqtt客戶端不為 RyanMqttDisconnectState 狀態(tài),此接口不會進行任何操作
mqtt destory (mqtt銷毀客戶端)
銷毀mqtt客戶端,釋放mqtt客戶端申請的所有資源。
銷毀mqtt客戶端因為安全問題,設置為異步操作,當接收到 RyanMqttEventDestoryBefore 事件后才真正開始銷毀。真正開始銷毀速度非???!就只是釋放資源。
至于最多要多長時間才可以銷毀?如果網絡層移植的沒有問題,最長時間為初始化config里的recvTimeout
注:客戶端需要初始化后的才可以被銷毀,否則會忽視
mqtt pub (mqtt發(fā)布消息)
根據命令提示,需要傳入 主題、消息等級、發(fā)送內容、發(fā)送條數、間隔時間(可以為0)
這里我們使用 mqttx工具來做上位機
使用命令:mqtt pub testup 2 hello 10 0
-
單片機
+關注
關注
6037文章
44562瀏覽量
635823 -
STM32
+關注
關注
2270文章
10904瀏覽量
356305 -
硬件設計
+關注
關注
18文章
397瀏覽量
44578 -
代碼
+關注
關注
30文章
4791瀏覽量
68677 -
上位機
+關注
關注
27文章
942瀏覽量
54838 -
回調函數
+關注
關注
0文章
87瀏覽量
11573 -
LwIP協議棧
+關注
關注
0文章
19瀏覽量
7374 -
RT-Thread
+關注
關注
31文章
1293瀏覽量
40190 -
STM32F401
+關注
關注
1文章
16瀏覽量
10499
發(fā)布評論請先 登錄
相關推薦
評論