MQTT移植到stm32開發板——使用RT-Thread操作系統

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 控制檯:

    Add_Env_To_Right-click_Menu

打開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:

    mqtt-rtt-001

  • 第二步:更新軟件包列表,隨着 package 系統的不斷壯大,會有越來越多的軟件包加入進來,所以本地看到 menuconfig 中的軟件包列表可能會與服務器 不同步 。在env環境中使用 pkgs --upgrade 命令即可解決該問題,這個命令不僅會對本地的包信息進行更新同步,還會對 env 的功能腳本進行升級,建議定期使用,或者在 env\packages\packages 目錄下手動更新,然後切換最新分支即可。

    mqtt-rtt-002

    mqtt-rtt-003

移植MQTT客戶端

  • 第一步:在env環境中運行 menuconfig 命令進入可視化配置界面,在Hardware Drivers Config → Onboard Peripheral Drivers路徑下使能以太網驅動:

    mqtt-rtt-004

  • 第二步:在RT-Thread Components → Network → Network interface device路徑下使能使能網絡接口:

    mqtt-rtt-005

  • 第三步:在RT-Thread online packages → IoT - internet of things路徑下選擇kawaii-mqtt軟件包:

    mqtt-rtt-006

  • 第四步:按下回車,進入kawaii-mqtt軟件包的配置頁面,可以隨意配置信息,我們勾選 enable test 即可,這一步操作會將測試代碼添加到工程中:

    mqtt-rtt-007

  • 第五步:在退出的時候會進行下載軟件包,將kawaii-mqtt軟件包下載到本地,並且將其添加到工程中,然後你可以通過scons --target=mdk5命令生成keil工程,當然也可以不用。

    mqtt-rtt-008

  • 第六步:打開keil工程,因爲我們勾選了 enable test ,此時工程中存在測試代碼,我們需要間本身的main.c文件的例程註釋掉,然後再進行編譯,沒有問題。

    mqtt-rtt-009

  • 第七步:下載到開發板上,觀察現象,可以看到完全根據代碼運行。

編寫自己的代碼:

MQTT提供在線配置工具,可以使用工具生成相應的代碼:https://jiejietop.gitee.io/mqtt/index.html

在線代碼生成工具

與此同時該工具頁面還包含了mqttclient的API接口介紹及示例,通過它們就能知道這個工具應該配置了什麼內容。

mqtt-tool-api

連接參數配置

首先連接參數代表着MQTT客戶端應該如何連接到服務器,建立MQTT會話應該是如何配置,這些就是連接參數

  • 與服務器相關的參數有:

    • 服務器地址。

    • 服務器端口號。

    • 服務器CA證書(如果有TLS加密的話)。

  • 建立MQTT連接需要的參數有:

    • MQTT協議版本。

    • 用戶名。

    • 密碼。

    • 客戶端ID。

    • 配置是否清除會話,默認清除會話。

    • 心跳時間間隔,默認是50秒。

    • 是否使用遺囑。

    • 是否保留遺囑消息。

    • 設置遺囑主題。

    • 設置遺囑消息的服務質量等級。

    • 設置遺囑消息的內容。

  • 與與客戶端資源相關的配置:

    • 設置命令的超時,它主要是用於socket讀寫超時,默認是5000毫秒。

    • 讀緩衝區大小,默認是1024。

    • 寫緩衝區大小,默認是1024。

mqtt-tool-connect

訂閱主題相關的代碼配置

此配置用於配置MQTT客戶端訂閱的主題信息,指定訂閱主題名字,服務質量等級以及當收到來自這個主題消息時候的回調處理函數(可以爲NULL),mqttclient代碼生成工具支持動態添加多個主題,滿足絕大部分的日常需求。

mqtt-tool-sub

發佈消息相關的代碼配置

mqttclient代碼生成工具支持動態添向多個主題發佈消息,滿足絕大部分的日常需求。只需指定要發佈消息的主題名字、服務質量等級、以及發佈的消息內容即可。

mqtt-tool-pub

生成代碼

在配置完成後,點擊下方的生成代碼按鈕,即可生成對應的配置代碼。當然,你也可以點擊導入模板,使用模板默認的配置來生成代碼。

mqtt-tool-code

直接將生成的代碼複製到你的main.c文件即可編譯運行。

導出獨立的MQTT客戶端工程

在env中,可以通過scons --dist命令來導出工程代碼,形成一個獨立的demo,因爲處於rt-thread工程中,整個代碼實在是太龐大了,我們只需要導出我們用到的代碼即可:

mqtt-rtt-010

mqtt-rtt-011

整個工程就移植完畢。

源代碼獲取

可以關注微信公衆號:
在這裏插入圖片描述
在後臺回覆“24”即可獲取源代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章