85 lines
2.4 KiB
Markdown
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;
|
|
}
|
|
}
|
|
```
|