ECDSA based Secure Boot V2 is not functional for certain input vectors on ESP32-C5/C61/H2/P4 and on the preview targets ESP32-H4/H21. RSA based Secure Boot V2 is the recommended scheme where the SoC supports it. This issue will be fixed in a future hardware ECO revision; more details will be shared through the hardware errata document. A new hidden Kconfig option SECURE_BOOT_V2_ECDSA_INSECURE marks the affected mass-production SoCs (ESP32-C5/C61/H2/P4). On these SoCs, when hardware Secure Boot V2 is enabled, the ECDSA (V2) signing scheme is no longer offered by default; it must be turned on explicitly via SECURE_BOOT_V2_FORCE_ENABLE_ECDSA under "Allow potentially insecure options" (CONFIG_SECURE_BOOT_INSECURE). App signing without hardware Secure Boot is not affected. Note that ESP32-C61 has no RSA based Secure Boot V2, so it has no Secure Boot scheme enabled by default. The preview targets ESP32-H4 and ESP32-H21 mark ECDSA Secure Boot V2 as not supported in their SoC capabilities instead of using the option above. As ESP32-H4 has no other Secure Boot V2 scheme, Secure Boot is disabled entirely on it; ESP32-H21 retains RSA based Secure Boot V2. The security documentation keeps the ECDSA Secure Boot V2 content visible and adds a warning describing the limitation (including that ECDSA Secure Boot V2 on ESP32-C61 is not recommended for production). CI apps that exercise ECDSA Secure Boot V2 on the affected SoCs set CONFIG_SECURE_BOOT_V2_FORCE_ENABLE_ECDSA accordingly.
Examples
This directory contains a range of example ESP-IDF projects. These examples are intended to demonstrate parts of the ESP-IDF functionality, and to provide code that you can copy and adapt into your own projects.
Example Layout
The examples are grouped into subdirectories by category. Each category directory contains one or more example projects:
bluetooth/bluedroidClassic BT, BLE and coex examples using default Bluedroid host stack.bluetooth/nimbleBLE examples using NimBLE host stack.bluetooth/esp_ble_meshESP BLE Mesh examples.bluetooth/hciHCI transport (VHCI and HCI UART) examples.build_systemExamples of build system features.cxxC++ language utilization examples and experimental components.ethernetEthernet network examples.get-startedSimple examples with minimal functionality. Good start point for beginners.ieee802154IEEE802.15.4 examples.meshWi-Fi Mesh examples.networkExamples related to general network environment, test & analysis.openthreadOpenThread examples.peripheralsExamples showing driver functionality for the various onboard ESP32 peripherals.protocolsExamples showing network protocol interactions.securityExamples about security features.storageExamples showing data storage methods using SPI flash, external storage like the SD/MMC interface and flash partitioning.systemDemonstrates some internal chip features, or debugging & development tools.wifiAdvanced Wi-Fi features (For network protocol examples, seeprotocolsinstead.)ZigbeeZigbee network and device examples.
In addition to these examples, commmon_components directory contains code shared by several examples.
Using Examples
Before building an example, follow the ESP-IDF Getting Started to ensure you have the required development environment.
Set Chip Target
First of all, your target must be supported by both:
- By your ESP-IDF version: For the full list of supported targets, run:
idf.py --list-targets - By this example: For the full list of supported targets, refer to the supported targets table at the top of this README.
After you make sure that your target is supported, go to your example project directory and set the chip target:
idf.py set-target <target>
For example, to set esp32 as the chip target, run:
idf.py set-target esp32
Configure the Project
For information about Kconfig options, see Project Configuration.
To conveniently check or modify Kconfig options for this example in a project configuration menu, run:
idf.py menuconfig
Build and Flash
Execute the following command to build the project, flash it to your development board, and run the monitor tool to view the serial output:
idf.py build flash monitor
This command can be reduced to idf.py flash monitor.
If the above command fails, check the log on the serial monitor which usually provides information on the possible cause of the issue.
To exit the serial monitor, use Ctrl + ].
Running Test Python Script (pytest)
Some of the examples have pytest_....py scripts that are using the pytest as the test framework. For detailed information, please refer to the "Run the Tests Locally" Section under ESP-IDF tests in Pytest documentation
Using pytest is the recommended way to write new tests. We will migrate all the example test scripts to this new framework soon.
Copying Examples
Each example is a standalone project. The examples do not have to be inside the esp-idf directory. You can copy an example directory to anywhere on your computer in order to make a copy that you can modify and work with.
The IDF_PATH environment variable is the only thing that connects the example to the rest of ESP-IDF.
If you're looking for a more bare-bones project to start from, try esp-idf-template.
Further Development
For further steps on how to develop a project, see the following:
- Managing the project:
- IDF Frontend document
- ESP-IDF Getting Started video (YouTube, bilibili)
- Overview of an example project
- Build System document
- Writing code:
- Write your own code following the API references
Contributing Examples
If you have a new example you think we'd like, please consider sending it to us as a Pull Request.
In the ESP-IDF documentation, you can find a "Creating Examples" page which lays out the steps to creating a top quality example.