2-STM32F103+EC200(移遠4G Cat1)遠端升級篇(自建物聯網平臺)-STM32通過EC200使用http或https下載程式檔案升級程式(APP通過MQTT控制微控制器更新)
阿新 • • 發佈:2022-03-17
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/EC200/myota.html" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
說明
前面章節是微控制器主動訪問升級,這節使用Android軟體控制更新微控制器程式!
注意哈,只是在原先的基礎上讓APP把韌體地址發給裝置,而不是裝置主動獲取了;
其實就是遠端升級和MQTT的結合;
整體升級流程如下:(APP和裝置通過MQTT通訊)
1,使用者在APP上點選 "韌體升級" 按鈕, APP使用MQTT傳送: {"data":"updata","cmd":"DeviceInfo"} //詢問裝置韌體資訊
2,裝置通過MQTT收到該訊息以後,傳送 {"data":"updata","cmd":"DeviceInfo","DeviceModel":"STM32EC200BKAPP","FirmwareVersion":"0.0.0"}
(STM32EC200BKAPP是裝置的型號; 0.0.0是裝置當前的韌體版本)
3,APP收到以上訊息以後,根據裝置型號使用http請求雲端記錄的韌體資訊檔案(info.txt)
提示:info.txt 存放的位置都會固定的哈; http://ota/hardware/裝置型號/info.txt
4,APP把info.txt裡面的韌體版本和裝置當前的進行對比, 如果不一致, 彈窗提示
對話方塊裡面寫的更新內容是 info.txt裡面的 -----------"info":"1.解決了部分BUG 2.優化了部分程式"
使用者點選確認以後就把info.txt裡面的韌體版本和下載地址傳送給裝置
{"data":"updata","cmd":"start","version":"0.0.1","url":"http://mnif.cn/ota/hardware/STM32EC200BK/user_crc.bin"}
5,裝置收到更新的命令以後,儲存起來url, 並給APP傳送開始升級 {"data":"updata","cmd":"start"} ,然後開始重啟升級
6,APP收到 {"data":"updata","cmd":"start"} 以後, 彈窗提示裝置正在升級,
同時開始每隔1S通過MQTT傳送查詢裝置版本指令 {"data":"updata","cmd":"version"}
7,裝置升級完了以後, 正常執行,裝置就會通過MQTT收到APP的查詢指令, 然後把當前的裝置韌體版本傳送給APP
{"data":"updata","cmd":"version","FirmwareVersion":"0.0.1"}
8,最後APP提示升級完成
開始測試
1,GPRS模組和底板安裝說明
微控制器通過串列埠2和GPRS模組通訊; 微控制器PA8引腳作為復位模組使用
(微控制器)PA2 ---- (EC200)RX;
(微控制器)PA3 ---- (EC200)TX;
(微控制器)PA8 ---- (EC200)RST
2.使用下載器下載BootLoader程式
使用微控制器串列埠1列印串列埠日誌(115200)
2.下載使用者程式到開發板
3.顯示連線上MQTT伺服器說明正確執行
4.安裝APP
6.手機APP安裝包位置
7.點選APP右上方的選單欄,選擇 掃一掃
8.掃描模組上面的二維碼
9.掃描成功以後將會在主頁面新增一個裝置
注:顯示的內容為模組的IMEI號
10.點選顯示的裝置,進入裝置控制頁面
11.點選右上角選單,選擇韌體升級
12.點選確認
13,更新完成之後
14,再次點選選單的韌體升級會提示
應用到自己的伺服器
1,開啟使用者程式(mcu_project)的tcp_mqtt.c檔案, 修改為自己的MQTT伺服器
2,確定好程式檔案在伺服器的路徑
關於本人伺服器資料夾解釋:(自己隨意就好,最後的資料夾命名使用產品的型號)
html:網站根目錄
ota: ota升級
hardware : 硬體程式
STM32EC200BK: 作為產品的型號(根據自己的產品型號修改)
我把韌體放到了裡面那麼韌體程式下載地址為:
http://伺服器IP地址/ota/hardware/STM32EC200BK/user_crc.bin
那麼韌體資訊的下載地址為:
http://伺服器IP地址/ota/hardware/STM32EC200BK/info.txt
3.修改 使用者程式(mcu_project) 的IAP.C檔案
提示:我把它們儲存在程式bin檔案的1024位元組倍數的位置是為了BootLoader下載的時候便於提取這些資料;
1.產品型號(我設定的為STM32EC200BK)
2.修改韌體程式版本(可隨意指定,我設定的為0.0.2)
3.修改記錄雲端韌體資訊檔案下載地址(我的為:http://mnif.cn/ota/hardware/STM32EC200BK/info.txt)
4.修改BootLoader程式 的 IAP.c (設定下產品型號和預設的韌體程式下載地址)
注意:BootLoader裡面的產品型號要和使用者裡面的一樣!!!!
BootLoader程式下載的時候會判斷這個型號一不一致
5.編譯使用者程式(mcu_project)
會在工程目錄的bin資料夾生成 user.bin檔案
6.開啟OTA Tools上位機軟體
7.按照紅框選擇配置
9.選擇使用者程式生成的 bin檔案
10.點選 生成韌體
11.將在user.bin目錄生成user_crc.bin檔案
12.把生成的user_crc.bin檔案拷貝到伺服器
13.還差一個info.txt檔案
我準備了一個模板
14.修改版本號(和使用者程式裡面設定的一樣)
16.修改韌體程式下載地址(和伺服器上面的保持一致)
17.最後的提示資訊是APP控制升級時提示的資訊,可以自己修改
18.把info.txt檔案也拷貝到伺服器
19.使用android studio 開啟 android工程(英文目錄才可以開啟)
20.修改自己的MQTT伺服器
21.根據自己的web伺服器修改(這個地方是獲取伺服器上面的 info.txt檔案)
22.全部修改完成以後,重新下載微控制器程式, 重新安裝APP,按照前面的測試步驟測試即可
注意哈:使用者程式修改個和伺服器上不一樣的版本哈.
升級流程說明
1,APP上點選韌體升級按鈕
2,微控制器收到以後回覆
3,APP收到回覆以後根據裝置型號獲取雲端韌體資訊檔案
使用者點選是, 傳送升級命令給裝置
4,微控制器收到以後,儲存升級地址, 回覆給APP, 然後寫入升級標誌,重啟
微控制器程式其實和咱前面的一樣,只不過不是自己主動獲取的升級地址
重啟之後就在BootLoader裡面升級哈,和前面的一樣,就不多說了
5,APP收到裝置開始升級
6,微控制器升級完成以後,收到APP的詢問韌體版本命令, 回覆韌體版本給APP
7,APP收到韌體版本,和之前記錄的雲端韌體版本作對比. 一樣就提示升級成功