ESP32 OTA升级

2023-05-16

目录

一、ESP32 OTA升级原理

1. ESP32固件编译

2. 固件的远程传输

二、基于ESP32HTTPUpdate库的OTA升级

1. 硬件准备

2. 软件实现

三、注意事项

1. 升级文件大小限制

2. WiFi稳定性

3. 固件版本号

结语


        OTA(Over-The-Air)升级,是指通过无线网络对设备进行在线的升级。通俗的说,就是通过网络对设备进行在线升级,而不需要连接设备的 USB 接口或者其他的 JTAG/SWD 等工具。ESP32作为一款功能强大的单片机,具有WiFi和蓝牙通信功能,因此可以实现OTA升级。本文将介绍ESP32如何实现OTA升级,包括代码示例,代码讲解以及注意事项等等。

一、ESP32 OTA升级原理

        ESP32 OTA升级主要分为两步:编写固件与固件的远程传输。ESP32固件编译生成APP BIN文件,通过网络传输升级至ESP32控制的设备。以下分别对两个步骤进行详细的讲解。

1. ESP32固件编译

        ESP32固件编译主要是生成一个APP BIN文件,用于进行OTA升级。在进行OTA升级之前,必须编译出可供 OTA 升级用的APP BIN 文件。这个 APP BIN 文件一定要经过gen_esp32part.py 转换成 .bin 的格式,否则会导致 STM32Flash 工具无法烧录进去。

        ESP32项目中需要在 menuconfig 里面配置OTA选项,具体配置如下:

        ① 进入 Component Config -> ESP32-specific,将Serial flasher config选项打开。

        ② 进入 Component Config -> OTA update,根据需要进行相应的配置。

        在进行OTA升级之前,需要在ESP32的bootloader中配置OTA服务器地址信息。在bootloader中,有两种方式可以配置OTA服务器地址:在项目中使用idf.py set-target 和 idf.py set-extras 命令设置OTA服务器地址,或者将OTA服务器地址写入到ESP32的EEPROM中。并且,在OTA升级期间,ESP32需要连接到WiFi网络,以保证能够成功连接到OTA服务器。

2. 固件的远程传输

        固件远程传输主要是将编译好的APP BIN文件通过网络传输到ESP32控制的设备中。在ESP32中,可以使用Arduino框架或者ESP-IDF进行OTA升级。本文主要介绍Arduino框架下的OTA升级。

        在Arduino IDE中,可以通过ESP32HTTPUpdate库或ESP32OTA库实现OTA升级。其中,ESP32HTTPUpdate库可以从指定的URL下载固件并进行升级;ESP32OTA库可以通过WiFi和MDNS查找到可 OTA 升级的设备,并进行OTA升级。

二、基于ESP32HTTPUpdate库的OTA升级

1. 硬件准备

        在进行OTA升级之前,需要将ESP32与LED灯连接起来,下面是具体的连接方式:

        ① 将LED正极连接到GPIO13

        ② 将LED负极通过220欧姆的电阻连接到地线

2. 软件实现

        在实现OTA升级功能之前,需要在Arduino IDE中安装ESP32HTTPUpdate库。然后,可以运行以下代码,实现OTA升级功能:

#include <WiFi.h>
#include <HTTPClient.h>
#include <ESP32httpUpdate.h>
const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";
const char* serverUrl = "http://你的OTA服务器URL/OTA.bin";
void setup() 
{
    Serial.begin(9600);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) 
    {
        delay(1000);
        Serial.println("Connecting to WiFi..");
    }
    Serial.println("Connected to WiFi");
    Serial.println("Checking for updates...");
    t_httpUpdate_return ret = ESPhttpUpdate.update(serverUrl);
    switch(ret) 
    {
        case HTTP_UPDATE_FAILED:
            Serial.printf("HTTP_UPDATE_FAILED Error (%d): %s\n", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str());
            break;
        case HTTP_UPDATE_NO_UPDATES:
            Serial.println("HTTP_UPDATE_NO_UPDATES");
            break;
        case HTTP_UPDATE_OK:
            Serial.println("HTTP_UPDATE_OK");
            break;
    }
}
void loop() 
{
}

        在上述代码中,首先需要通过WiFi连接到指定的SSID和密码。然后,调用ESPhttpUpdate类的update函数,将OTA服务器的URL传递给它。

        update函数将会下载固件文件,并将其写入到OTA分区中。如果一切顺利,update函数会返回HTTP_UPDATE_OK。如果发生了错误,ESP32会尝试异步升级,直到升级成功或是到达最大错误重试次数。

        最后,需要在串口监视器中查看OTA升级的结果。如果升级成功,将看到HTTP_UPDATE_OK消息。

三、注意事项

        在使用ESP32进行OTA升级时,需要注意以下几点:

1. 升级文件大小限制

        在进行OTA升级之前,需要先执行 menuconfig 并优化分区表。具体的操作如下:

进入目录:IDF_PATH/components/partition_table
 执行命令:python partition_table_generator.py -q

        这条命令会根据 components/partition_table/template.csv 生成         components/partition_table/partitions_two_ota.csv 文件。之后打开 menuconfig,设置 “Partition Table”(分区表),选择 “Custom partition table CSV”。如下所示:

我的自定义分区表csv文件的内容如下:
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x6000,
otadata, data, ota, 0xf000, 0x2000,
app0, app, ota_0, 0x10000, 1000K,
app1, app, ota_1, ,1000K,

2. WiFi稳定性

        在进行OTA升级之前,需要确保ESP32已经连接到了WiFi,并且具有足够的网络稳定性,以保证成功进行OTA升级。如果网络不稳定或者连接的WiFi质量不好,可能会导致OTA升级失败。

3. 固件版本号

        在进行OTA升级之前,需要将新版本的固件与旧版本进行比较,确保新版本的固件版本号比旧版本的固件版本号 更高。

结语

        本文主要介绍了ESP32如何实现OTA升级,包括代码示例、代码讲解以及注意事项等等。读者可以通过学习本文,了解ESP32 OTA升级的原理和实现方式,并可以应用到实际项目中。同时,也需要注意OTA升级期间的一些注意事项,以保证升级成功。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ESP32 OTA升级 的相关文章

随机推荐

  • PX4学习笔记(2)

    1 PX4编译和仿真 1 1 第一次使用PX4 1 1 1 打开jMAVSim 找到PX4 Autopilot文件夹 xff08 2023 02 13 xff0c 新版本的PX4找不到Firmware了 xff0c 只有PX4 Autopi
  • 关于SKYDROID图传接收机无法在win10电脑上显示图像的问题分析

    因为此前图传接收机无法在win10电脑上显示图像 xff0c 多次尝试后 xff0c 我重新安装了WIN10系统 xff0c 发现禁用笔记本摄像头头 xff0c 在相机内能看到图像 xff0c 了 因此以为问题解决了 xff0c 继续安装其
  • PX4 ulg文件转换为csv(WPS或Excel打开)

    介绍 ulg文件为PX4的飞行日志文件 xff0c 可以通过python的pyulog库转换成scv格式 xff0c 用表格工具打开 下载pyulog 首先保证你的windows电脑内安装了python 3 win 43 R打开cmd 输入
  • Ubuntu18.04虚拟机MQTT服务器(1)——安装宝塔服务器面板与MQTT服务器

    1 虚拟机安装ubuntu18 04 使用VMware安装Ubuntu 18 04 64位系统 2 Ubuntu修改镜像源 在Software amp Update内修改镜像源为清华源 更新 3 安装ssh 输入以下命令 xff0c 安装远
  • ESP-01S烧录及使用,连接本地MQTT服务器

    网上的教程大多无法正常烧录与使用 xff0c 因此在这里进行总结 1 ESP 01S烧录 固件烧录建议使用专用的烧录器 xff0c 十分省心 本文讨论的是使用普通的CH340串口模块进行烧写 必须使用的工具 xff1a 杜邦线 CH340串
  • Qt学习笔记(2)——添加串口程序与调试

    1 串口调试程序总体布局 Qt版本大于5 1 1 1 在pro文件内添加serialport QT 43 61 serialport 1 2 在 h文件内添加库文件 include lt QtSerialPort gt 1 3 添加实例 h
  • AES CBC和CTR加解密实例

    AES xff08 Advanced Encryption Standard xff0c 高级加密标准 xff09 又叫Rijndael加密法 xff0c 用来替代DES算法 常见AES加密模式有ECB CBC CFB OFB和CTR等五种
  • 关于vuex使用常量替代 Mutation 事件类型的好处

    官方文档有说常量的好处 xff0c 但是的确没用过 xff0c 也不怎么懂 xff0c 就我目前有用的了解来说 在后面项目中使用了常量有如下好处 1 常量更容易避免程序出现错误 如果把一个值赋给程序中的一个常量 xff0c 而该常量已经有一
  • 多传感器融合及其应用

    后续会更新部分算法详细内容 多传感器融合及其应用 1 引言 现代雷达信息处理技术 现代雷达信息处理技术分为三个层次 xff1a 雷达信号处理与目标检测 但不雷达数据处理和多部雷达系统数据融合 有时也分别称为雷达信息一次处理 雷达信息二次处理
  • 《结构化编程》— LED灯为例

    你有过看很久以前项目代码看不太懂的情况吗 xff1f 你有过做一个项目就要从零重构代码的烦恼吗 xff1f 你有过那种遇到项目后无从入手编写的困扰吗 xff1f 诸君且看 xff0c 我是如何用一个LED灯代码去做结构化编程的 xff0c
  • 《FPGA学习》->点亮一颗LED灯

    x1f34e 与其担心未来 xff0c 不如现在好好努力 在这条路上 xff0c 只有奋斗才能给你安全感 你若努力 xff0c 全世界都会为你让路 大家刚开始接触硬件编程的话 xff0c 我想大多都是从点亮一颗LED灯开始 xff0c 学习
  • 《FPGA学习》->流水灯设计

    x1f34e 与其担心未来 xff0c 不如现在好好努力 在这条路上 xff0c 只有奋斗才能给你安全感 你若努力 xff0c 全世界都会为你让路 用verilog HDL语言设计一个FPGA的流水灯程序 xff0c 要求时序满足下图所示
  • 《FPGA学习》->多个按键控制LED灯

    x1f34e 与其担心未来 xff0c 不如现在好好努力 在这条路上 xff0c 只有奋斗才能给你安全感 你若努力 xff0c 全世界都会为你让路 本次项目任务 xff0c 利用开发板上的4个按键KEY1 xff0c KEY2 xff0c
  • 《FPGA学习》->呼吸灯

    x1f34e 与其担心未来 xff0c 不如现在好好努力 在这条路上 xff0c 只有奋斗才能给你安全感 你若努力 xff0c 全世界都会为你让路 呼吸灯 xff0c 简而言之就像人类呼吸一样 xff0c 有节奏的让LED灯从 xff1a
  • 《FPGA学习》->蜂鸣器播放

    x1f34e 与其担心未来 xff0c 不如现在好好努力 在这条路上 xff0c 只有奋斗才能给你安全感 你若努力 xff0c 全世界都会为你让路 蜂鸣器的发声原理由振动装置和谐振装置组成 xff0c 而蜂鸣器又分为无源他激型与有源自激型
  • 基于STM32的语音控制电机

    号外号外 单片机项目实战课程又更新了 炸弹 大家好 我是 朽木自雕i 一个闲暇时间用来敲敲代码 画画板子 焊焊电路 玩玩单片机 搞搞Linux 写写Blog记录成长的技术人er 很高兴再次见
  • ESP32单片机入门篇

    目录 一 ESP32单片机的基本概念 1 双核架构 2 Wi Fi和蓝牙功能 3 集成多种外设 4 支持多种操作系统 二 开发环境 1 Arduino IDE 2 ESP IDF 三 开发语言 四 注意事项 五 代码例程 xff08 1 x
  • 什么是死锁,产生死锁的原因及必要条件

    什么是死锁 xff1f 所谓死锁 xff0c 是指多个进程在运行过程中因争夺资源而造成的一种僵局 xff0c 当进程处于这种僵持状态时 xff0c 若无外力作用 xff0c 它们都将无法再向前推进 因此我们举个例子来描述 xff0c 如果此
  • ESP32红外控制舵机

    目录 一 ESP32红外解码 二 ESP32舵机控制 三 ESP32红外控制舵机 结语 ESP32作为一款功能强大的单片机 xff0c 常被应用于物联网 智能家居 智能硬件等领域 与其他单片机相比 xff0c ESP32具有更高的运行速度和
  • ESP32 OTA升级

    目录 一 ESP32 OTA升级原理 1 ESP32固件编译 2 固件的远程传输 二 基于ESP32HTTPUpdate库的OTA升级 1 硬件准备 2 软件实现 三 注意事项 1 升级文件大小限制 2 WiFi稳定性 3 固件版本号 结语