在 ESP32 Arduino 环境中生成烧写文件并通过 WiFi 进行 OTA(Over-The-Air)升级的步骤如下:
一、生成烧写文件(.bin 文件)
-
编译项目
在 Arduino IDE 中打开项目,点击 ✓(验证/编译) 按钮完成编译。
-
获取 .bin 文件路径
-
手动导出 .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 代码
- 通过 USB 将上述代码烧录到 ESP32(使用 Arduino IDE 的常规上传方式)。
- 串口监视器中记录 ESP32 的 IP 地址(如
192.168.1.100 )。
步骤 3:通过 PC/手机进行 OTA 升级
方法 1:使用 Arduino IDE(推荐)
- 菜单栏 → 工具 → 端口 → 选择 ESP32 的 IP 地址(如
esp32-abcdef at 192.168.1.100 )。
- 点击 →(上传) 按钮,IDE 将自动通过 WiFi 上传固件。
方法 2:使用网页浏览器
- 访问
http://<ESP32_IP>/update (如 http://192.168.1.100/update )。
- 选择生成的
.bin 文件并上传。
方法 3:使用命令行工具(curl)
curl -F "update=@/path/to/YourSketchName.ino.bin" http://<ESP32_IP>/update
方法 4:使用手机 APP
- Android 应用:ESP32 OTA Updater、IoT OTA Updater。
- 输入 ESP32 的 IP 地址,选择
.bin 文件进行更新。
三、关键注意事项
-
首次烧录
OTA 功能必须通过 USB 首次烧录,后续才能无线更新。
-
分区表要求
确保分区表包含 ota_0 和 ota_1 分区(默认 Default 4MB with spiffs 已支持)。
-
固件大小限制
.bin 文件大小不能超过 OTA 分区容量(通常约 1.5MB)。若超限:
- 优化代码或减少库依赖。
- 选择更大的分区方案(如
Huge APP )。
-
网络稳定性
OTA 过程中需保持 WiFi 连接稳定,断电会导致设备变砖。
-
安全增强
ArduinoOTA.setPassword("admin"); // 设置 OTA 密码
ArduinoOTA.setPort(8266); // 更改默认端口(3232)
四、故障排查
- 无法连接 OTA:检查防火墙是否阻止端口(默认 3232)。
- 上传失败:确认
.bin 文件匹配当前芯片型号(ESP32/ESP32-S2 等)。
- 进度卡住:重启 ESP32 并重试,或检查 WiFi 信号强度。
通过上述步骤,可高效实现 ESP32 的无线固件更新。 |