基于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] = '