ESP32的WIFI OTA
在 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 Updater**、**IoT OTA Updater**。
* 输入 ESP32 的 IP 地址,选择 `.bin` 文件进行更新。
---
### 三、关键注意事项
1. **首次烧录**
OTA 功能必须通过 USB 首次烧录,后续才能无线更新。
2. **分区表要求**
确保分区表包含 `ota_0` 和 `ota_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 的无线固件更新。
页:
[1]