打印

ESP32的WIFI OTA

[复制链接]
79|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
keer_zu|  楼主 | 2025-5-30 16:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

在 ESP32 Arduino 环境中生成烧写文件并通过 WiFi 进行 OTA(Over-The-Air)升级的步骤如下:


一、生成烧写文件(.bin 文件)

  1. 编译项目 在 Arduino IDE 中打开项目,点击 ✓(验证/编译) 按钮完成编译。

  2. 获取 .bin 文件路径

    • 编译成功后,查看 IDE 底部的 黑色输出窗口

    • 找到类似以下路径(不同系统路径格式略有差异):

      /tmp/arduino_build_123456/YourSketchName.ino.bin
      • 关键文件
        • YourSketchName.ino.bin(主程序固件)
        • YourSketchName.ino.bootloader.bin(引导程序)
        • YourSketchName.ino.partitions.bin(分区表)
  3. 手动导出 .bin 文件(可选)

    • 菜单栏 → 项目导出已编译的二进制文件
    • 文件将生成在项目目录下的 build 子文件夹中。

二、通过 WiFi 进行 OTA 升级(需提前部署 OTA 代码)

步骤 1:在 ESP32 代码中集成 OTA 功能

#include <WiFi.h>
#include <ESPmDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

const char* ssid = "Your_WiFi_SSID";
const char* password = "Your_WiFi_Password";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected! IP: " + WiFi.localIP());

  // 配置 OTA
  ArduinoOTA
    .onStart([]() {
      Serial.println("OTA Update Start");
    })
    .onEnd([]() {
      Serial.println("\nOTA Update Complete!");
    })
    .onProgress([](unsigned int progress, unsigned int total) {
      Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
    })
    .onError([](ota_error_t error) {
      Serial.printf("Error[%u]: ", error);
      if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
      else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
      else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
      else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
      else if (error == OTA_END_ERROR) Serial.println("End Failed");
    });

  ArduinoOTA.begin(); // 启动 OTA 服务
  Serial.println("OTA Ready");
}

void loop() {
  ArduinoOTA.handle(); // 处理 OTA 请求
}

步骤 2:首次烧录 OTA 代码

  1. 通过 USB 将上述代码烧录到 ESP32(使用 Arduino IDE 的常规上传方式)。
  2. 串口监视器中记录 ESP32 的 IP 地址(如 192.168.1.100)。

步骤 3:通过 PC/手机进行 OTA 升级

方法 1:使用 Arduino IDE(推荐)
  1. 菜单栏 → 工具端口 → 选择 ESP32 的 IP 地址(如 esp32-abcdef at 192.168.1.100)。
  2. 点击 →(上传) 按钮,IDE 将自动通过 WiFi 上传固件。
方法 2:使用网页浏览器
  1. 访问 http://<ESP32_IP>/update(如 http://192.168.1.100/update)。
  2. 选择生成的 .bin 文件并上传。
方法 3:使用命令行工具(curl)
curl -F "update=@/path/to/YourSketchName.ino.bin" http://<ESP32_IP>/update
方法 4:使用手机 APP
  • Android 应用:ESP32 OTA UpdaterIoT OTA Updater
  • 输入 ESP32 的 IP 地址,选择 .bin 文件进行更新。

三、关键注意事项

  1. 首次烧录 OTA 功能必须通过 USB 首次烧录,后续才能无线更新。

  2. 分区表要求 确保分区表包含 ota_0ota_1 分区(默认 Default 4MB with spiffs 已支持)。

  3. 固件大小限制 .bin 文件大小不能超过 OTA 分区容量(通常约 1.5MB)。若超限:

    • 优化代码或减少库依赖。
    • 选择更大的分区方案(如 Huge APP)。
  4. 网络稳定性 OTA 过程中需保持 WiFi 连接稳定,断电会导致设备变砖。

  5. 安全增强

    ArduinoOTA.setPassword("admin"); // 设置 OTA 密码
    ArduinoOTA.setPort(8266);        // 更改默认端口(3232)

四、故障排查

  • 无法连接 OTA:检查防火墙是否阻止端口(默认 3232)。
  • 上传失败:确认 .bin 文件匹配当前芯片型号(ESP32/ESP32-S2 等)。
  • 进度卡住:重启 ESP32 并重试,或检查 WiFi 信号强度。

通过上述步骤,可高效实现 ESP32 的无线固件更新。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1446

主题

12782

帖子

53

粉丝