Files
2026-10-17 20:41:08 +03:00

85 lines
2.4 KiB
Markdown

# ESP32 ESP-IDF component for simple OTA server
## Features
1. HTTP-based OTA firmware updates via standard HTTP POST requests.
2. Automatic partition management with next available OTA partition detection.
3. Embedded web interface for browser-based firmware uploads.
4. Automatic boot activation and device reboot after successful update.
5. Chunked data reception with 1000-byte blocks for efficient memory usage.
6. Seamless integration with ESP-IDF HTTP server and OTA APIs.
7. Comprehensive error handling with detailed error reporting.
8. Low memory footprint with minimal RAM consumption.
## Using
In an existing project, run the following command to install the component:
```bash
cd ../your_project/components
git clone https://github.com/aZholtikov/zh_ota_server
```
In the application, include the header:
```c
#include "zh_ota_server.h"
```
## Attention
1. The firmware upload path is fixed to /zh_ota_server and cannot be changed.
2. The zh_ota_server_init function must be called only once during application lifetime.
3. Memory allocated for the URI path is never freed.
4. Flashing an invalid firmware image may render the device unbootable.
## Examples
### Basic Example
```c
#include "nvs_flash.h"
#include "esp_wifi.h"
#include "zh_ota_server.h"
#define WIFI_SSID "SSID"
#define WIFI_PASS "password"
static httpd_handle_t http_server_handle = NULL;
void app_main(void)
{
esp_log_level_set("zh_ota_server", ESP_LOG_ERROR);
nvs_flash_init();
esp_event_loop_create_default();
esp_netif_init();
esp_netif_create_default_wifi_ap();
wifi_init_config_t wifi_config = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&wifi_config);
wifi_config_t ap_config = {
.ap = {
.ssid = WIFI_SSID,
.password = WIFI_PASS,
.max_connection = 4,
.authmode = WIFI_AUTH_WPA2_PSK,
},
};
esp_wifi_set_mode(WIFI_MODE_AP);
esp_wifi_set_config(WIFI_IF_AP, &ap_config);
esp_wifi_start();
httpd_config_t config = HTTPD_DEFAULT_CONFIG();
esp_err_t ret = httpd_start(&http_server_handle, &config);
if (ret != ESP_OK)
{
printf("HTTP server start error: %s\n", esp_err_to_name(ret));
return;
}
ret = zh_ota_server_init(http_server_handle, "/ota");
if (ret != ESP_OK)
{
printf("OTA server init error: %s\n", esp_err_to_name(ret));
return;
}
}
```