001-使用阿里雲物聯網平台 OTA 遠程升級STM32程序-基於ESP8266


<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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM