<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ESA2GJK1DH1K_B/" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
前言
這節說明一下如何使用阿里雲物聯網平台的OTA遠程升級STM32程序-基於ESP8266
用戶必須已經學習完了基本控制方案里面的阿里雲物聯網平台教程
和遠程升級方案里面的自建服務器實現遠程升級的教程!
阿里雲物聯網平台是通過MQTT獲取升級固件的地址信息,
其實和咱自建服務器里面的使用APP/微信小程序控制單片機升級是一樣的套路!
只不過咱是把程序文件放到物聯網平台服務器上而已.
提示:咱放到雲平台上面的固件也是和自建服務器里面的一樣添加完CRC校驗的固件,
咱整個程序其實只修改了用戶程序里面獲取固件信息的方式而已!
升級概述
1,實現升級是使用的基礎通信里面的Topic
阿里雲介紹文檔:
https://help.aliyun.com/document_detail/89307.html?spm=a2c4g.11186623.6.712.2409429dNoQXsh
/ota/device/inform/a1m7er1nJbQ/${deviceName}
設備通過這個主題上報自己的 版本號
格式: {"id":"0000","params":{"version": "0.0.1"}}
/ota/device/upgrade/a1m7er1nJbQ/${deviceName}
設備需要訂閱這個主題,服務器會通過這個主題下發固件信息
size是固件大小; version是服務器固件版本; url是固件下載地址
{ "code": "1000", "data": { "size": 432945, "version": "2.0.0", "isDiff": 1, "url": "https://iotx-ota-pre.oss-cn-shanghai.aliyuncs.com/nopoll_0.4.4.tar.gz?Expires=1502955804&OSSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Signature=XfgJu7P6DWWejstKJgXJEH0qAKU%3D&security-token=CAISuQJ1q6Ft5B2yfSjIpK6MGsyN1Jx5jo6mVnfBglIPTvlvt5D50Tz2IHtIf3NpAusdsv03nWxT7v4flqFyTINVAEvYZJOPKGrGR0DzDbDasumZsJbo4f%2FMQBqEaXPS2MvVfJ%2BzLrf0ceusbFbpjzJ6xaCAGxypQ12iN%2B%2Fr6%2F5gdc9FcQSkL0B8ZrFsKxBltdUROFbIKP%2BpKWSKuGfLC1dysQcO1wEP4K%2BkkMqH8Uic3h%2Boy%2BgJt8H2PpHhd9NhXuV2WMzn2%2FdtJOiTknxR7ARasaBqhelc4zqA%2FPPlWgAKvkXba7aIoo01fV4jN5JXQfAU8KLO8tRjofHWmojNzBJAAPpYSSy3Rvr7m5efQrrybY1lLO6iZy%2BVio2VSZDxshI5Z3McKARWct06MWV9ABA2TTXXOi40BOxuq%2B3JGoABXC54TOlo7%2F1wTLTsCUqzzeIiXVOK8CfNOkfTucMGHkeYeCdFkm%2FkADhXAnrnGf5a4FbmKMQph2cKsr8y8UfWLC6IzvJsClXTnbJBMeuWIqo5zIynS1pm7gf%2F9N3hVc6%2BEeIk0xfl2tycsUpbL2FoaGk6BAF8hWSWYUXsv59d5Uk%3D", "md5": "93230c3bde425a9d7984a594ac55ea1e", "sign": "93230c3bde425a9d7984a594ac55****", "signMethod": "Md5", "module": "MCU" }, "id": "1507707025", "message": "success" }
/ota/device/progress/a1m7er1nJbQ/${deviceName}
上報更新進度
/ota/device/request/a1m7er1nJbQ/${deviceName}
主動請求雲端固件信息
生成固件程序
1.打開用戶程序
2.根據自己在平台注冊的設備信息修改
注:這節密碼需要自己填上了,因為內存不夠了,所以屏蔽了自動計算密碼的地方.
3.讓WiFi連接自己的路由器
4.修改固件的版本
5.編譯生成bin文件
6.打開OTA Tools.exe軟件生成帶有CRC校驗的固件
在物聯網平台上新增固件
1.設備運維 - 固件升級 - 新增固件
fdg
2-上傳固件
固件名稱:隨意
所屬產品:選擇一個自己在平台上注冊的產品
注:固件版本號要和單片機程序里面的保持一致
3.當前固件會顯示未驗證
阿里雲物聯網平台規定上傳的固件需要先測試驗證
就是用其中的一台設備先跑個流程.
下載單片機程序
1.下載BootLoader程序到單片機
2.用下載器下載用戶程序到單片機
1.修改用戶程序版本為000000
注:我只是為了區分出來各個設備,當我這個設備的版本號是特殊的,我好用這個設備測試
3.選擇擦除使用區的Flash,然后下載
4.確保用戶程序正常運行
5.在平台上點擊驗證固件,待升級的版本號選擇000000
6.選擇咱的那個設備
7.設備升級超時時間根據自己的設備設置
當前我的程序升級過程小於1分鍾.
8.點擊完確定以后,設備會收到服務器通過MQTT發送的更新信息
{"code":"1000","data":{"size":20410,"sign":"8ee365e63505202184af25bc73d8d79e","version":"0.0.1","url":"https://iotx-ota.oss-cn-shanghai.aliyuncs.com/ota/5f0103cd96ad6ac7d12b5492a54b003c/ckevmjb0o00004k8617tle1qq.bin?Expires=1599757056&OSSAccessKeyId=LTAI4G1TuWwSirnbAzUHfL3e&Signature=qokk4wdr78CTsehWDf3aE2T9ye8%3D","signMethod":"Md5","md5":"8ee365e63505202184af25bc73d8d79e"},"id":1599670656831,"message":"success"}
單片機程序提取 size字段,和url字段的內容存到flash里面重啟!執行BootLoader
9.BootLoader獲取程序文件
10,下載完程序重啟
11,執行下載的程序
第一時間上報當前程序版本
12,刷新一下網頁
13,咱現在就用設備驗證好了固件,現在固件可以讓其它設備用了
14,因為我就一個設備,還做為了驗證固件用的,我那天設備的固件版本已經是0.0.1最新
所以這里找不到待升級的設備
15,可以修改下用戶程序的版本為0.0.0
然后重新下載用戶程序,就當做咱的老版本設備.
16,下載完用戶程序,看到上報版本了以后
17,選擇0.0.0的那個版本
其它的選項一看就明白哈,就不說了.
18,設備升級了
19,這樣子,關於阿里雲物聯網平台控制升級的步驟就說完了
其實稍微總結下就是:
使用阿里雲物聯網平台給的關於升級的MQTT的主題
從主題里面獲取升級的信息,提取size,和url
然后存儲到flash里面,然后就交給BootLoader訪問下載了
設備上線以后需要第一時間上報下版本號,然后就好了
雲端提交的固件說明
1.我讓大家提交的是用我寫的OTA工具加上CRC校驗后的固件
細心的用戶會發現,平台提供了默認MD5校驗
我沒選擇用平台提供的MD5,因為我如果用了就需要單片機對整個bin文件
做MD5,我想想還是算了吧!
還是沿用了我自建服務器里面的方式!bin文件自己加CRC校驗位
這樣底層BootLoader不需要改變代碼就可以兼容各大物聯網平台!
在穩定可靠的基礎上,就要傾向於代碼的通用性!
單片機程序說明
1.首先BootLoader程序和自建服務器里面的一模一樣!!就不再多說了
2.用戶程序比較抱歉的事情是由於內存原因屏蔽掉了計算密碼部分
突然想起來一句話:巧婦難為無米之炊
3.程序里面增加了接收/發送升級信息的主題
4.訂閱接收升級消息的主題
連接上平台第一時間上報自己的版本號
5.如果接收到更新相關的消息提取url和size寫入flash
其余的就交給BootLoader程序了
不過阿里雲給的是https鏈接,前半個月還可以用ESP8266的https訪問下載
現在卻不行了,郁悶中.....不過也可以用80端口訪問下載.
所以我把鏈接中的https改為了http