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