2-STM32+ESP8266+Air302程序升级篇(自建物联网平台)-STM32使用Air302通过阿里云物联网平台升级程序(一机一密)

<p><iframe name=ifd src=https://mnifdv.cn/resource/cnblogs/ESA2GJK1DH1K_A/aliyunota.html frameborder=0 scrolling=auto width=100% height=1500></iframe></p>

<iframe frameborder=0 height=1500 name=ifd scrolling=auto src=https://mnifdv.cn/resource/cnblogs/ESA2GJK1DH1K_A/aliyunota.html width=100%></iframe>

 

前言

这节说明一下如何使用阿里云物联网平台的OTA远程升级STM32程序

用户必须已经学习完了基本控制篇里面的阿里云物联网平台教程和看完了(主要是熟悉下流程)自建物联网平台OTA教程.

阿里云物联网平台是通过MQTT获取升级固件的版本,固件大小和下载地址信息.

 

升级概述

1,实现升级是使用的基础通信里面的Topic

阿里云介绍文档:

https://help.aliyun.com/document_detail/85700.html

 

 

 

 

 

 

/ota/device/inform/a1m7er1nJbQ/${deviceName} 

设备通过这个主题上报设备的固件版本号,要求设备在连接上服务器以后第一时间上报.

格式:

 

 

 

 

/ota/device/upgrade/a1m7er1nJbQ/${deviceName}

设备需要订阅这个主题,服务器会通过这个主题下发固件信息

一般在上传新固件以后,在平台上操作以后,平台才会主动下发.

size是固件大小;  version是服务器固件版本;  url是固件下载地址

提示:url虽然给的是https 但是同样可以使用 http 80 端口进行下载, 这个阿里云平台没有强制SSL

复制代码 复制代码 复制代码
{   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}

设备可以使用这个主题上报更新进度, 发布的消息格式看下面

 

 

/sys/a1m7er1nJbQ/${deviceName}/thing/ota/firmware/get

设备可以使用这个主题主动请求云端固件信息, 详细说明看下面

 

 

 

 

 

 

模组连接

NB-IOT模块安装到第三排排母! 模块的5V引脚和底板的5V引脚相连接

单片机都是使用串口2和模组进行通信,  注意去掉ESP8266模组,防止通信冲突.

 

 

开始测试

1.使用下载器下载BootLoader程序

 

 

 

 

使用单片机串口1打印串口日志(115200)

 

 

 

 

 

 

2.打开用户程序

 

3.修改为阿里云的设备参数(根据自己的注册设备修改)

 

 

 

4.修改完成以后,编译下载用户程序

 

5.正常运行

 

 

 

 

 

把升级包上传到服务器

1.修改用户程序(mcu_project)里面的固件版本

注:这个随意,我修改的是0.0.1

 

 

 

 

2.编译下工程

 

 

3.会在工程目录的bin文件夹生成bin文件

 

 

4.打开OTA Tools上位机软件

 

 

5.按照红框选择配置

 

 

6.选择用户程序生成的 bin文件

 

 

 

7.点击 生成固件

 

 

 

8.将在user.bin目录生成user_crc.bin文件

 

 

在物联网平台上新增固件

1.设备运维 - 固件升级 

 

 

 

 

2.选择添加模块(使用默认的好像不能主动查询到固件信息)

升级包名称:随意写,  所属产品:选择您当前设备所属的产品

 

 

3.模块名称填写1,这个是和单片机程序对应的

这个模块名称其实就是一个参数,命名最好是以产品型号进行命名

这个要和单片机里面设置的一样

 

 

 

 

 

4.选择咱刚才添加的升级包模块,版本号填写刚才用户程序设置的版本号

 

 

 

5.上传固件

 

 

 

 

6.先不选择验证

验证的话需要先让其中一个设备远程升级验证下.有个繁琐的过程

不过实际产品应用尽量选择验证!

这个验证呢后面会说,咱先快速的使用起来.

 

 

 

开始控制设备升级了

1.点击批量升级

 

 

 

2.选择动态升级

注意哈,待升级版本号那里之所以是0.0.0 是因为咱设备刚刚上报了自己的版本号

 

 

3.下面这些选项,按照自己的需求更改

 

 

 

 

4.观察下串口日志

服务器推送给了咱设备固件信息, 接收到固件信息以后重启执行BootLoader

 

 

 

5.BootLoader下载程序

 

 

6.下载完成

 

 

 

7.用户程序第一时间上报版本, 每隔一段时间获取下服务器上的固件信息

具体一会看程序,因为是16进制编码,看不清楚

 

 

 

假设咱更新了程序

1.修改版本号

 

 

 

2.编译下工程

 

 

 

3.打开OTA Tools.exe软件生成带有CRC校验的固件

 

 

 

 

4.添加升级包

 

 

 

 

5.下面的步骤我就不多说了

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

假设需要验证

1.改个新版本

 

 

2.生成带有CRC校验的固件

 

 

 

3.添加升级包

 

 

 

 

 

 

 

4.点击验证

现在批量升级不可以点击,必须先验证下固件

 

 

 

这个是咱先前设备更新完成以后上报的版本号

 

 

 

 

5.选择可以用来测试的设备

 

 

 

 

 

 

6.可以看到设备开始升级

 

 

 

 

 

8,刷新下页面

然后按照前面的操作批量升级就可以了.

 

 

 

 

单片机程序说明

提示:

用户必须已经学习完了基本控制篇里面的阿里云物联网平台教程和看完了(主要是熟悉下流程)自建物联网平台的OTA教程.

我下面说明一下整个的流程

首先梳理一下思路:

阿里云物联网平台提供的升级其实和咱自建物联网平台里面的使用APP控制设备升级是一样的道理

其实就是用户程序通过mqtt获取程序文件下载地址,然后存储起来以后跳转到BootLoader

BootLoader访问下载地址,就下载了程序.

 

1,BootLoader程序就是原先的自建物联网平台里的程序

 

 

2,不过增加了记录固件大小程序

增加这个程序是因为阿里云物联网平台下载的时候出现了一些问题,才需要记录存储固件大小.

程序版本是向下兼容的. 如果用户想使用这个版本,可以直接替换(iap 和 iap_interface文件)

 

 

3,现在看用户程序

初始化处理

 

 

4,连接MQTT服务器

 

 

 

5,在连接成功函数中订阅主题和发布消息

那个上报升级进度没用到

 

 

 

6,每隔一段时间请求固件版本

 

 

 

 

 

 

7,接收到固件信息以后存储记录数据,重启

 

 

 

关于Flash分配调整

1.打开BootLoader 或者 用户程序(mcu_project)里面的iap_interface.h 文件

flash的最一开始存储的BootLoader程序,  结尾存储更新相关数据, 预留一些空间让用户存储其它数据

最后剩下的平半分, 一部分存储用户程序, 另一部分用来备份用户程序

   

 

 

用户可以根据自己的需求调整Flash分配大小, 注意:BootLoader程序和用户程序的Flash分配要保证一样.

用户可以根据自己的需求调整Flash分配大小, 注意:BootLoader程序和用户程序的Flash分配要保证一样.

用户可以根据自己的需求调整Flash分配大小, 注意:BootLoader程序和用户程序的Flash分配要保证一样.

 

 

我设置了BootLoader占用50KB(用户可以根据自己的BootLoader程序的bin文件大小进行更改)

存储更新相关数据至少用1K,  这个用户不要改动.

 

 

如果用户在项目中也需要使用flash存储数据, 可以根据自己存储的数据量调整

数据存储的起始地址是:  FLASH_USERDATE_ADDR

 

 

2.调整完成以后,下载BootLoader程序, 串口会打印flash具体分配

 

 

 

 

用户需要根据上面打印的设置下用户程序(mcu_project)运行地址和占用空间