1. 程式人生 > 其它 >2-STM32F103+EC200(移遠4G Cat1)遠端升級篇(自建物聯網平臺)-STM32通過EC200使用http或https下載程式檔案升級程式(APP通過MQTT控制微控制器更新)

2-STM32F103+EC200(移遠4G Cat1)遠端升級篇(自建物聯網平臺)-STM32通過EC200使用http或https下載程式檔案升級程式(APP通過MQTT控制微控制器更新)

<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收到韌體版本,和之前記錄的雲端韌體版本作對比. 一樣就提示升級成功