ESP32之本地HTTP服务器OTA固件升级流程,基于VSCode环境下的ESP-IDF开发(附源码)

背景知识:

本实验利用编译链内Python内置的 HTTP 服务器,将升级包通过http发送给设备,实现OTA固件升级。

目录

背景知识:

1.创建工程

1.1 创建OTA基础工程

3.编写、修改代码

3.1 修改menuconfig配置文件

3.1.1 配置WiFi账号和密码

3.1.2配置flash和partition分区表

(1)不修改分区大小

(2)要修改分区大小

3.2 设置版本号

3.2.1 设置版本号

3.2.2 打印版本号

(1)编写获取版本号函数

(2)调用获取版本号函数

4.验证功能

4.1 运行HTTP本地服务器

(1)建立本地服务器

方式1:利用cmd命令窗口

方式2:利用VSCode窗口

(2)打开浏览器,获取http下载地址

4.2 修改http的url下载地址

4.2.1 更改url下载地址

4.2.2 烧录测试升级

(1)生成正式升级包

(2)烧录初始代码

(3)观察OTA升级现象

5.注意事项

6.总结

7.参考文档

8.源码下载


1.创建工程

1.1 创建OTA基础工程

3.编写、修改代码

3.1 修改menuconfig配置文件

3.1.1 配置WiFi账号和密码

3.1.2配置flash和partition分区表

(1)不修改分区大小

如果不修改分区大小,选择默认配置即可:

(2)要修改分区大小

如果需要修改分区大小,则需从\Espressif\frameworks\esp-idf-v5.3.2\components\partition_table路径中复制一个partitions_two_ota.csv文件到工程路径,并将factory、ota_0、ota_1三者的size改成合适大小。

放到这里,并更改分区大小:

注意:修改分区大小后,

  • 注意Flash大小是否足够,不够则需要修改大小;
  • 要将Partition Table的值改成Custom partition table CSV;
  • 要将Custom partition CSV file的值改成partitions_two_ota.csv。

3.2 设置版本号

3.2.1 设置版本号

在工程根目录的cMakeList.txt中加入set(PROJECT_VER "1.0.0") 设置当前版本号:

3.2.2 打印版本号

(1)编写获取版本号函数
//获取当前应用版本号
const char* get_app_version(void)
{static char app_version[32] = {0};if (app_version[0] == 0){//获取当前分区的基本信息const esp_partition_t* running = esp_ota_get_running_partition();//获取更多的分区信息esp_app_desc_t running_desc;esp_ota_get_partition_description(running, &running_desc);snprintf(app_version, sizeof(app_version), "%s", running_desc.version);}return app_version;
}
(2)调用获取版本号函数

4.验证功能

4.1 运行HTTP本地服务器

先编译生成的bin文件作为临时升级包,然后随便找个目录新建个文件夹取名Server,并将临时升级包放到文件夹内,改名为update_pack.bin。

若 Python 版本是 3.X,则指令为:

python -m http.server 8070

若 Python 版本是 2.X,则指令为:

python -m SimpleHTTPServer 8070

(1)建立本地服务器

方式1:利用cmd命令窗口

在Server文件夹下打开cmd命令窗口,并输入命令python -m http.server 8070,然后回车:

方式2:利用VSCode窗口

用VSCode打开用于升级的程序(Server文件夹),在终端ESP-IDF Terminal窗口输入命令python -m http.server 8070后回车,即可运行HTTP本地服务器:

(2)打开浏览器,获取http下载地址

输入http://192.168.1.100:8070/(输入电脑实际IP地址,可以在cmd命令窗口输入ipconfig查看),然后鼠标右键点击update_pack.bin,选择复制链接地址(http://:8070/update_pack.binhttp://192.168.1.100:8070/update_pack.binhttp://:8070/update_pack.bin):

4.2 修改http的url下载地址

4.2.1 更改url下载地址

将复制的地址http://192.168.1.100:8070/update_pack.bin粘贴到menuconfig的firmware upgrade url endpoint中:

4.2.2 烧录测试升级

(1)生成正式升级包

先把版本号改成v1.0.1,编译工程生成bin文件用做正式升级包,然后改名为update_pack.bin,并复制到Sever中替换原本的update_pack.bin,接着按照步骤4.1打开本地服务器。

(2)烧录初始代码

将版本号改回v1.0.0,编译下载,并打开串口监视。

(3)观察OTA升级现象

运行时显示当前版本为1.0.0:

升级过程:

复位后运行升级后的版本,发现变成v1.0.1了,说明升级成功了:

后续如有新的版本,照此方法放到Server文件夹中替换原本的update_pack.bin文件,即可完成升级。

5.注意事项

  • 电脑端和ESP32必须连接同一个WiFi热点,即电脑端和设备端必须连接同一个局域网。
  • 这种方法升级完成后如果不及时关闭本地服务器则会一直重复执行升级,要么升级完后及时关闭服务器,要么在代码中加入限制,防止重复升级。

6.总结

OTA升级的关键步骤:

  1. 修改flash大小和OTA分区
  2. 修改WiFi账号、密码
  3. 固件的下载地址

7.参考文档

图文手把手教程--ESP32 OTA空中升级(VSCODE+IDF)-CSDN博客

【ESP32】通过本地服务器实现OTA功能_esp32 ota-CSDN博客

2022.05 ESP32 空中升级 OTA_esp32c3 ota-CSDN博客

8.源码下载

https://download.csdn.net/download/Freddy_Ssc/90641093

思考:这种方式只能通过局域网升级,感觉有点鸡肋,在现实中有什么用处呢?

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

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

相关文章

BootStrap:进阶使用(其一)

今天我要讲述的是在BootStrap中进一步使用的方法与代码举例; 导航条 作为在应用或网站中作为导航页头的响应式基础组件。导航条在移动设备上可以折叠(且可开可关),在视口(viewport)宽度增加时逐渐变为水平展开模式 …

ffmpeg无损转格式的命令行

将ffmpeg.exe拖入命令行窗口 c:\users\zhangsan>D:\ffmpeg-2025-03-11\bin\ffmpeg.exe -i happy.mp4 -c:v copy -c:a copy 格式转换后.mkv -c:v copy 仅做拷贝视频,不重新编码 -c:a copy 仅做拷贝音频 ,不重新编码

【Linux】深入理解Linux文件系统:从C接口到内核设计哲学

文章目录 前言一、C语言中的文件接口1. 文件指针(句柄)FILE*以写方式打开文件,若文件不存在会新建一个文件W写入方式,在打开文件之前都会将文件内容全部清空追加写方式,其用法与写方法一致,不同在于a方法可…

国产品牌芯洲科技100V降压芯片系列

SCT2A25采用带集成环路补偿的恒导通时间(COT)模式控制,大大简化了转换器的片外配置。SCT2A25具有典型的140uA低静态电流,采用脉冲频率调制(PFM)模式,它使转换器在轻载或空载条件下实现高转换效率。 芯洲科技100V降压芯片系列提供丰富的48V系…

ctfshow-大赛原题-web702

因为该题没有理解到位,导致看wp也一直出错,特此反思一下。 参考yu22x师傅的文章 :CTFSHOW大赛原题篇(web696-web710)_ctfshow 大赛原题-CSDN博客 首先拿到题目: // www.zip 下载源码 我们的思路就是包含一个css文件,…

LabVIEW技巧——获取文件版本信息

获取可执行文件(exe)版本信息的几种方法 方法1. LabVIEW自带函数 labview自带了获取文件版本号的VI,但是没有开放到程序框图的函数选板中,在该目录下可以找到:...\LabVIEW 20xx\vi.lib\Platform\fileVersionInfo.llb…

三格电子——CAN 转光纤(点对点)布线常见问题

1、CAN 布线 (1)H 接 H ,L 接 L (2)两端设备挂 120 欧姆电阻 2、假如用点对点的 CAN 转光纤现实远程传输 (1)H 接 H ,L 接 L (2)光端机都挂 120 欧姆电阻 每个光端机挂的设备有一个加…

python进阶: 深入了解调试利器 Pdb

Python是一种广泛使用的编程语言,以其简洁和可读性著称。在开发和调试过程中,遇到错误和问题是不可避免的。Python为此提供了一个强大的调试工具——Pdb(Python Debugger)。 Pdb是Python标准库中自带的调试器,可以帮助…

React 设计艺术:如何精确拆分组件接口,实现接口隔离原则

接口隔离原则 接口隔离原则(Interface Segregation Principle,简称 ISP)也是面向对象设计中的重要原则之一。它的核心思想是,一个类不应该依赖它不需要的接口。在 React 开发中,遵循接口隔离原则可以提高代码的可维护性…

内部聊天软件,BeeWorks-安全的企业内部通讯软件

企业在享受数据便利的同时,如何保障企业数据安全已经成为无法回避的重要课题。BeeWorks作为一款专为企业设计的内部通讯软件,通过全链路的安全能力升维,为企业提供了一个安全、高效、便捷的沟通协作平台,全面保障企业数据安全。 …

【零基础】基于 MATLAB + Gurobi + YALMIP 的优化建模与求解全流程指南

MATLAB Gurobi YALMIP 综合优化教程(进阶) 本教程系统介绍如何在 MATLAB 环境中使用 YALMIP 建模,并通过 Gurobi 求解器高效求解线性、整数及非线性优化问题。适用于工程、运营研究、能源系统等领域的高级优化建模需求。 一、工具概览 1.…

Freertos----互斥量

一、为什么要使用互斥量? 我们想让任务A、B都执行add_a函数,a的最终结果是18817。 假设任务A运行完代码①,在执行代码②之前被任务B抢占了:现在任务A的R0等于1。 任务B执行完add_a函数,a等于9。 任务A继续运行&#…

高级java每日一道面试题-2025年4月11日-微服务篇[Nacos篇]-Nacos使用的数据库及其数据同步机制是什么?

如果有遗漏,评论区告诉我进行补充 面试官: Nacos使用的数据库及其数据同步机制是什么? 我回答: Nacos 使用的数据库及其数据同步机制详解 在微服务架构中,Nacos 作为服务注册与配置管理的核心组件,其数据存储和同步机制对系统的高可用性和…

揭秘大数据 | 22、软件定义存储

揭秘大数据 | 19、软件定义的世界-CSDN博客 揭秘大数据 | 20、软件定义数据中心-CSDN博客 揭秘大数据 | 21、软件定义计算-CSDN博客 老规矩,先把这个小系列的前三篇奉上。今天书接上文,接着叙软件定义存储的那些事儿。 软件定义存储源于VMware公司于…

git常用修改命令

1. 代码回退与历史修改 git reset 模式命令示例作用范围适用场景--softgit reset --soft HEAD~1仅移动 HEAD 指针重新提交之前的修改--mixedgit reset HEAD~1 (默认)重置暂存区取消已 add 但未提交的文件--hardgit reset --hard a1b2c3d彻底丢弃工作区和暂存区彻底回退到某个…

【ubuntu】linux开机自启动

目录 开机自启动: /etc/rc.loacl system V 使用/etc/rc*.d/系统运行优先级 遇到的问题: 1. Linux 系统启动阶段概述 方法1:/etc/rc5.d/ 脚本延时日志 方法二:使用 udev 规则来触发脚本执行 开机自启动: /etc/…

Python深度学习基础——深度神经网络(DNN)(PyTorch)

张量 数组与张量 PyTorch 作为当前首屈一指的深度学习库,其将 NumPy 数组的语法尽数吸收,作为自己处理张量的基本语法,且运算速度从使用 CPU 的数组进步到使用 GPU 的张量。 NumPy 和 PyTorch 的基础语法几乎一致,具体表现为&am…

光伏产品研发项目如何降本增效?8Manage 项目管理软件在复合材料制造的应用

在复合材料制造领域,特别是光伏PECVD石墨舟和燃料电池石墨双极板等高精尖产品的研发过程中,高效的项目管理直接决定了产品开发周期、质量和市场竞争力。然而,许多企业在项目立项、进度跟踪、资源分配和质量控制等环节面临挑战。 针对这些痛点…

linux的glib库使用

glib常用接口使用 1. glib介绍2. glib命令安装3. 获取glib的版本信息和兼容信息4. glib使用例子4.1 链表例子4.2 哈希表例子4.3 使用面向对象例子 1. glib介绍 广泛应用于桌面环境、嵌入式系统、GNOME等项目中。它提供了完整的面向对象编程模型(GObject&#xff09…

vs2022使用git方法

1、创建git 2、在cmd下执行 git push -f origin master ,会把本地代码全部推送到远程,同时会覆盖远程代码。 3、需要设置【Git全局设置】,修改的代码才会显示可以提交,否则是灰色的不能提交。 4、创建的分支,只要点击…