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

news2024/12/28 19:57:00

【本文发布于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连接,则这一步也不是必须的。

在这里插入图片描述


3、运行menuconfig配置并保存一次使宏定义生效(生成宏定义到sdkconfig中)。其中Example Configuration配置访问的服务器以及升级文件,Example Connection Configuration配置连接的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"


在这里插入图片描述

编译工程并通过有线的方式烧录到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会不断升级重启


在这里插入图片描述





因为我的UART0用作与HLW8110通讯,所以需要修改LOG输出的串口为UART1。按以下步骤重定向:

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

在这里插入图片描述

回车进入之后选择custom后返回,即可更改为UART1

在这里插入图片描述

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

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

相关文章

php获取文件的权限信息(获取权限信息、返回字符串涵义、二进制的转换方式、权限修改)

php获取文件的权限信息 说明1.获取文件的权限信息2.返回文件权限字符的解读3.转为二进制权限4.修改权限 说明 &#xff08;图片来源于网络&#xff09; 文件权限是指文件或目录对用户和其他进程的访问许可。在 Unix 和 Linux 系统中&#xff0c;文件和目录都有三个权限&#x…

高通 Camera HAL3:CamX、Chi-CDK 详解

网上关于高通CameraHAL3的介绍文档不多&#xff0c;之前做高通CameraHAL3的一些收集、总结&#xff0c;杂乱了一点&#xff0c;将就着看吧。 一.初步认知 高通CameraHAL3的架构很庞大&#xff0c;代码量也很巨大。 先对CamX、Chi-CDK的关键术语、目录等有个初步认知 1.1 术…

Servlet与Mybatis-2

过滤器 过滤器是一种代码重用的技术&#xff0c;它可以改变 HTTP 请求的内容&#xff0c;响应&#xff0c;及 header 信息。过滤器通常不产生响应或像 servlet 那样对请求作出响应&#xff0c;而是修改或调整到资源的请求&#xff0c;修改或调整来自资源的响应。 作用&#x…

Linux基础篇 使用SSH远程Ubuntu-03

目录 1.安装ssh服务器 2.启用SSH服务器 3.查看SSH服务运行状态 4.在Windows的CMD下进行验证 在默认情况下&#xff0c;外部设备是无法通过SSH远程Ubuntu的&#xff0c;因为Ubuntu没有启用ssh服务。 说明&#xff1a;当前Ubuntu系统为20.04 1.安装ssh服务器 sudo apt-get …

chatgpt赋能python:Python在一组数据中抽取数的方法

Python在一组数据中抽取数的方法 Python是一种非常流行的编程语言&#xff0c;因为它简单易学&#xff0c;可读性高&#xff0c;功能强大&#xff0c;适用于各种不同的应用场景。在数据科学领域&#xff0c;Python也非常受欢迎&#xff0c;因为它拥有广泛的数据处理和分析库。…

【Go LeetDay】总目录(1~88)

Leetcode Golang Day1~10 Golang每日一练(leetDay0001) 1. 两数之和 Two Sum 2. 两数相加 Add Two Numbers 3. 无重复字符的最长子串 Longest-substring-without-repeating-characters Golang每日一练(leetDay0002) 4. 寻找两个正序数组的中位数 Median of two sorted arra…

使用RP2040自制的树莓派pico—— [1/100] 烧录micropython固件

目录 开发环境烧录模式简介固件下载固件烧录验证阶段micropython初步了解 开发环境 软件&#xff1a;Thonny 烧录固件&#xff1a;micropython 烧录模式简介 正常插上电就启动&#xff0c;这是树莓派pico开发板的正常启动模式。 如果按住 bootset 按键再插上数据线&#xf…

Vue 设计模式

一、什么是设计模式&#xff1f; 设计模式是一套被反复使用、多数人知晓、经过分类编目的、代码设计经验的总结。它是为了可重用代码&#xff0c;让代码更容易的被他人理解并保证代码的可靠性。 设计模式实际上是“拿来主义”在软件领域的贯彻实践&#xff0c;它是一套现成的工…

Linux下配置Qt6安装开发环境

安装JDK 选择自己定义JDK安装路径 点击如下图按钮 安装SDK 提示TLS初始化失败 由于HTTPS问题造成无法下载,暂用Android Studio来安装Android SDK 成功安装SDK 安装NDK与命令行工具 正在下载NDK及命令行工具 NDK与工具下载完成 配置QT的Android SDK路径 配置NDK路径 选择ND…

卡尔曼滤波与组合导航原理笔记(一)卡尔曼滤波方程的推导 第一部分

文章目录 一、滤波的基本概念1、传统数字滤波器2、现代控制中的状态观测器3、最优估计的含义4、温度估计的例子1.问题描述2.分析 二、递推最小二乘 课程链接&#xff1a;https://www.bilibili.com/video/BV11K411J7gp/?p1 参考书目&#xff1a;《捷联惯导算法与组合导航原理》…

日志框架 --- Log4j

文章目录 1. 什么是log4j2. log4j的日志级别3. 日志层级4. log4j使用实例4.1 添加log4j依赖4.2 添加配置文件4.3 编写代码4.4 测试代码4.5 运行结果 5. 配置文件5.1 Logger 日志记录器5.2 Appender 附加器5.3 Layout 日志格式化器 6. 整体演示6.1 配置文件6.2 运行结果 1. 什么…

Linux学习(四)Docker构建Python_Web环境

目录 Docker 安装Docker 使用Docker 启停Docker 换源Docker 镜像Docker 容器Docker 创建内部网段Docker Python 镜像创建Docker MySQL 镜像创建Docker 补充 Docker 是一个开源的应用容器引擎&#xff0c;Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器…

vulnhub靶场渗透之DC-4渗透教程(超级详细)

vulnhub靶场渗透之DC-4渗透教程目录 0x01靶机概述 0x02靶场环境搭建 0x03靶机信息发现 0x04靶机渗透过程 0x05靶机提权 0x06渗透实验总结 0x01靶机概述 靶机基本信息&#xff1a; 靶机下载链接https://download.vulnhub.com/dc/DC-4.zip作者DCAU发布日期2019年4月…

DINO代码学习笔记(二)

在DINO代码学习笔记&#xff08;一&#xff09;中已经将输入transformer之前的参数处理给捋了一遍&#xff0c;接下就是将这些参数传给transformer。 DINO的transformer使用了Deformable-DETR中的可变性transformer&#xff08;他们之前的工作也有用到&#xff09; 这里还是使用…

chatgpt赋能python:Python回滚-避免代码灾难的有效措施

Python回滚-避免代码灾难的有效措施 什么是Python回滚 Python回滚是一种避免代码灾难的有效措施&#xff0c;它可以让你在代码出现问题之后及时回退到之前的版本&#xff0c;保证系统不会受到影响。 回滚是一项非常重要的工作&#xff0c;越是复杂的项目越需要进行回滚。Pyt…

​【指针与数组的恩怨情仇】

指针和数组的关系 指针指的是指针变量&#xff0c;不是数组&#xff0c;指针变量的大小是4/8个字节&#xff0c;是专门来存放地址的。数组也不是指针&#xff0c;数组是一块连续的空间&#xff0c;存放一组相同类型的数据的。 没有关系&#xff0c;但是它们之间有比较相似的地方…

java String类型对象转换为自定义类型对象

问题 java String类型对象转换为自定义类型对象 详细问题 对于java自定义类型对象提供了toString()方法&#xff0c;实现自定义类型对象转换为String类型对象&#xff0c;如何将String类型对象转换为自定义类型对象&#xff0c;譬如对于如下代码所定义的Class类 package co…

Android:Selector + Layer-lists 实现 AppCompatCheckBox

最近做项目涉及到一些UI相关的东东&#xff0c;虽然比较简单&#xff0c;但是也很有趣&#xff0c;写两篇简短的博客记录一下。 一."Selector 两张图片"实现 AppCompatCheckBox AppCompatCheckBox 是 androidx的一个widget&#xff1a;androidx.appcompat.widget.…

chatgpt赋能python:Python图中打字的SEO文章:让你的图片说出更多的话

Python图中打字的SEO文章&#xff1a;让你的图片说出更多的话 图片是传达信息的有力工具。不过&#xff0c;当你在网站上发布图片的时候&#xff0c;这张图片就很可能会被浏览器、机器学习算法、甚至是一些视觉障碍用户忽略。为了弥补这个缺陷&#xff0c;我们可以使用Python来…

chatgpt赋能python:Python回退快捷键:让你的编程更迅速高效

Python回退快捷键&#xff1a;让你的编程更迅速高效 作为一名有10年Python编程经验的工程师&#xff0c;我深知Python回退快捷键对于编程的重要性。当你在编写代码时&#xff0c;可能会出现需要回退或者修改之前的代码的情况&#xff0c;在这种情况下&#xff0c;如果你没有使…