ESP8266 SDK开发阶段无线WIFI本地烧录升级程序 -- FOTA

news2024/11/24 20:52:50

【本文发布于https://blog.csdn.net/Stack_/article/details/130448713,未经允许不得转载,转载须注明出处】


前言


因为正在DIY一个WiFi计量插座,采用非隔离的方案,烧录时要拔掉220V插头,测试时要拔掉USB线,麻烦事小,万一两者同时插上烧坏电脑事大。

于是想着调试阶段用无线的方式更新程序,也方便以后偶尔的升级需求,不需要把外壳打开。顺便还把FOTA这个功能学了。

FOTA为了防止升级意外中断导致APP损坏,划分两个区域存放两份APP,轮流进行升级,由boot去记录应该升级哪个APP以及启动哪个APP,类似安卓的A B分区。这样做的代价是需要双倍的APP空间。

boot代码我们不需要关心,我们需要在APP代码中实现升级功能。流程是:正在运行A/B区程序 > 检测到服务器存在升级文件 > 拉取文件写入到另一个区 > 标记下次启动跳转到另一个区 > 软复位

本文基于ESP8266-12E、AiThinkerIDE_V1.5.2 以及 ESP8266_RTOS_SDK 3.4

参考文章(配合以下文章食用)

乐鑫esp8266学习rtos3.0笔记第6篇:esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件

ESP8266_RTOS_SDK 开发环境搭建 AiThinkerIDE_V1.5.2安装配置 编译 烧录



一、获取官方FOTA例程代码


从GitHub拉取的SDK中有例程,路径是 ESP8266_RTOS_SDK\examples\system\ota

我选择的是native_ota\2+MB_flash\new_to_new_no_old,因为我不需要从SDK2.0更新到3.0。

关于new_to_new_with_old的解释看这里【FOTA from an Old SDK to the New ESP8266 RTOS SDK (IDF Style)】

可以将官方工程拷贝出来基于这个工程去写自己的代码,而我是将其代码移植到我工程里。

>>> 如果直接使用官方例程,则跳过以下小步骤,直达二 <<<

如果选择移植的方式,需要

1、将官方工程目录下的 Kconfig.projbuild 文件复制一份到我们工程目录下,将在menuconfig中新增配置项Example Configuration,这样编译时如下宏定义才不会报未定义。这不是必须的,以下划线宏定义可以直接写字符串。

在这里插入图片描述

2、复制官方工程目录下的 Makefile 的划线行复制到自己的工程Makefile中添加组件,将在menuconfig中新增配置项Example Connection Configuration,这样不会报连接WiFi的函数未定义。如果自己实现了WiFi连接,则这一步也不是必须的。

在这里插入图片描述



二、开启BOOT功能


1、运行menuconfig配置,进入配置面板。

2、进入"Serial flasher config“ 将 “Flash size” 修改为4MB

3、依次进入 “Partition Table” —> “Partition Table (Single factort app, no OTA”,选项更改为"Factory app, two OTA definitions"


在这里插入图片描述

4、配置服务器以及连接的wifi。其中Example Configuration配置访问的服务器以及升级文件,Example Connection Configuration配置连接的WiFi。

在这里插入图片描述
在这里插入图片描述


5、移植ota代码


6、编译工程并通过有线的方式烧录到ESP8266。



三、安装配置本地服务器


1、下载nginx,解压

在这里插入图片描述

2、进入conf文件夹打开nginx.conf文件,将端口更改为8070(我上图中Http Server Port配置为8070,这两者保持一致),或者其它端口。

在这里插入图片描述

3、将编译完成的bin文件拷贝到html目录下,并更名为ota.bin(和上图Http Get Filename一致)


4、双击nginx.exe运行服务器,可能会出现黑窗口,也可能不会。浏览器输入http://192.168.31.240:8070/ota.bin,如果能下载bin文件,即服务器这方面已成功。最好用同一网络下的另一电脑访问,因为本机能访问不代表该网络下其它设备能访问。若无法访问,需修改防火墙设置,允许nginx通过防火墙




四、开始升级


1、可以在代码中增加版本信息,通过有线的方式刷入V1.1,此时html目录下已删除ota.bin,会报ota失败

2、编译一版V1.2放到html目录,复位esp8266。打印Have written字样即表示正在升级


在这里插入图片描述

3、写入完成后将自动重启,可见版本已更新为V1.2

4、此时需要删除ota.bin文件,否则esp8266会不断升级重启。至于如何防止重复升级还需继续学习


在这里插入图片描述




附:ESP8266的LOG打印端口变更为UART1


在这里插入图片描述


因为我的UART0用作与HLW8110通讯,而ESP_LOGE等打印函数默认使用UART0。所以需要修改LOG输出的串口为UART1。按以下步骤重定向:

运行menuconfig配置,进入到下图位置,


在这里插入图片描述


回车进入,选择custom后返回,即出现下图的划线选项,可更改为UART1


在这里插入图片描述


另外,如果按下图选择Info,则Info以下的Debug和Verbose即ESP_LOGD、ESP_LOGV将不输出,同理选择Warning,则Info即ESP_LOGI也不输出


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/622281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

webpack指定输出资源的路径和名称

如图&#xff0c;在前面的章节我们打包后的文件默认都输出到了dist目录下&#xff0c;无论是图片、还是js都在同一级别目录&#xff0c;这里目前处理的资源比较少&#xff0c;如果资源一多&#xff0c;所有的资源都在同一级目录&#xff0c;看起来很费劲。 那么这节就介绍一下…

【LeetCode】74. 搜索二维矩阵

74. 搜索二维矩阵&#xff08;中等&#xff09; 方法一&#xff1a;二分查找 思路 总体思路 由于二维矩阵固定列的「从上到下」或者固定行的「从左到右」都是升序的 因此我们可以使用两次二分来定位到目标位置。 第一次二分&#xff1a; 从第 0 列中的「所有行」开始找&#x…

Threejs,InstancedMesh变换操作

Threejs,InstancedMesh 在项目中加载一个道路的模型树,结果加载出来是水平的 期望是: 仔细分析: 打印模型元素,模型是两个交叉的InstancedMesh ,每个InstancedMesh 里面有566重复的mesh,形成566棵树。那么现在的期望就变成这两个交叉的InstancedMesh 各自旋转下角度 c…

高考作文题押中了?其实是一种趋势:探索、好奇、故事、技术、时间…

探索、好奇、故事、技术、时间 不知不觉&#xff0c;距离高考已经过去了23年……今年的高考题&#xff0c;关键词非常有时代感&#xff0c;不禁让人联想背后的趋势是什么&#xff1f; 趋势是无法抵挡的浪潮&#xff0c;一旦你没有跟上&#xff0c;这个时代的叙事就没有你的一份…

卡尔曼滤波与组合导航原理(二)卡尔曼滤波方程的推导

文章目录 三、卡尔曼滤波1、随机系统状态空间模型2、状态预测3、状态量测4、增益矩阵K与状态估计5、Kalman滤波公式汇总6、Kalman滤波流程图1.划分为左右两部分&#xff08;一阶矩和二阶矩&#xff09;2.划分为上下两部分&#xff08;时间更新、量测更新&#xff09; 7、Kalman…

关于如何清理过多索引的思考

今天同事提了一个问题&#xff0c;还是值得思考的&#xff0c;某个作为数据分发的MySQL库&#xff0c;有时候需要在不同的环境中同步创建数据库&#xff0c;但受工具限制&#xff0c;只能做数据同步&#xff0c;索引这些对象则需要单独创建&#xff0c;该数据库的索引太多&…

在 Transformers 中使用约束波束搜索引导文本生成

引言 本文假设读者已经熟悉文本生成领域波束搜索相关的背景知识&#xff0c;具体可参见博文 如何生成文本: 通过 Transformers 用不同的解码方法生成文本。 与普通的波束搜索不同&#xff0c;约束 波束搜索允许我们控制所生成的文本。这很有用&#xff0c;因为有时我们确切地知…

学习笔记之MySQL索引

1、引言 索引是数据库用来提高性能最常用的工具&#xff0c;一般索引本身也很大&#xff0c;不可能全部存于内存中&#xff0c;因此所以往往以文件形式存于磁盘上。 左表是数据表&#xff0c;共两列七条数据。为了加快Col2的查找&#xff0c;可以维护一个右表所示的二叉查找树…

图论与算法(7)最短路径问题

1.最短路径问题 1.1 带权图的最短路径 最短路径问题是指在一个加权图中寻找两个顶点之间的最短路径&#xff0c;其中路径的长度由边的权重确定。 常见的最短路径算法包括&#xff1a; Dijkstra算法&#xff1a;适用于解决单源最短路径问题&#xff0c;即从一个固定的起点到图…

meethigher-阿里邮箱POP3/SMTP服务

最近发现一个问题&#xff0c;小伙伴给我发的邮件&#xff0c;收和回都不及时。于是我现在将所有的邮箱&#xff0c;通过POP3/SMTP协议整合到了一起。再配合小米手环&#xff0c;就能做到邮件无遗漏。 一、邮箱常用协议 邮箱中常用三类协议 POP3 Post Office Protocol versi…

chatgpt赋能python:Python就业学历要求

Python 就业学历要求 Python 是一门广泛应用于数据科学、人工智能、Web 开发和自动化等领域的编程语言&#xff0c;正在迅速成为行业内最受欢迎的语言之一。如果你想进入这些领域从事相关职业&#xff0c;那么 Python 编程技能将是你的一个优势。但是&#xff0c;Python 就业所…

基于SSM+JSP的毕业生就业信息管理系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

软考A计划-系统架构师-官方考试指定教程-(3/15)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

记录--纯CSS实现一个简单又不失优雅的步骤条

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 步骤条是一种用于引导用户按照特定流程完成任务的导航条&#xff0c;在各种分步表单交互场景中广泛应用。先来看一下几个主流前端 UI 框架中步骤条组件的样子&#xff1a; ElementPlus AntDesign Ope…

BCM和board的引脚的区别是什么?如何查看GPIO的BCM和board之间的关系

在树莓派(Raspberry Pi)上使用 GPIO(通用输入输出)时,引脚可以使用两种不同的编号方式:BCM(Broadcom SOC Channel)和board。 BCM 编号:BCM 编号是基于 Broadcom 芯片的引脚编号方式。它使用芯片上的引脚功能编号来标识 GPIO 引脚,这种编号方式是树莓派广泛使用的默认…

Spring事务简介及相关案例

目录 一、事务简介 二、准备数据库 三、创建maven项目&#xff0c;引入依赖和完成相关配置 1. pom.xml文件 2. 创建配置文件 四、编写Java代码 1. Account实体类 2. AccountDao接口 3. AccountService业务类 五、测试 1. 测试方法 2. 测试结果​编辑 往期专栏&…

判断数组中的每个元素是否为正无穷大或负无穷大 numpy.isinf()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 判断数组中的每个元素 是否为正无穷大或负无穷大 numpy.isinf() [太阳]选择题 请问关于以下代码的最后输出的是&#xff1f; import numpy as np a np.array([-np.inf,0,np.inf]) print(&q…

chatgpt赋能python:Python实现文件复制到另一个文件夹下的方法

Python实现文件复制到另一个文件夹下的方法 如果你经常需要复制文件并将它们保存到不同的文件夹下&#xff0c;那么使用Python脚本来执行此任务是一个非常好的选择。Python提供了强大的文件操作功能&#xff0c;使得编写脚本来完成文件操作变得相对简单。在本篇文章中&#xf…

【网站 seo 排名优化】typecho Handsome 主题高排名权重优化方案

前言 前一篇优化文章主要是完成了对于 typecho 各个方面的美化与简单优化&#xff0c;如下&#xff1a; 构造你独一无二的博客美化&#xff1a;typecho joe主题优化日志 而现在博主采用的是 Handsome 主题&#xff0c;相比较 joe 主题&#xff0c;编辑、定制功能更为强大、方便…

华为OD机试真题 JavaScript 实现【合法IP】【牛客练习题】

一、题目描述 IPV4地址可以用一个32位无符号整数来表示&#xff0c;一般用点分方式来显示&#xff0c;点将IP地址分成4个部分&#xff0c;每个部分为8位&#xff0c;表示成一个无符号整数&#xff08;因此正号不需要出现&#xff09;&#xff0c;如10.137.17.1&#xff0c;是我…