ESA2GJK1DH1K升級篇: 測試STM32遠程乒乓升級,基於(Wi-Fi模塊AT指令TCP透傳方式),MQTT通信控制升級

  • 2019 年 11 月 14 日
  • 筆記

實現功能概要

  前面的版本都是,定時訪問雲端的程序版本,如果版本不一致,然後下載最新的升級文件,實現升級.

  這一節,在用戶程序裏面加入MQTT通信,執行用戶程序的時候,通過接收MQTT的升級命令實現升級

  注意:BootLoader程序還是用以前的程序.

  一開始設計這個升級篇的時候,我就規定好了大的框架

  BootLoader只是負責升級,其它一概不管

  用戶程序只是寫入升級標誌,然後重啟,所有的升級步驟全部交給BootLoader!

  協議:

一,MQTT上位機通過MQTT發送獲取設備信息指令  {"data":"updata","cmd":"DeviceInfo"}    //設備接收到回復  {"data":"updata","model":"STM32_AT8266","version":"1.0.2"}//假設現在的型號是STM32_AT8266,當前設備硬件版本是1.0.2      二,MQTT上位機根據型號使用http訪問雲端存放的記錄更新信息的文件                                        "型號"  列如:"http://47.92.31.46/hardware/"+STM32_AT8266+"/"+"updatainfo.txt"    假設updatainfo.txt文件信息是  {"version":"1.0.4","details":"1,優化了部分BUG;2,測試升級;3,支持升級STM32程序;4,修改XXXBUG"}  注:版本號最大設置為20位元組    三,MQTT上位機對比版本號,如果不一致,則發送以下指令     注:測試時可直接發送此指令  {"data":"updata","cmd":"start"}      //設備接收到回復  {"data":"updata","status":"start"}      四,設備連接上MQTT發送的第一條消息為  "{"data":"status","status":"online","UpdataStatus":"UpdataSuccess","DeviceVersion":"1.0.4"}"    UpdataSuccess               更新成功  RunAppErr                   上次更新的程序沒有運行起來  NoUpdata                    沒有更新  DataAddressError            更新的數據有錯誤  DataOverflow                數據溢出  DataDownloadTimeout         下載超時  MainTimeout                 更新超時  FlashWriteErr               寫Flash失敗  FlashEraseErr               擦除Flash失敗  VersionLenErr               版本號長度 等於0 或者大於20  VersionAlike                版本號一致,是最新程序,無需更新        ----------------------------------------------------------------  控制指令,查詢繼電器狀態  {"data":"switch","bit":"1","status":"-1"}    設備回復  {"data":"switch","bit":"1","status":"1"}  或者  {"data":"switch","bit":"1","status":"0"}      六,控制指令,控制繼電器吸合  {"data":"switch","bit":"1","status":"1"}  設備回復 {"data":"switch","bit":"1","status":"1"}        七,控制指令,控制繼電器斷開  {"data":"switch","bit":"1","status":"0"}  設備回復 {"data":"switch","bit":"1","status":"0"}

測試

製作完代碼,哈,

詳細的代碼製作步驟(這節代碼是如何來的)

  拷貝使用Wi-Fi模塊定時升級的 BootLoader程序

修改BootLoader

  為了和以前升級程序區別開來,取一個新名字  STM32_MQTT_AT8266

  BootLoader程序只需要修改這個就可以,修改完了.

下面看用戶程序

  由於在用戶程序裏面,MQTT處理程序是比較多的,升級處理程序就一點點

  為了移植的方便快捷一點,咱呢,就在實現MQTT的程序上加上升級處理程序

  一,拷貝基礎篇的Wi-Fi模塊使用AT指令實現MQTT通信的單片機程序源碼,到咱現在的目錄

拷貝定時訪問升級的用戶程序的IAP文件 stmflash文件到現在的用戶程序工程裏面

把文件添加進來