這節只是簡短介紹,詳細請日後看具體文章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