文章目錄
mqttclient
一個高性能、高穩定性的跨平臺MQTT客戶端
一個高性能、高穩定性的跨平臺MQTT客戶端,基於socket API之上開發,可以在嵌入式設備(FreeRTOS/LiteOS/RT-Thread/TencentOS tiny)、Linux、Windows、Mac上使用,擁有非常簡潔的API接口,以極少的資源實現QOS2的服務質量,並且無縫銜接了mbedtls加密庫。開源地址:https://github.com/jiejieTop/mqttclient
ENV介紹
env 是 RT-Thread 推出的開發輔助工具,針對基於 RT-Thread 操作系統的項目工程,提供編譯構建環境、圖形化系統配置及軟件包管理功能。其內置的 menuconfig 提供了簡單易用的配置剪裁工具,可對內核、組件和軟件包進行自由裁剪,使系統以搭積木的方式進行構建。
env 工具包含了 RT-Thread 源代碼開發編譯環境和軟件包管理系統。
env工具下載安裝
從 RT-Thread 官網下載 env 工具。地址:https://www.rt-thread.org/page/download.html。
在電腦上裝好 git,git 的下載地址爲 https://git-scm.com/downloads ,根據嚮導正確安裝 git,並將 git添加到系統環境變量。軟件包管理功能需要 git 的支持。
注意在工作環境中,所有的路徑都不可以有中文字符或者空格。
通過env移植MQTT客戶端
打開 env 控制檯
RT-Thread 軟件包環境主要以命令行控制檯爲主,同時以字符型界面來進行輔助,使得儘量減少修改配置文件的方式即可搭建好 RT-Thread 開發環境的方式。
打開env控制檯有兩種方式:
-
方法一:點擊 env 目錄下可執行文件進入 env 目錄,可以運行本目錄下的 env.exe ,如果打開失敗可以嘗試使用 env.bat 。
-
方法二:在文件夾中通過右鍵菜單打開 env 控制檯env ,可以根據下圖的步驟操作,就可以在任意文件夾下通過右鍵菜單來啓動 env 控制檯:
打開env並更新軟件包列表
scons 是 RT-Thread 使用的編譯構建工具,可以使用 scons 相關命令來編譯 RT-Thread 。
-
第一步:下載rt-thread的源碼,可以在github或者gitee下載:
-
github
git clone https://github.com/RT-Thread/rt-thread.git
-
gitee
git clone https://gitee.com/RT-Thread/rt-thread.git
-
-
第二步:切換到 bsp 根目錄:打開控制檯後,可以在命令行模式下使用 cd 命令切換到你想要配置的 bsp 根目錄中。例如工程目錄爲 H:\jiejieTop\rt-thread\bsp\stm32\stm32f429-fire-challenger,或者直接到這個目錄下右鍵打開env:
-
第二步:更新軟件包列表,隨着 package 系統的不斷壯大,會有越來越多的軟件包加入進來,所以本地看到 menuconfig 中的軟件包列表可能會與服務器 不同步 。在env環境中使用 pkgs --upgrade 命令即可解決該問題,這個命令不僅會對本地的包信息進行更新同步,還會對 env 的功能腳本進行升級,建議定期使用,或者在 env\packages\packages 目錄下手動更新,然後切換最新分支即可。
移植MQTT客戶端
-
第一步:在env環境中運行 menuconfig 命令進入可視化配置界面,在Hardware Drivers Config → Onboard Peripheral Drivers路徑下使能以太網驅動:
-
第二步:在RT-Thread Components → Network → Network interface device路徑下使能使能網絡接口:
-
第三步:在RT-Thread online packages → IoT - internet of things路徑下選擇kawaii-mqtt軟件包:
-
第四步:按下回車,進入kawaii-mqtt軟件包的配置頁面,可以隨意配置信息,我們勾選 enable test 即可,這一步操作會將測試代碼添加到工程中:
-
第五步:在退出的時候會進行下載軟件包,將kawaii-mqtt軟件包下載到本地,並且將其添加到工程中,然後你可以通過scons --target=mdk5命令生成keil工程,當然也可以不用。
-
第六步:打開keil工程,因爲我們勾選了 enable test ,此時工程中存在測試代碼,我們需要間本身的main.c文件的例程註釋掉,然後再進行編譯,沒有問題。
-
第七步:下載到開發板上,觀察現象,可以看到完全根據代碼運行。
編寫自己的代碼:
MQTT提供在線配置工具,可以使用工具生成相應的代碼:https://jiejietop.gitee.io/mqtt/index.html
與此同時該工具頁面還包含了mqttclient的API接口介紹及示例,通過它們就能知道這個工具應該配置了什麼內容。
連接參數配置
首先連接參數代表着MQTT客戶端應該如何連接到服務器,建立MQTT會話應該是如何配置,這些就是連接參數
-
與服務器相關的參數有:
-
服務器地址。
-
服務器端口號。
-
服務器CA證書(如果有TLS加密的話)。
-
-
建立MQTT連接需要的參數有:
-
MQTT協議版本。
-
用戶名。
-
密碼。
-
客戶端ID。
-
配置是否清除會話,默認清除會話。
-
心跳時間間隔,默認是50秒。
-
是否使用遺囑。
-
是否保留遺囑消息。
-
設置遺囑主題。
-
設置遺囑消息的服務質量等級。
-
設置遺囑消息的內容。
-
-
與與客戶端資源相關的配置:
-
設置命令的超時,它主要是用於socket讀寫超時,默認是5000毫秒。
-
讀緩衝區大小,默認是1024。
-
寫緩衝區大小,默認是1024。
-
訂閱主題相關的代碼配置
此配置用於配置MQTT客戶端訂閱的主題信息,指定訂閱主題名字,服務質量等級以及當收到來自這個主題消息時候的回調處理函數(可以爲NULL),mqttclient代碼生成工具支持動態添加多個主題,滿足絕大部分的日常需求。
發佈消息相關的代碼配置
mqttclient代碼生成工具支持動態添向多個主題發佈消息,滿足絕大部分的日常需求。只需指定要發佈消息的主題名字、服務質量等級、以及發佈的消息內容即可。
生成代碼
在配置完成後,點擊下方的生成代碼按鈕,即可生成對應的配置代碼。當然,你也可以點擊導入模板,使用模板默認的配置來生成代碼。
直接將生成的代碼複製到你的main.c文件即可編譯運行。
導出獨立的MQTT客戶端工程
在env中,可以通過scons --dist命令來導出工程代碼,形成一個獨立的demo,因爲處於rt-thread工程中,整個代碼實在是太龐大了,我們只需要導出我們用到的代碼即可:
整個工程就移植完畢。
源代碼獲取
可以關注微信公衆號:
在後臺回覆“24”即可獲取源代碼