1-STM32F407+EC200程序升级篇(阿里云物联网平台)-STM32F407使用EC200通过阿里云物联网平台升级程序(一机一密)
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLIOTE_STM32F407/EC200/aliyunota.html" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
前言
这节说明一下如何使用阿里云物联网平台的OTA远程升级STM32程序
用户必须已经学习完了基本控制篇里面的阿里云物联网平台教程和看完了(主要是熟悉下流程)自建物联网平台OTA教程.
阿里云物联网平台是通过MQTT获取升级固件的版本,固件大小和下载地址信息.
GPRS模块和单片机连接说明
单片机通过串口2和GPRS模块通信; 单片机PA8引脚作为复位模组使用(高电平复位)
(单片机)PA2 ---- (EC200)RX;
(单片机)PA3 ---- (EC200)TX;
(单片机)PA8 ---- (EC200)RST
升级概述
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
设备可以使用这个主题主动请求云端固件信息, 详细说明看下面
开始测试
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文件
两个bin文件的区别:
1.user_crc.bin文件是在user.bin的基础上增加了CRC校验位
2.改写size,把真实的文件大小填写到bin文件
在物联网平台上新增固件
1.设备运维 - 固件升级
2.选择添加模块(使用默认的好像不能主动查询到固件信息)
升级包名称:随意写, 所属产品:选择您当前设备所属的产品
3.模块名称填写1,这个是和单片机程序对应的
这个模块名称其实就是一个参数,具体做什么用我也没想好,现在也没用到
这个要和单片机里面设置的一样
4.选择咱刚才添加的升级包模块,版本号填写刚才用户程序设置的版本号
5.上传固件
6.先不选择验证
验证的话需要先让其中一个设备远程升级验证下.有个繁琐的过程
不过实际产品应用尽量选择验证!
这个验证呢后面会说,咱先快速的使用起来.
开始控制设备升级了
1.点击批量升级
2.选择动态升级
注意哈,待升级版本号那里之所以是0.0.0 是因为咱设备刚刚上报了自己的版本号
3.下面这些选项,按照自己的需求更改
4.观察下串口日志
服务器推送给了咱设备固件信息, 接收到固件信息以后重启执行BootLoader
5.BootLoader下载程序
6.下载完成
7.用户程序第一时间上报版本, 每隔一段时间获取下服务器上的固件信息
假设咱更新了程序
1.修改版本号
2.编译下工程
3.打开OTA Tools.exe软件生成带有CRC校验的固件
4.添加升级包
5.下面的步骤我就不多说了
假设需要验证
1.改个新版本
2.生成带有CRC校验的固件
3.添加升级包
4.点击验证
现在批量升级不可以点击,必须先验证下固件
这个是咱先前设备更新完成以后上报的版本号
5.选择可以用来测试的设备
6.可以看到设备开始升级
7,升级成功上报版本
8,刷新下页面
然后按照前面的操作批量升级就可以了.
单片机程序说明
提示:
用户必须已经学习完了基本控制篇里面的阿里云物联网平台教程和看完了(主要是熟悉下流程)自建物联网平台的OTA教程.
我下面说明一下整个的流程
首先梳理一下思路:
阿里云物联网平台提供的升级其实和咱自建物联网平台里面的使用APP控制设备升级是一样的道理
其实就是用户程序通过mqtt获取程序文件下载地址,然后存储起来以后跳转到BootLoader
BootLoader访问下载地址,就下载了程序.
1,BootLoader程序就是原先的自建物联网平台里的程序
3,现在看用户程序
初始化处理
4,连接MQTT服务器
5,在连接成功函数中订阅主题和发布消息
那个上报升级进度没用到
6,每隔一段时间请求固件版本
7,接收到固件信息以后存储记录数据,重启
关于Flash分配情况
1,存储记录其它数据使用的扇区3
具体怎么使用F407存储数据的需要看这篇文档: https://www.cnblogs.com/yangfengwu/p/14476294.html
提示: 内部存储数据已经使用了前1024字节,
如果用户需要存储自己的数据的时候,从 flash_helper_struct.FlashHelperData[256] 开始存放
2.打开BootLoader 或者 用户程序(mcu_project)里面的iap_interface.h 文件
用户可以根据自己的芯片或者需求更改使用哪些扇区.
不过要注意:BootLoader程序 和 用户程序里面的要保持一样
3.调整完成以后,下载BootLoader程序, 串口会打印flash具体分配
用户需要根据上面打印的设置下用户程序(mcu_project)运行地址和占用空间