ESP32-简单OTA升级
2025-09-10 来源:cnblogs
基于ESP-IDF4.1
1 #include 'freertos/FreeRTOS.h'
2 #include 'freertos/task.h'
3 #include 'esp_system.h'
4 #include 'esp_event.h'
5 #include 'esp_log.h'
6 #include 'esp_ota_ops.h'
7 #include 'esp_http_client.h'
8 #include 'esp_https_ota.h'
9 #include 'protocol_examples_common.h'
10 #include 'string.h'
11
12 #include 'nvs.h'
13 #include 'nvs_flash.h'
14 #include 'protocol_examples_common.h'
15
16 #if CONFIG_EXAMPLE_CONNECT_WIFI
17 #include 'esp_wifi.h'
18 #endif
19
20 static const char *TAG = 'simple_ota_example';
21 extern const uint8_t server_cert_pem_start[] asm('_binary_ca_cert_pem_start');
22 extern const uint8_t server_cert_pem_end[] asm('_binary_ca_cert_pem_end');
23
24 #define OTA_URL_SIZE 256
25
26 //http事件处理程序
27 esp_err_t _http_event_handler(esp_http_client_event_t *evt)
28 {
29 switch (evt->event_id) {
30 case HTTP_EVENT_ERROR:
31 ESP_LOGD(TAG, 'HTTP_EVENT_ERROR');
32 break;
33 case HTTP_EVENT_ON_CONNECTED:
34 ESP_LOGD(TAG, 'HTTP_EVENT_ON_CONNECTED');
35 break;
36 case HTTP_EVENT_HEADER_SENT:
37 ESP_LOGD(TAG, 'HTTP_EVENT_HEADER_SENT');
38 break;
39 case HTTP_EVENT_ON_HEADER:
40 ESP_LOGD(TAG, 'HTTP_EVENT_ON_HEADER, key=%s, value=%s', evt->header_key, evt->header_value);
41 break;
42 case HTTP_EVENT_ON_DATA:
43 ESP_LOGD(TAG, 'HTTP_EVENT_ON_DATA, len=%d', evt->data_len);
44 break;
45 case HTTP_EVENT_ON_FINISH:
46 ESP_LOGD(TAG, 'HTTP_EVENT_ON_FINISH');
47 break;
48 case HTTP_EVENT_DISCONNECTED:
49 ESP_LOGD(TAG, 'HTTP_EVENT_DISCONNECTED');
50 break;
51 }
52 return ESP_OK;
53 }
54
55 //OTA任务
56 void simple_ota_example_task(void *pvParameter)
57 {
58 ESP_LOGI(TAG, 'Starting OTA example');
59
60 esp_http_client_config_t config = {
61 .url = CONFIG_EXAMPLE_FIRMWARE_UPGRADE_URL,
62 .cert_pem = (char *)server_cert_pem_start,
63 .event_handler = _http_event_handler,
64 };
65
66 #ifdef CONFIG_EXAMPLE_FIRMWARE_UPGRADE_URL_FROM_STDIN
67 char url_buf[OTA_URL_SIZE];
68 if (strcmp(config.url, 'FROM_STDIN') == 0) {
69 example_configure_stdin_stdout();
70 fgets(url_buf, OTA_URL_SIZE, stdin);
71 int len = strlen(url_buf);
72 url_buf[len - 1] = '




