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

原文地址:https://www.cnblogs.com/yangfengwu/p/13591513.html