基于腾讯云的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.rhkb.cn/news/149746.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(一)正点原子STM32MP135移植——准备

一、简述 使用板卡:正点原子的ATK-DLMP135 V1.2 从i.mx6ull学习完过来,想继续学习一下移植uboot和内核的,但是原子官方没有MP135的移植教程,STM32MP157的移植教程用的又是老版本的代码,ST官方更新后的代码不兼容老版本…

Linux中的wc命令

2023年10月6月,周五晚上 目录 wc命令的主要功能和用法如下:统计文件行数、字数和字节数只统计行数只统计字数只统计字节数 wc命令在Linux/Unix系统中是word count的缩写,它用来统计文件的行数、字数和字节数。 wc命令的主要功能和用法如下: 统计文件行数、字数和字…

mac清理垃圾的软件有哪些?这三款我最推荐

没错,Mac电脑真的好用,但是清理系统垃圾可不是件容易的事。由于Mac系统的封闭性,系统的缓存垃圾常常隐藏得让人发现不了。不过,别担心!有一些专业的Mac清理软件可以帮你解决这一系列问题,让清理垃圾变得轻松…

踩大坑ssh免密登录详细讲解

目 录 问题背景 环境说明 免密登录流程说明 1.首先要在对应的用户主机名的情况下生成密钥对,在A服务器执行 2.将A服务器d公钥拷贝到B服务器对应的位置 3.在A服务器访问B服务器 免密登录流程 0.用户说明 1.目前现状演示 2.删除B服务器.ssh 文件夹下面的…

【将文本编码为图像灰度级别】以 ASCII 编码并与灰度级别位混合将文本字符串隐藏到图像像素的最低位中,使其不明显研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

我在 NPM 发布了新包: con-colors

链接地址:npmjs.com con-colors 安装依赖 yarn add con-colors使用 导入: import { print } from "con-colors";使用: print.succ("成功的消息"); print.err("失败的消息")例子: import { p…

OpenResty编译安装详解

文章目录 一、概述1、OpenResty是什么2、官方文档 二、cengos安装OpenResty1、从官网下载2、目录结构3、编译安装 一、概述 1、OpenResty是什么 OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖…

连续波雷达相关内容简介

连续波雷达(CW雷达)连续发射高频信号。回波信号被永久接收和处理。 一、未调制连续波雷达 未调制的连续波雷达除了振荡的相位之外没有其他时间参考。它只能用于测量小于波长的距离。以上的一切都极为含糊。因此,它只能用作多普勒雷达或控制已知距离的恒定性。 二、调频连…

基于SSM+Vue的鲜花销售系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

MySQL概念

原理定义概念 定义 数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库 数据库是长期储存在计算机内、有组织的、可共享的数据集合 分类: (1)非结构化数据: 数据相对来讲没有固定的特点&#…

Go基础之变量和常量

Go基础之变量和常量 文章目录 Go基础之变量和常量一. 标识符、关键字、内置类型和函数1.1 标识符1.2 关键字1.3 保留字1.4 内置类型1.4.1 值类型:1.4.2 引用类型:(指针类型)1.5 内置函数1.6 内置接口error 二.Go变量命名规范2.1 采用驼峰体命名2.2 简单、…

汽车驾驶任务的隐马尔可夫模型识别方法研究

汽车驾驶任务的隐马尔可夫模型识别方法研究 一、Introduction 自动驾驶汽车经过了几十年的发展,是目前国内外汽车行业中的重要研究方向。自 动驾驶汽车的智能化需要车辆能够有类“人”的行为,在决策策略上可以满足人的心理 需求。人在驾驶过程中&#…

计算机专业毕业设计项目推荐10-饮食搭配平台(Go+微信小程序+Mysql)

饮食搭配平台(Go微信小程序Mysql) **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计流程…

什么是TF-A项目的长期支持?

安全之安全(security)博客目录导读 问题:Trusted Firmware-A社区每六个月发布一次代码。然而,对于生产中的平台,该策略在维护、重要软件修复的向后兼容性、获得最新的安全缓解措施和整体产品生命周期管理方面不具备可扩展性。 开源软件项目&…

【CMU15-445 Part-15】Query Planning Optimization II

Part15-Query Planning & Optimization II Selection Statistics 维护每张表中的基本主要信息也就是tuple数量 N R N_R NR​以及每个属性中不同值的数量 V ( A , R ) V(A,R) V(A,R), N R N_R NR​关系R中的元组数量,单独维护,不能用pag…

【网络编程】UDP数据报套接字编程和TCP流套接字编程

文章目录 1. 网络编程基础1.1 为什么需要网络编程?1.2 网络编程是什么?1.3 概念 2. Socket套接字3. UDP数据报套接字编程3.1 DatagramSocket API3.2 DatagramPacket API3.3 InetSocketAddress API 4. UDP构建服务端客户端(一发一收&#xff0…

Java基于SSM+Vue的平时成绩管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

Pytorch之shuffleNet图像分类

💂 个人主页:风间琉璃🤟 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 前言 ShuffleNet是Face(旷视)在2017年发布的一个高效率…

el-date-picker增加默认值 修改样式

预期效果 默认是这样的 但希望是直接有一个默认的当天日期,并且字体颜色啥的样式也要修改(在这里假设今天是2023/10/6 功能实现 踩了坑挺多坑的,特此记录 官方文档 按照官方的说明,给v-model绑定一个字符串就可以了 在j…

【MySQL】基本查询 (一)

文章目录 一. 基础查询二. where条件子句三. NULL的比较结束语 操作如下表 //创建表结构 mysql> create table exam_result(-> id int unsigned primary key auto_increment,-> name varchar(20) not null comment 同学姓名,-> chinese float default 0.0 comment…