当前位置: 首页 > news >正文

基于腾讯云的OTA远程升级

一、OTA

        OTA即over the air,是一种远程固件升级技术,它允许在设备已经部署在现场运行时通过网络远程更新其固件或软件。OTA技术有许多优点,比如我们手机系统有个地方做了优化,使用OTA技术我们就不用召回每部手机,直接通过云端就可以进行远程下发固件,这样就节省了成本。这里我们使用的是腾讯云来进行OTA操作。

OTA下载技术的大概步骤:

OTA(空中下载技术,即通过云端远程进行固件升级)

1、ESP8266连接本地WIFI(路由器)
2、登录腾讯云MQTT服务器
3、订阅主题(

        主题1:$ota/report/6Z77GCWKOQ/${deviceName}(上传本地固件版本号,消息上行)
         主题2:$ota/update/6Z77GCWKOQ/${deviceName}(用于固件的下载,消息下行)    )


4、上传本地固件版本号
5、在控制台进行云端固件的信息的推送(固件大小、MD5值、版本号...)
6、进行固件下载(通过HTTP进行分包下载(分包大小与FLASH容量有关,即所用的MCU是大容量还是小容量还是中容量产品,也就是按1个扇区大小进行分包,有的是1Kb一个包,有的是2Kb一个包)),固件下载到FLASH的OTA分区
7、验证MD5值,验证成功后将固件从OTA分区写入到APP分区
8、IAP跳转到APP分区执行新的固件代码

FLASH分区:e

在这里,我们从云端下载到的程序会先放在OTA分区,下载完之后如果代码没有问题,则Boot Loader会引导OTA分区的代码到APP分区,最终运行的是APP分区。

二、WIFI模块

因为我们需要连接云端,故我们需要使用到WIFI模块,这里我们使用的是ESP8266WIFI模块。

三、腾讯云以及待下发固件的准备

在这里我们需要用到的是腾讯云的固件升级

这里可以直接搜索固件升级,然后选择物联网开发平台

点击产品控制台

点公共实例

新建一个项目,我这里之前新建了一个OTA项目,然后点创建的项目名

然后点击新建产品,随便创建一个产品

 

点击固件升级,并点击添加固件(这个是待下发的固件):

这里填一下固件信息,并选择待下发的固件,固件必须得是.bin文件 

 在keil5中我们可以按如下操作生成.bin文件

所填的内容为:

 C:\Keil_v5\ARM\ARMCLANG\bin\fromelf.exe --bin --output .\Objects\pwm.bin .\Objects\pwm.axf

其中formelf.exe是Keil自带的格式工具软件,其路径在你电脑的Keil安装盘的对应位置,记住空一格,然后写--bin然后空一格写--output然后空一格,Objects是我用于存放输出bin文件的文件夹(系统默认此路径从工程文件开始算起),后面的Objects是我们存放.axf的文件夹。

弄完上面这些之后,我们需要改一下待下发固件的烧录位置,因为这个是需要烧入到APP分区的,所以我们需要设置偏移量。这个是根据自己对FLASH分区的划分来进行偏移的。这里我设置的是0x8005800,所以偏移量是0x5800

还有别忘记修改User中的烧入位置 

四、stm32的准备

做好这些准备之后,代码如下:

 链接:https://pan.baidu.com/s/1QXZX_dUfhmpl4TQFW5y4JQ 
提取码:TD01

这里我们使用的是stm32f103rct6的板子进行开发,代码中我们需要修改:

1、startup启动文件,一开始的是md.s的,我们需要将其移除并将hd.s的启动文件加入到工程中。

 

 2、芯片:因为我们使用的是stm32f103rct6板子,芯片得改一下

既然改了芯片,那么全局宏也得改一下

全局宏改了之后 ,因为现在腾讯云使用的是http不是https,故我们需要改一下ota.c文件中的如下代码:

还有就是扇区大小改变了,所以我们下载OTA固件这部分代码也需要改,也在ota.c中:

然后还有就是tencent_mqtt.h中的username啊,password啊,client_id啊,还OTA_PUB_TOPIC和OTA_SUB_TOPIC别忘了,这些都可以在腾讯云中找的到。

腾讯云中在这里:

 

这两个是MQTT协议需要的 ,其中deviceName改成自己的设备名

 这些是所要填的东西,注意:这些是会经常变的,可能今天的用着还是好好的,明天可能就下发不了了,可能出现md5 error问题,注意改这里。

然后就是iap.h中的东西要改,因为我们使用的stm32是大容量产品,所以我们需要将扇区大小改成2048也就是2Kb,然后下面的FLASH_START_ADDR以及FLASH_APP_ADDR,还有FLASH_OTA_ADDR要根据自己的FLASH分区分配来填写。

 做完这些之后我们就可以开始下发固件辣。

http://www.lryc.cn/news/186876.html

相关文章:

  • 如何在VS2022中进行调试bug,调试的快捷键,debug与release之间有什么区别
  • 初识jmeter及简单使用
  • Spring 在多线程环境下如何确保事务一致性
  • [Machine Learning] Learning with Noisy Data
  • C++中有哪些常用的标准库?
  • 软考-信息安全工程师概述
  • 2023-2024年华为ICT网络赛道模拟题库
  • 英特尔参与 CentOS Stream 项目
  • Centos 服务器 MySQL 8.0 快速开启远程访问
  • 充电保护芯片TP4054国产替代完全兼容DP4054DP4054H 锂电充电芯片
  • Java Spring Boot中的爬虫防护机制
  • 状态模式 行为型模式之六
  • JAVA NIO深入剖析
  • 企业电子招投标系统源码之电子招投标系统建设的重点和未来趋势
  • 基于正点原子alpha开发板的第三篇系统移植
  • 数据结构与算法设计分析——贪心算法的应用
  • Leetcode 2895. Minimum Processing Time
  • 学信息系统项目管理师第4版系列21_范围管理
  • threejs 透明贴图,模型透明,白边
  • CCF CSP认证 历年题目自练Day21
  • 【Python_PySide2学习笔记(十六)】多行文本框QPlainTextEdit类的的基本用法
  • linux上negix部署静态页面
  • 41.说说Promise自身的静态方法
  • 通讯网关软件019——利用CommGate X2OPCUA实现OPC UA访问Oracle服务器
  • 【机器学习】svm
  • 基于SSM+Vue的学习交流论坛的设计与实现
  • 开发与运营:“开发”和“运营”角色有何不同和重叠?
  • 关于GD32引脚PA13、PA15、PB3、PB4配置为普通引脚的问题
  • JS-Dom转为图片,并放入pdf中进行下载
  • Python 无废话-办公自动化Excel格式美化