# Examples This directory contains a range of example ESP-IDF projects. These are intended to demonstrate parts of 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/bluedroid` contains Classic BT, BLE and coex examples using default Bluedroid host stack. * `bluetooth/nimble` contains BLE examples using NimBLE host stack. * `bluetooth/esp_ble_mesh` contains ESP BLE Mesh examples. * `bluetooth/hci` contains HCI transport (VHCI and HCI UART) examples * `ethernet` contains Ethernet examples. * `get-started` contains some very simple examples with minimal functionality. * `mesh` contains Wi-Fi Mesh examples. * `peripherals` contains examples showing driver functionality for the various onboard ESP32 peripherals. * `protocols` contains examples showing network protocol interactions. * `storage` contains examples showing data storage methods using SPI flash or external storage like the SD/MMC interface. * `system` contains examples which demonstrate some internal chip features, or debugging & development tools. * `wifi` contains examples of advanced Wi-Fi features. (For network protocol examples, see `protocols` instead.) * `build_system` contains examples of build system features # Using Examples Building an example is the same as building any other project: * Follow the Getting Started instructions which include building the "Hello World" example. * Change into the directory of the new example you'd like to build. * Run `idf.py menuconfig` to open the project configuration menu. Most examples have a project-specific "Example Configuration" section here (for example, to set the WiFi SSID & password to use). * `idf.py build` to build the example. * Follow the printed instructions to flash, or run `idf.py -p PORT flash`. ## Running Test Python Script Some of the examples have `..._test.py` scripts that are used to test that the example works as expected. These scripts run automatically in the internal test queue. They are not intended to be run by ESP-IDF users but sometimes you may want to run them locally. The following requirements must be met in the IDF python virtual environment. * ttfw needs to be in the `PYTHONPATH`. Add it like this: `export PYTHONPATH=$PYTHONPATH:$IDF_PATH/tools/ci/python_packages` * Install all requirements from `tools/ci/python_packages/ttfw_idf/requirements.txt`: `python -m pip install -r $IDF_PATH/tools/ci/python_packages/ttfw_idf/requirements.txt` These commands help solve the issue with `ModuleNotFoundError: No module named 'ttfw_idf'` and `ModuleNotFoundError: No module named 'tiny_test_fw'`. Some examples might fail due to other missing packages. You might need to install them manually: `pip install websocket`. # 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](https://github.com/espressif/esp-idf-template). # 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.