首页 > 编程语言 >3-STM32+W5500远程升级篇OTA(阿里云物联网平台)-STM32通过W5500使用http下载程序文件,升级程序(一型一密)

3-STM32+W5500远程升级篇OTA(阿里云物联网平台)-STM32通过W5500使用http下载程序文件,升级程序(一型一密)

时间:2024-04-07 17:55:05浏览次数:27  
标签:升级 存储 W5500 程序 STM32 用户程序 固件 BootLoader 设备

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/STM32W5500AIR202A/alyota.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/STM32W5500AIR202A/alyota.html" width="100%"></iframe>

 

 

前言

这节的例程BootLoader和第一节是一样的, 只是这节用户程序是设备以一型一密方式(动态注册)接入阿里云物联网平台.

为了这节可以单独查看使用,会重复前面的内容.

 

提示提示提示

设备动态注册的数据存储在了flash里面,烧录程序的时候记得选择只擦除程序使用的flash空间;

如果选择了上面的擦除全部,则数据没有了设备就会重新注册, 阿里云默认注册了一定次数之后就不让注册了.

除非手动在平台上把设备删除, 然后设备才可以重新注册成功.

 

 

 

升级概述

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,登录自己的云平台打开动态注册

注:选择哪个产品,设备就会注册到哪个产品下

 

 

 

开始测试

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

 

 

 

 

 

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

 

 

 

 

 

2.打开用户程序

 

 

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

 

 

 

 

4,查看并替换自己instanceId

提示:在2021年7月30日之前购买的实例是没有 instanceId 的, 单片机程序里面可保持空

如果有, 则需要填写上.

 

 

 

 

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

 

6.正常运行日志如下

 

 

7.在物联网平台上刷新一下设备列表,会看到注册了一个新设备

 

 

 

 

把升级包上传到服务器

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.user_crc.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程序就是原先的自建物联网平台里的程序,就不再叙述

 

 

2,现在看用户程序

初始化处理

 

3,连接阿里云的TCP服务器(MQTT服务器),发送MQTT连接协议(实际是注册设备协议)

 

 

先以SSL方式连接TCP服务器(MQTT服务器), 然后发送注册协议

 

 

提前说下哈, 设备的名字 DeviceName  在一开始初始化的时候就赋值了 (使用的设备的MAC地址)

 

根据阿里云的文档,组合发送注册设备信息, 

 

 

使用MQTT发送完以后, 服务器会把注册信息通过MQTT发送给设备, 所以咱直接在MQTT接收回调函数里面获取就可以

把获取到的设备注册信息存储到flash, 然后重启

 

 

4.重启之后呢判断下已经注册了

 

5.设备使用注册的信息连接MQTT服务器

其实最终就是mqtt连接通信哈, 只不过mqtt的那些参数是使用先前的注册的设备信息进行拼接.

 

 

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

那个上报升级进度没用到

 

 

 

 

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

 

 

 

 

 

 

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

 

 

 

 

关于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)运行地址和占用空间

 

 

3,注意个地方(关于存储用户自己的数据)

存储数据的模子已经写好了,用户按照说明存储自己的数据即可.

 

 

 

 

用户后期存储自己的数据,从 flash_data_buffer[200] 开始存储

 

 

存储可以参考下面的例子

 

 

 

 

 

 

 

 

 

 

.

 

标签:升级,存储,W5500,程序,STM32,用户程序,固件,BootLoader,设备
From: https://www.cnblogs.com/yangfengwu/p/18119591

相关文章

  • 实测STM32的RTC,什么校准都不做,不断电,半年后快了13分钟
    【测试结果】TOOL的RTC时钟一直都是通过上位机这里手动校准的,这次做了了实验,测试期间不做任何校准,看看半年后效果。测试是从去年的9月29号开始截至到今年的4月5号,快了13分钟【误差原因】因为晶振对温度敏感,下面是典型的温度对晶振影响:STM32支持LSI内部低速时钟或者LSE外......
  • 【STM32项目】基于STM32的测量温度与压力的数据处理设计(完整工程资料源码)
    前言:        项目的架构涉及两个关键组成部分,即硬件组件和软件开发。具体到硬件组成,项目包含若干关键模块,如:STM32微控制器作为项目的脑部控制中心,重力感应模块用于检测和记录重力数据,温度感应模块负责监测环境温度,以及液晶显示模块用于向用户展示实时数据和其他信息。......
  • centos7:编译升级 openssh:主要参考“https://github.com/boypt/openssh-rpms”
    参考“https://github.com/boypt/openssh-rpms”  “Releases·boypt/openssh-rpms(github.com)” 安装人家大牛的文档来操作即可。可选的,自行定制 version.env,可进行各种组合! BackportOpenSSHRPM/SRPMforoldCentOSAsimplescripttobuildlatestOpen......
  • 基于STM32单片机智能便携式心率血氧体温检测仪蓝牙设计20-415
    20-415、STM32单片机便携式心率血氧体温检测仪系统+蓝牙上传设计产品功能描述:本系统由STM32F103C8T6单片机、LCD1602液晶屏显示、血氧传感器、DS18B20温度检测、蓝牙模块组成。1、液晶实时显示STM32采集到的心率、血氧和温度。2、心率和血氧采集成功直接显示相应的值,如果采......
  • 揭秘STM32的启动文件:开启嵌入式世界的大门
    前言在嵌入式系统的领域里,STM32系列芯片一直以其强大的性能和丰富的外设功能而闻名。然而,要让这些芯片正常工作,关键在于启动文件(startupfile)的正确编写和理解。启动文件是嵌入式系统中的第一个被执行的代码,它负责初始化处理器、设置堆栈、配置中断向量表等关键任务,是整个系统......
  • 玩转STM32:解密RCC模块,轻松配置时钟!
    前言在嵌入式系统开发中,时钟的配置是至关重要的一环,它直接影响着系统的稳定性和性能。而在STM32微控制器中,时钟的配置又是基于RCC(ResetandClockControl)模块实现的。今天,我们就来揭开STM32中RCC模块的神秘面纱,探讨如何使用HSE(HighSpeedExternal)和HSI(HighSpeedInternal)时......
  • Cisco ISO升级文档
    第一步查看flash是否有足够的空间Switch#dir第二步将U盘插入交换机USB接口*Sep1310:26:48.686:%IOSD_INFRA-6-IFS_DEVICE_OIR:Deviceusbflash0addedSwitch#copyusbflash0:cat9k_lite_iosxe.17.06.04.SPA.binflash:第三步将U盘中的cat9k_lite_iosxe.17.06.04.SPA......
  • STM32CubeIDE安装和汉化
    安装包请在官网下载双击安装,next点agree记得改,默认是C盘,改到其他的盘安装等待完成汉化:点击这里的add,我这是汉化过后期补的图片会出现下面的弹窗,然后把下面的网址复制到Location中https://download.eclipse.org/technology/babel/update-site/R0.17.1/2019-1......
  • STM32f1时钟系统及配置
    文章目录11.11.222.12.22.3选择乘除结合就是时钟系统?11.11.2HSEf1是8M原理图里面有RC震荡器电阻电容构成优缺点:石英那个成本高但精确和稳定RC在内部成本低一般用外部系统时钟锁相环分频要用HSE1分频*9AHB高速高新能总线AHB上的总线该分频......
  • CLion + STM32CubeMX【嵌入式开发 _环境搭建_C++】
         做嵌入式开发,一定对Keil、IAR不陌生,可它俩那与现代IDE格格不入的远古画风让人脑壳着实发疼。好一点的解决方案就是IAR或Keil联调VSCode,即代码在VSCode编写(调试),在IAR或Keil编译烧录。以VSCode强大而丰富的插件功能和简约优美的画面,已经使开发体验有了大幅的提......