1-STM32物聯網開發WIFI(ESP8266)+GPRS(Air202)系統方案升級篇(方案總攬)

這節只是簡短介紹,詳細請日後看具體文章html

 

單片機全部BUG ,及其修正服務器

1,執行用戶程序錯誤時沒有正常切換執行程序,忘記了增長 RunUser = GetRunUser();網絡

    

 

 

 

 

 一,遠程升級WIFI模塊或者GPRS模塊內部程序lua

Wi-Fi或者GPRS默認http訪問Aupdata0.lua~Aupdata9.lua 文件  而後下載運行url

協議以下:spa

設備訂閱的主題

"user/設備MAC地址"      列如:  "user/dc:4f:22:11:5d:33"

設備發佈的主題

"device/設備MAC地址"    列如:  "device/dc:4f:22:11:5d:33"



一,上位機獲取設備型號
//獲取設備型號
{"data":"updata","cmd":"model"}

//設備回覆
{"data":"updata","status":"model","model":"wifi1"}//假設如今的型號是WIFI1


二,上位機根據型號http訪問更新的信息
                                    "型號"
列如:"http://47.92.31.46/hardware/"+wifi1+"/"+"updatainfo.txt"


三,上位機把雲平臺的更新信息按照如下格式發給設備
/********************************************
上位機發送給設備平臺的版本號和更新文件的位置(設備先記錄下來)
{"data":"updata","cmd":"info","version":"1.0.1","url":"http://47.92.31.46/hardware/wifi1"}


設備接收到信息對比版本號之後回覆
{"data":"updata","status":"unlike",version:XXXX} 或 {"data":"updata","status":"alike",version:XXXX} //回覆是否是和發給它的版號一致,並回複本身的版本號
*********************************************/


/**********************************
上位機發送給設備升級指令
{"data":"updata","cmd":"start"}    


設備回覆
{"data":"updata","status":"start"} //開始更新
**********************************/



更新過程當中設備發送更新進度

{"data":"updata","status":"starting","percent":"百分比"} 百分比爲數字 


更新完成設備發送
{"data":"updata","status":"finish"}


更新過程當中的錯誤,設備發送
{"data":"updata","status":"error","code","-1"}//HTTP request failed
{"data":"updata","status":"error","code","-2"}//HTTP request data error



更新完成之後用新的版本號替換掉舊的版本號



注:
升級程序文件和關於升級的內容(內容裏面含有版本號)放在雲平臺
APP或者wed或者上位機經過http獲取關於升級的內容

設備經過http獲取升級程序文件

 

 

二,遠程升級STM32單片機程序(在WIFI或者GPRS實現基本的遠程控制基礎上增長的功能)code

APP發送的數據,網絡模塊自動轉發給單片機htm

網絡模塊http訪問單片機程序文件,而後把訪問的數據發給單片機blog

//APP發送獲取設備型號(APP點擊檢查更新的時候)
{"datemcu":"updata","cmd":"model"}

//STM32設備回覆
{"datemcu":"updata","status":"model","model":"STM32U"}//STM32U 設備的型號


二,上位機根據型號http訪問更新的信息
             實際用域名代替           "型號"
列如:"http://47.92.31.46/hardware/"+STM32U+"/"+"updatainfo.txt"


//APP發送給設備平臺的版本號和更新文件的位置,該url由WIFI模塊進行記錄
{"datemcu":"updata","cmd":"info","version":"1.0.1","url":"http://47.92.31.46/hardware/STM32U"}


//STM32回覆是否是和發給它的版號一致,並回複本身的版本號
{"datemcu":"updata","status":"unlike",version:XXXX} 或 {"datemcu":"updata","status":"alike",version:XXXX} 
或者 {"datemcu":"updata","status":"unlike","version":"error"} //單片機接收版本出錯

APP接收到此信息,提示用戶是最新版本,或者提示此次升級的內容,用戶能夠選擇升級

//APP發送給設備升級指令
{"datemcu":"updata","cmd":"start"}


1,單片機運行在IAP程序:(說明沒有更新過)

stm根據本身當前的狀況擦除Flash後回覆
{"datemcu":"updata","status":"start","file":"bin1"} /
{"datemcu":"updata","status":"start","file":"bin2"}

同時置一個標誌位,讓串口下次接受的http數據直接寫入Flash
Wi-Fi接收到該指令,中止MQTT透傳(60S超時),防止多餘的數據寫入串口,
若是檢測到TCP斷開鏈接,容許MQTT透傳

Wi-Fi接收到該指令根據上面的url,
鏈接TCP服務器(http服務器)
連接成功之後http訪問bin1文件或者bin2文件

2,單片機運行在用戶程序:
單片機接收到此命令後寫入一個更新標誌到Flash,復位重啓
而後IAP判斷有這個標誌,先清除這個標誌,而後執行上面的  1,單片機運行在IAP程序

 

 

三,其它版本遠程升級單片機程序get

 

 

 

最重要的是思路和方案,其它的都只是配合.

 

 

板子連接

https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.3e3b1deb80xzYz&id=569295486025

 

http://www.javashuo.com/article/p-xqfrhsml-gm.html

相關文章
相關標籤/搜索