From 1886d8d4ef73bfcaa1c999b15a3db078948db849 Mon Sep 17 00:00:00 2001 From: suda-morris <362953310@qq.com> Date: Wed, 22 May 2019 17:56:10 +0800 Subject: [PATCH] update ota examples to support both Wi-Fi and Ethernet --- examples/system/ota/OTA_workflow.png | Bin 58211 -> 0 bytes examples/system/ota/README.md | 155 ++++++++---------- .../ota/advanced_https_ota/CMakeLists.txt | 4 + .../system/ota/advanced_https_ota/Makefile | 2 + .../advanced_https_ota/main/Kconfig.projbuild | 20 +-- .../main/advanced_https_ota_example.c | 76 ++------- .../ota/advanced_https_ota/sdkconfig.defaults | 4 + .../ota/native_ota_example/CMakeLists.txt | 4 + .../system/ota/native_ota_example/Makefile | 2 + .../native_ota_example/main/Kconfig.projbuild | 22 +-- .../main/native_ota_example.c | 81 ++------- examples/system/ota/ota_workflow.png | Bin 0 -> 114546 bytes .../ota/simple_ota_example/CMakeLists.txt | 6 +- .../system/ota/simple_ota_example/Makefile | 2 + .../simple_ota_example/main/Kconfig.projbuild | 19 +-- .../main/simple_ota_example.c | 112 ++++--------- .../softAP/main/softap_example_main.c | 10 +- 17 files changed, 162 insertions(+), 357 deletions(-) delete mode 100644 examples/system/ota/OTA_workflow.png create mode 100644 examples/system/ota/advanced_https_ota/sdkconfig.defaults create mode 100644 examples/system/ota/ota_workflow.png diff --git a/examples/system/ota/OTA_workflow.png b/examples/system/ota/OTA_workflow.png deleted file mode 100644 index 3e91dafb3801df54ddd86cceb069d6ecf9bae75f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58211 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:/`, e.g. `https://192.168.2.106:8070/hello-world.bin` + * **Notes:** The server part of this URL (e.g. `192.168.2.106`) must match the **CN** field used when [generating the certificate and key](#run-https-server). -Open a new terminal to run the HTTP server, then run these commands to build the example and start the server: +### Build and Flash -Build the example: +Enter `make -j4 flash monitor` if you are using GNU Make based build system or enter `idf.py build flash monitor` if you are using CMake based build system. This command will find if partition table has ota_data partition (as in our case) then ota_data will erase to initial. It allows to run the newly loaded app from a factory partition. -``` -cd $IDF_PATH/examples/get-started/hello_world -make -cd build -``` +(To exit the serial monitor, type ``Ctrl-]``.) -Generate self-signed certificate and key: +See the [Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/latest/get-started/index.html) for full steps to configure and use ESP-IDF to build projects. -*NOTE: `Common Name` of server certificate should be host-name of your server.* +## Example Output -``` -openssl req -x509 -newkey rsa:2048 -keyout ca_key.pem -out ca_cert.pem -days 365 +### Run HTTPS Server -``` +After a successful build, we need to create a self-signed certificate and run a simple HTTPS server as follows: -* openssl configuration may require you to enter a passphrase for the key. -* When prompted for the `Common Name (CN)`, enter the name of the server that the ESP32 will connect to. For this local example, it is probably the IP address. The HTTPS client will make sure that the `CN` matches the address given in the HTTPS URL (see Step 3). +![create_self_signed_certificate](https://dl.espressif.com/dl/esp-idf/docs/_static/ota_self_signature.gif) +* Enter a directory where holds the root of the HTTPS server, e.g. `cd build`. +* To create a new self-signed certificate and key, you can simply run command `openssl req -x509 -newkey rsa:2048 -keyout ca_key.pem -out ca_cert.pem -days 365 -nodes`. + * When prompted for the `Common Name (CN)`, enter the name of the server that the ESP32 will connect to. Regarding this example, it is probably the IP address. The HTTPS client will make sure that the `CN` matches the address given in the HTTPS URL. +* To start the HTTPS server, you can simply run command `openssl s_server -WWW -key ca_key.pem -cert ca_cert.pem -port 8070`. +* In the same directory, there should be the firmware (e.g. hello-world.bin) that ESP32 will download later. It can be any other ESP-IDF application as well, as long as you also update the `Firmware Upgrade URL` in the menuconfig. The only difference is that when flashed via serial the binary is flashed to the "factory" app partition, and an OTA update flashes to an OTA app partition. +* **Notes:** If you have any firewall software running that will block incoming access to port *8070*, configure it to allow access while running the example. +* **Notes:** For Windows users, you should add `winpty` before `openssl` command: + * `winpty openssl req -x509 -newkey rsa:2048 -keyout ca_key.pem -out ca_cert.pem -days 365 -nodes` + * `winpty openssl s_server -WWW -key ca_key.pem -cert ca_cert.pem -port 8070` -Copy the certificate to `server_certs` directory inside OTA example directory: +### Flash Certificate to ESP32 + +Before you flash the example, make sure to copy the generated certificate to `server_certs` directory inside OTA example directory so that it can be flashed into ESP32 together with the firmware, e.g. `cp ca_cert.pem ../server_certs/`. ``` cp ca_cert.pem /path/to/ota/example/server_certs/ ``` +### Internal workflow of the OTA Example -Start the HTTPS server: +When the example starts up, it will print "Starting OTA example" to the console and then: -``` -openssl s_server -WWW -key ca_key.pem -cert ca_cert.pem -port 8070 -``` - -NB: You've probably noticed there is nothing special about the "hello world" example when used for OTA updates. This is because any .bin app file which is built by esp-idf can be used as an app image for OTA. The only difference is that when flashed via serial the binary is flashed to the "factory" app partition, and an OTA update flashes to an OTA app partition. - -If you have any firewall software running that will block incoming access to port 8070, configure it to allow access while running the example. - -### Step 3: Build OTA Example - -Change back to the OTA example directory, and type `make menuconfig` to configure the OTA example. Under the "Example Configuration" submenu, fill in the following details: - -* WiFi SSID & Password -* Firmware Upgrade URL. The URL will be look like this: - -``` -https://:/ - -for e.g, -https://192.168.0.3:8070/hello-world.bin -``` - -Note: The server part of this URL (e.g. `192.168.0.3`) must match the CN used when generating the certificate and key in Step 2. - -Save your changes, and type `make` to build the example. - -### Step 4: Flash OTA Example - -When flashing, use the `make flash` to flash the factory image. This command will find if partition table has ota_data partition (as in our case) then ota_data will erase to initial. -It allows to run the newly loaded app from a factory partition. - -``` -make flash -``` - -After first update, if you want to return back to factory app (or the first OTA partition, if factory partition is not present) then use the command `make erase_otadata`. -It erases the ota_data partition to initial state. **Take note that this assumes that the partition table of this project is the one that is on the device**. - -### Step 5: Run the OTA Example - -When the example starts up, it will print "Starting OTA example..." then: - -1. Connect to the AP with configured SSID and password. -2. Connect to the HTTP server and download the new image. +1. Connect to the AP with configured SSID and Password (Wi-Fi case) or just by Ethernet. +2. Connect to the HTTPS server and download the new image. 3. Write the image to flash, and configure the next boot from this image. 4. Reboot -## Support the rollback +If you want to rollback to factory app (or the first OTA partition when the factory partition do not exist) after the upgrade, then run the command `make erase_otadata` or `idf.py erase_otadata`. It can erase the ota_data partition to initial state. -This feature allows you to roll back to the previous firmware if the app is not operable. Option :ref:`CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE` allows you to track the first boot of the application (see the``Over The Air Updates (OTA)`` article). -For ``native_ota_example``, added a bit of code to demonstrate how a rollback works. To use it, you need enable the :ref:`CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE` option in Kconfig and under the "Example Configuration" submenu to set "Number of the GPIO input for diagnostic" to manage the rollback process. +**Notes:** This assumes that the partition table of this project is the one that is on the device. + +### Output from HTTPS server + +```bash +FILE:hello-world.bin +ACCEPT +``` + + +## Support rollback + +This feature allows you to roll back to the previous firmware if the app is not operable. Option `CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE` allows you to track the first boot of the application (see the ``Over The Air Updates (OTA)`` article). +For ``native_ota_example``, added a bit of code to demonstrate how a rollback works. To use it, you need enable the `CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE` option in menuconfig and under the "Example Configuration" submenu to set "Number of the GPIO input for diagnostic" to manage the rollback process. To trigger a rollback, this GPIO must be pulled low while the message `Diagnostics (5 sec)...` which will be on first boot. If GPIO is not pulled low then the operable of the app will be confirmed. @@ -138,12 +122,7 @@ In ``native_ota_example``, ``$PROJECT_PATH/version.txt`` is used to define the v * Check your PC can ping the ESP32 at its IP, and that the IP, AP and other configuration settings are correct in menuconfig. * Check if any firewall software is preventing incoming connections on the PC. -* Check whether you can see the configured file (default hello-world.bin), by checking the output of following command: - - ``` - curl -v https://:/ - ``` - +* Check whether you can see the configured file (default hello-world.bin), by checking the output of the command `curl -v https://:/` * If you have another PC or a phone, try viewing the file listing from the separate host. ### Error "ota_begin error err=0x104" diff --git a/examples/system/ota/advanced_https_ota/CMakeLists.txt b/examples/system/ota/advanced_https_ota/CMakeLists.txt index 3386014f6..7f8b1cb53 100644 --- a/examples/system/ota/advanced_https_ota/CMakeLists.txt +++ b/examples/system/ota/advanced_https_ota/CMakeLists.txt @@ -2,5 +2,9 @@ # in this exact order for cmake to work correctly cmake_minimum_required(VERSION 3.5) +# (Not part of the boilerplate) +# This example uses an extra component for common functions such as Wi-Fi and Ethernet connection. +set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common) + include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(advanced_https_ota) diff --git a/examples/system/ota/advanced_https_ota/Makefile b/examples/system/ota/advanced_https_ota/Makefile index 301cf1eb9..df5c335c4 100644 --- a/examples/system/ota/advanced_https_ota/Makefile +++ b/examples/system/ota/advanced_https_ota/Makefile @@ -5,5 +5,7 @@ PROJECT_NAME := advanced_https_ota +EXTRA_COMPONENT_DIRS = $(IDF_PATH)/examples/common_components/protocol_examples_common + include $(IDF_PATH)/make/project.mk diff --git a/examples/system/ota/advanced_https_ota/main/Kconfig.projbuild b/examples/system/ota/advanced_https_ota/main/Kconfig.projbuild index 3bfb01794..22b772a05 100644 --- a/examples/system/ota/advanced_https_ota/main/Kconfig.projbuild +++ b/examples/system/ota/advanced_https_ota/main/Kconfig.projbuild @@ -1,21 +1,9 @@ menu "Example Configuration" - config EXAMPLE_WIFI_SSID - string "WiFi SSID" - default "myssid" - help - SSID (network name) for the example to connect to. - - config EXAMPLE_WIFI_PASSWORD - string "WiFi Password" - default "mypassword" - help - WiFi password (WPA or WPA2) for the example to use. - config EXAMPLE_FIRMWARE_UPGRADE_URL - string "firmware upgrade url endpoint" - default "https://192.168.0.3:8070/hello-world.bin" + string "Firmware Upgrade URL" + default "https://192.168.2.106:8070/hello-world.bin" help - URL of server which hosts the firmware - image. + URL of server which hosts the firmware image. + endmenu diff --git a/examples/system/ota/advanced_https_ota/main/advanced_https_ota_example.c b/examples/system/ota/advanced_https_ota/main/advanced_https_ota_example.c index e2cd48e42..c2b01e144 100644 --- a/examples/system/ota/advanced_https_ota/main/advanced_https_ota_example.c +++ b/examples/system/ota/advanced_https_ota/main/advanced_https_ota_example.c @@ -6,75 +6,25 @@ software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ -#include "string.h" +#include #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/event_groups.h" - #include "esp_system.h" -#include "esp_wifi.h" +#include "esp_event.h" #include "esp_event_loop.h" #include "esp_log.h" #include "esp_ota_ops.h" #include "esp_http_client.h" #include "esp_https_ota.h" - #include "nvs.h" #include "nvs_flash.h" +#include "protocol_examples_common.h" static const char *TAG = "advanced_https_ota_example"; extern const uint8_t server_cert_pem_start[] asm("_binary_ca_cert_pem_start"); extern const uint8_t server_cert_pem_end[] asm("_binary_ca_cert_pem_end"); -/* FreeRTOS event group to signal when we are connected & ready to make a request */ -static EventGroupHandle_t wifi_event_group; - -/* The event group allows multiple bits for each event, - but we only care about one event - are we connected - to the AP with an IP? */ -const int CONNECTED_BIT = BIT0; - -static esp_err_t event_handler(void *ctx, system_event_t *event) -{ - switch (event->event_id) { - case SYSTEM_EVENT_STA_START: - esp_wifi_connect(); - break; - case SYSTEM_EVENT_STA_GOT_IP: - xEventGroupSetBits(wifi_event_group, CONNECTED_BIT); - break; - case SYSTEM_EVENT_STA_DISCONNECTED: - /* This is a workaround as ESP32 WiFi libs don't currently - auto-reassociate. */ - esp_wifi_connect(); - xEventGroupClearBits(wifi_event_group, CONNECTED_BIT); - break; - default: - break; - } - return ESP_OK; -} - -static void initialise_wifi(void) -{ - tcpip_adapter_init(); - wifi_event_group = xEventGroupCreate(); - ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) ); - wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); - ESP_ERROR_CHECK( esp_wifi_init(&cfg) ); - ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) ); - wifi_config_t wifi_config = { - .sta = { - .ssid = CONFIG_EXAMPLE_WIFI_SSID, - .password = CONFIG_EXAMPLE_WIFI_PASSWORD, - }, - }; - ESP_LOGI(TAG, "Setting WiFi configuration SSID %s", wifi_config.sta.ssid); - ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) ); - ESP_ERROR_CHECK( esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) ); - ESP_ERROR_CHECK( esp_wifi_start() ); -} - static esp_err_t validate_image_header(esp_app_desc_t *new_app_info) { if (new_app_info == NULL) { @@ -94,24 +44,20 @@ static esp_err_t validate_image_header(esp_app_desc_t *new_app_info) return ESP_OK; } -void advanced_ota_example_task(void * pvParameter) +void advanced_ota_example_task(void *pvParameter) { ESP_LOGI(TAG, "Starting Advanced OTA example"); - xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, - false, true, portMAX_DELAY); - ESP_LOGI(TAG, "Connected to WiFi network! Attempting to connect to server..."); - esp_err_t ota_finish_err = ESP_OK; esp_http_client_config_t config = { .url = CONFIG_EXAMPLE_FIRMWARE_UPGRADE_URL, .cert_pem = (char *)server_cert_pem_start, }; - + esp_https_ota_config_t ota_config = { .http_config = &config, }; - + esp_https_ota_handle_t https_ota_handle = NULL; esp_err_t err = esp_https_ota_begin(&ota_config, &https_ota_handle); if (err != ESP_OK) { @@ -171,7 +117,15 @@ void app_main() } ESP_ERROR_CHECK( err ); - initialise_wifi(); + tcpip_adapter_init(); + ESP_ERROR_CHECK(esp_event_loop_create_default()); + + /* This helper function configures Wi-Fi or Ethernet, as selected in menuconfig. + * Read "Establishing Wi-Fi or Ethernet Connection" section in + * examples/protocols/README.md for more information about this function. + */ + ESP_ERROR_CHECK(example_connect()); + xTaskCreate(&advanced_ota_example_task, "advanced_ota_example_task", 1024 * 8, NULL, 5, NULL); } diff --git a/examples/system/ota/advanced_https_ota/sdkconfig.defaults b/examples/system/ota/advanced_https_ota/sdkconfig.defaults new file mode 100644 index 000000000..2289a8230 --- /dev/null +++ b/examples/system/ota/advanced_https_ota/sdkconfig.defaults @@ -0,0 +1,4 @@ +# Default sdkconfig parameters to use the OTA +# partition table layout, with a 4MB flash size +CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y +CONFIG_PARTITION_TABLE_TWO_OTA=y diff --git a/examples/system/ota/native_ota_example/CMakeLists.txt b/examples/system/ota/native_ota_example/CMakeLists.txt index 9e1828169..9cb3fe6e4 100644 --- a/examples/system/ota/native_ota_example/CMakeLists.txt +++ b/examples/system/ota/native_ota_example/CMakeLists.txt @@ -2,5 +2,9 @@ # in this exact order for cmake to work correctly cmake_minimum_required(VERSION 3.5) +# (Not part of the boilerplate) +# This example uses an extra component for common functions such as Wi-Fi and Ethernet connection. +set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common) + include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(native_ota) diff --git a/examples/system/ota/native_ota_example/Makefile b/examples/system/ota/native_ota_example/Makefile index 3bcbefac0..064142850 100644 --- a/examples/system/ota/native_ota_example/Makefile +++ b/examples/system/ota/native_ota_example/Makefile @@ -5,5 +5,7 @@ PROJECT_NAME := native_ota +EXTRA_COMPONENT_DIRS = $(IDF_PATH)/examples/common_components/protocol_examples_common + include $(IDF_PATH)/make/project.mk diff --git a/examples/system/ota/native_ota_example/main/Kconfig.projbuild b/examples/system/ota/native_ota_example/main/Kconfig.projbuild index fb50b5a1e..15c4390b8 100644 --- a/examples/system/ota/native_ota_example/main/Kconfig.projbuild +++ b/examples/system/ota/native_ota_example/main/Kconfig.projbuild @@ -1,26 +1,10 @@ menu "Example Configuration" - config EXAMPLE_WIFI_SSID - string "WiFi SSID" - default "myssid" - help - SSID (network name) for the example to connect to. - - config EXAMPLE_WIFI_PASSWORD - string "WiFi Password" - default "mypassword" - help - WiFi password (WPA or WPA2) for the example to use. - - Can be left blank if the network has no security set. - config EXAMPLE_FIRMWARE_UPG_URL - string "HTTP Server URL" - default "https://192.168.0.3:8070/hello-world.bin" + string "Firmware Upgrade URL" + default "https://192.168.2.106:8070/hello-world.bin" help - HTTP Server IP to download the image file from. - - See example README.md for details. + URL of server which hosts the firmware image. config EXAMPLE_GPIO_DIAGNOSTIC int "Number of the GPIO input for diagnostic" diff --git a/examples/system/ota/native_ota_example/main/native_ota_example.c b/examples/system/ota/native_ota_example/main/native_ota_example.c index 4b5f15881..638743892 100644 --- a/examples/system/ota/native_ota_example/main/native_ota_example.c +++ b/examples/system/ota/native_ota_example/main/native_ota_example.c @@ -6,27 +6,22 @@ software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ -#include "string.h" +#include #include "freertos/FreeRTOS.h" #include "freertos/task.h" -#include "freertos/event_groups.h" - #include "esp_system.h" -#include "esp_wifi.h" +#include "esp_event.h" #include "esp_event_loop.h" #include "esp_log.h" #include "esp_ota_ops.h" #include "esp_http_client.h" #include "esp_flash_partitions.h" #include "esp_partition.h" - #include "nvs.h" #include "nvs_flash.h" #include "driver/gpio.h" +#include "protocol_examples_common.h" -#define EXAMPLE_WIFI_SSID CONFIG_EXAMPLE_WIFI_SSID -#define EXAMPLE_WIFI_PASS CONFIG_EXAMPLE_WIFI_PASSWORD -#define EXAMPLE_SERVER_URL CONFIG_EXAMPLE_FIRMWARE_UPG_URL #define BUFFSIZE 1024 #define HASH_LEN 32 /* SHA-256 digest length */ @@ -36,55 +31,6 @@ static char ota_write_data[BUFFSIZE + 1] = { 0 }; extern const uint8_t server_cert_pem_start[] asm("_binary_ca_cert_pem_start"); extern const uint8_t server_cert_pem_end[] asm("_binary_ca_cert_pem_end"); -/* FreeRTOS event group to signal when we are connected & ready to make a request */ -static EventGroupHandle_t wifi_event_group; - -/* The event group allows multiple bits for each event, - but we only care about one event - are we connected - to the AP with an IP? */ -const int CONNECTED_BIT = BIT0; - -static esp_err_t event_handler(void *ctx, system_event_t *event) -{ - switch (event->event_id) { - case SYSTEM_EVENT_STA_START: - esp_wifi_connect(); - break; - case SYSTEM_EVENT_STA_GOT_IP: - xEventGroupSetBits(wifi_event_group, CONNECTED_BIT); - break; - case SYSTEM_EVENT_STA_DISCONNECTED: - /* This is a workaround as ESP32 WiFi libs don't currently - auto-reassociate. */ - esp_wifi_connect(); - xEventGroupClearBits(wifi_event_group, CONNECTED_BIT); - break; - default: - break; - } - return ESP_OK; -} - -static void initialise_wifi(void) -{ - tcpip_adapter_init(); - wifi_event_group = xEventGroupCreate(); - ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) ); - wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); - ESP_ERROR_CHECK( esp_wifi_init(&cfg) ); - ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) ); - wifi_config_t wifi_config = { - .sta = { - .ssid = EXAMPLE_WIFI_SSID, - .password = EXAMPLE_WIFI_PASS, - }, - }; - ESP_LOGI(TAG, "Setting WiFi configuration SSID %s...", wifi_config.sta.ssid); - ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) ); - ESP_ERROR_CHECK( esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) ); - ESP_ERROR_CHECK( esp_wifi_start() ); -} - static void http_cleanup(esp_http_client_handle_t client) { esp_http_client_close(client); @@ -128,7 +74,7 @@ static void ota_example_task(void *pvParameter) esp_ota_handle_t update_handle = 0 ; const esp_partition_t *update_partition = NULL; - ESP_LOGI(TAG, "Starting OTA example..."); + ESP_LOGI(TAG, "Starting OTA example"); const esp_partition_t *configured = esp_ota_get_boot_partition(); const esp_partition_t *running = esp_ota_get_running_partition(); @@ -141,15 +87,8 @@ static void ota_example_task(void *pvParameter) ESP_LOGI(TAG, "Running partition type %d subtype %d (offset 0x%08x)", running->type, running->subtype, running->address); - /* Wait for the callback to set the CONNECTED_BIT in the - event group. - */ - xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, - false, true, portMAX_DELAY); - ESP_LOGI(TAG, "Connect to Wifi ! Start to Connect to Server...."); - esp_http_client_config_t config = { - .url = EXAMPLE_SERVER_URL, + .url = CONFIG_EXAMPLE_FIRMWARE_UPG_URL, .cert_pem = (char *)server_cert_pem_start, }; esp_http_client_handle_t client = esp_http_client_init(&config); @@ -330,6 +269,14 @@ void app_main() } ESP_ERROR_CHECK( err ); - initialise_wifi(); + tcpip_adapter_init(); + ESP_ERROR_CHECK(esp_event_loop_create_default()); + + /* This helper function configures Wi-Fi or Ethernet, as selected in menuconfig. + * Read "Establishing Wi-Fi or Ethernet Connection" section in + * examples/protocols/README.md for more information about this function. + */ + ESP_ERROR_CHECK(example_connect()); + xTaskCreate(&ota_example_task, "ota_example_task", 8192, NULL, 5, NULL); } diff --git a/examples/system/ota/ota_workflow.png b/examples/system/ota/ota_workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..d48fb8fd63a0bd815e2d5037da4edf684ca7d462 GIT binary patch literal 114546 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 UpES{!ObGCh5RnzG5Y+YiA4;uRiU0rr literal 0 HcmV?d00001 diff --git a/examples/system/ota/simple_ota_example/CMakeLists.txt b/examples/system/ota/simple_ota_example/CMakeLists.txt index ae979292d..2d8bd77c4 100644 --- a/examples/system/ota/simple_ota_example/CMakeLists.txt +++ b/examples/system/ota/simple_ota_example/CMakeLists.txt @@ -2,5 +2,9 @@ # in this exact order for cmake to work correctly cmake_minimum_required(VERSION 3.5) +# (Not part of the boilerplate) +# This example uses an extra component for common functions such as Wi-Fi and Ethernet connection. +set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common) + include($ENV{IDF_PATH}/tools/cmake/project.cmake) -project(simple_ota) \ No newline at end of file +project(simple_ota) diff --git a/examples/system/ota/simple_ota_example/Makefile b/examples/system/ota/simple_ota_example/Makefile index 63bca1abe..63c0d6be2 100644 --- a/examples/system/ota/simple_ota_example/Makefile +++ b/examples/system/ota/simple_ota_example/Makefile @@ -5,5 +5,7 @@ PROJECT_NAME := simple_ota +EXTRA_COMPONENT_DIRS = $(IDF_PATH)/examples/common_components/protocol_examples_common + include $(IDF_PATH)/make/project.mk diff --git a/examples/system/ota/simple_ota_example/main/Kconfig.projbuild b/examples/system/ota/simple_ota_example/main/Kconfig.projbuild index 3bfb01794..c5be1f276 100644 --- a/examples/system/ota/simple_ota_example/main/Kconfig.projbuild +++ b/examples/system/ota/simple_ota_example/main/Kconfig.projbuild @@ -1,21 +1,8 @@ menu "Example Configuration" - config EXAMPLE_WIFI_SSID - string "WiFi SSID" - default "myssid" - help - SSID (network name) for the example to connect to. - - config EXAMPLE_WIFI_PASSWORD - string "WiFi Password" - default "mypassword" - help - WiFi password (WPA or WPA2) for the example to use. - config EXAMPLE_FIRMWARE_UPGRADE_URL - string "firmware upgrade url endpoint" - default "https://192.168.0.3:8070/hello-world.bin" + string "Firmware Upgrade URL" + default "https://192.168.2.106:8070/hello-world.bin" help - URL of server which hosts the firmware - image. + URL of server which hosts the firmware image. endmenu diff --git a/examples/system/ota/simple_ota_example/main/simple_ota_example.c b/examples/system/ota/simple_ota_example/main/simple_ota_example.c index 026f86032..1b63aec18 100644 --- a/examples/system/ota/simple_ota_example/main/simple_ota_example.c +++ b/examples/system/ota/simple_ota_example/main/simple_ota_example.c @@ -8,111 +8,53 @@ */ #include "freertos/FreeRTOS.h" #include "freertos/task.h" -#include "freertos/event_groups.h" - #include "esp_system.h" -#include "esp_wifi.h" +#include "esp_event.h" #include "esp_event_loop.h" #include "esp_log.h" #include "esp_ota_ops.h" #include "esp_http_client.h" #include "esp_https_ota.h" - #include "nvs.h" #include "nvs_flash.h" +#include "protocol_examples_common.h" static const char *TAG = "simple_ota_example"; extern const uint8_t server_cert_pem_start[] asm("_binary_ca_cert_pem_start"); extern const uint8_t server_cert_pem_end[] asm("_binary_ca_cert_pem_end"); -/* FreeRTOS event group to signal when we are connected & ready to make a request */ -static EventGroupHandle_t wifi_event_group; - -/* The event group allows multiple bits for each event, - but we only care about one event - are we connected - to the AP with an IP? */ -const int CONNECTED_BIT = BIT0; - esp_err_t _http_event_handler(esp_http_client_event_t *evt) { - switch(evt->event_id) { - case HTTP_EVENT_ERROR: - ESP_LOGD(TAG, "HTTP_EVENT_ERROR"); - break; - case HTTP_EVENT_ON_CONNECTED: - ESP_LOGD(TAG, "HTTP_EVENT_ON_CONNECTED"); - break; - case HTTP_EVENT_HEADER_SENT: - ESP_LOGD(TAG, "HTTP_EVENT_HEADER_SENT"); - break; - case HTTP_EVENT_ON_HEADER: - ESP_LOGD(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value); - break; - case HTTP_EVENT_ON_DATA: - ESP_LOGD(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len); - break; - case HTTP_EVENT_ON_FINISH: - ESP_LOGD(TAG, "HTTP_EVENT_ON_FINISH"); - break; - case HTTP_EVENT_DISCONNECTED: - ESP_LOGD(TAG, "HTTP_EVENT_DISCONNECTED"); - break; - } - return ESP_OK; -} - -static esp_err_t event_handler(void *ctx, system_event_t *event) -{ - switch (event->event_id) { - case SYSTEM_EVENT_STA_START: - esp_wifi_connect(); + switch (evt->event_id) { + case HTTP_EVENT_ERROR: + ESP_LOGD(TAG, "HTTP_EVENT_ERROR"); break; - case SYSTEM_EVENT_STA_GOT_IP: - xEventGroupSetBits(wifi_event_group, CONNECTED_BIT); + case HTTP_EVENT_ON_CONNECTED: + ESP_LOGD(TAG, "HTTP_EVENT_ON_CONNECTED"); break; - case SYSTEM_EVENT_STA_DISCONNECTED: - /* This is a workaround as ESP32 WiFi libs don't currently - auto-reassociate. */ - esp_wifi_connect(); - xEventGroupClearBits(wifi_event_group, CONNECTED_BIT); + case HTTP_EVENT_HEADER_SENT: + ESP_LOGD(TAG, "HTTP_EVENT_HEADER_SENT"); break; - default: + case HTTP_EVENT_ON_HEADER: + ESP_LOGD(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value); + break; + case HTTP_EVENT_ON_DATA: + ESP_LOGD(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len); + break; + case HTTP_EVENT_ON_FINISH: + ESP_LOGD(TAG, "HTTP_EVENT_ON_FINISH"); + break; + case HTTP_EVENT_DISCONNECTED: + ESP_LOGD(TAG, "HTTP_EVENT_DISCONNECTED"); break; } return ESP_OK; } -static void initialise_wifi(void) -{ - tcpip_adapter_init(); - wifi_event_group = xEventGroupCreate(); - ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) ); - wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); - ESP_ERROR_CHECK( esp_wifi_init(&cfg) ); - ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) ); - wifi_config_t wifi_config = { - .sta = { - .ssid = CONFIG_EXAMPLE_WIFI_SSID, - .password = CONFIG_EXAMPLE_WIFI_PASSWORD, - }, - }; - ESP_LOGI(TAG, "Setting WiFi configuration SSID %s", wifi_config.sta.ssid); - ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) ); - ESP_ERROR_CHECK( esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) ); - ESP_ERROR_CHECK( esp_wifi_start() ); -} - -void simple_ota_example_task(void * pvParameter) +void simple_ota_example_task(void *pvParameter) { ESP_LOGI(TAG, "Starting OTA example"); - /* Wait for the callback to set the CONNECTED_BIT in the - event group. - */ - xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, - false, true, portMAX_DELAY); - ESP_LOGI(TAG, "Connected to WiFi network! Attempting to connect to server..."); - esp_http_client_config_t config = { .url = CONFIG_EXAMPLE_FIRMWARE_UPGRADE_URL, .cert_pem = (char *)server_cert_pem_start, @@ -141,8 +83,16 @@ void app_main() ESP_ERROR_CHECK(nvs_flash_erase()); err = nvs_flash_init(); } - ESP_ERROR_CHECK( err ); + ESP_ERROR_CHECK(err); + + tcpip_adapter_init(); + ESP_ERROR_CHECK(esp_event_loop_create_default()); + + /* This helper function configures Wi-Fi or Ethernet, as selected in menuconfig. + * Read "Establishing Wi-Fi or Ethernet Connection" section in + * examples/protocols/README.md for more information about this function. + */ + ESP_ERROR_CHECK(example_connect()); - initialise_wifi(); xTaskCreate(&simple_ota_example_task, "ota_example_task", 8192, NULL, 5, NULL); } diff --git a/examples/wifi/getting_started/softAP/main/softap_example_main.c b/examples/wifi/getting_started/softAP/main/softap_example_main.c index 014c43963..515e3618e 100644 --- a/examples/wifi/getting_started/softAP/main/softap_example_main.c +++ b/examples/wifi/getting_started/softAP/main/softap_example_main.c @@ -9,7 +9,6 @@ #include #include "freertos/FreeRTOS.h" #include "freertos/task.h" -#include "freertos/event_groups.h" #include "esp_system.h" #include "esp_wifi.h" #include "esp_event.h" @@ -28,12 +27,9 @@ #define EXAMPLE_ESP_WIFI_PASS CONFIG_ESP_WIFI_PASSWORD #define EXAMPLE_MAX_STA_CONN CONFIG_ESP_MAX_STA_CONN -/* FreeRTOS event group to signal when we are connected*/ -static EventGroupHandle_t s_wifi_event_group; - static const char *TAG = "wifi softAP"; -static void wifi_event_handler(void* arg, esp_event_base_t event_base, +static void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) { if (event_id == WIFI_EVENT_AP_STACONNECTED) { @@ -49,8 +45,6 @@ static void wifi_event_handler(void* arg, esp_event_base_t event_base, void wifi_init_softap() { - s_wifi_event_group = xEventGroupCreate(); - tcpip_adapter_init(); ESP_ERROR_CHECK(esp_event_loop_create_default()); @@ -89,7 +83,7 @@ void app_main() ret = nvs_flash_init(); } ESP_ERROR_CHECK(ret); - + ESP_LOGI(TAG, "ESP_WIFI_MODE_AP"); wifi_init_softap(); }