The ESP-IDF API in Rust, with support for each ESP chip (ESP32, ESP32S2, ESP32C3 etc.) based on the Rust target
esp-idf itself are all automatically
downloaded during the build by
pio (default): utilizing platformio (via
the embuild crate) ornative (experimental): utilizing native esp-idf tooling.pioThis is currently the default for installing all build tools and building the esp-idf C
library. It uses platformio via the
embuild crate.
In order to enable Bluetooth support with either Bluedroid or NimBLE, there is some additional work:
* Go to the root of your binary crate project (e.g., the "Hello, World" demo)
* Create a .cargo/config.toml file if it does not exist there yet. You can copy it from the "Hello, World" demo
* Include in it the following:
toml
[env]
...
ESP_IDF_SYS_GLOB_0 = { value = "/sdkconfig" }
* Next, create a file sdkconfig at the root of binary crate your project. This could be generated with cargo pio espidf menuconfig if you install cargo-pio (see below) but a minimal manual example follows:
c
CONFIG_BT_ENABLED=y
CONFIG_BTDM_CTRL_MODE_BLE_ONLY=y
CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY=n
CONFIG_BTDM_CTRL_MODE_BTDM=n
// Uncomment whichever of these you need
//CONFIG_BT_BLUEDROID_ENABLED=y
//CONFIG_BT_NIMBLE_ENABLED=y
sdkconfig fileTo enable Bluetooth, or do other configurations to the ESP-IDF sdkconfig you might take advantage of the cargo-pio Cargo subcommand:
* To install it, issue cargo install cargo-pio --git https://github.com/ivmarkov/cargo-pio
* To open the ESP-IDF interactive menuconfig system, issue cargo pio espidf menuconfig in the root of your binary crate project
* To use the generated/updated sdkconfig file, follow the steps described in the "Bluetooth Support" section
If you are interested how it all works under the hood, check the build_pio.rs or script of this crate.
nativeDownload all tools and build the esp-idf using its own tooling.
Warning: This is an experimental feature and subject to changes.
Currently, this build script installs all needed tools to compile the esp-idf as well as
the esp-idf itself using embuild::espidf::Installer. There are two locations where
the esp-idf source and tools are detected and installed:
~/.espressif$ESP_IDF_INSTALL_DIR or <crate workspace-dir>/.embuild/espressifesp32c3:
python >= 3.7Environment variables are used to configure how the esp-idf is compiled.
The following environment variables are used by the build script:
ESP_IDF_INSTALL_DIR:
The path to the directory where all esp-idf tools are installed. If it is set to a relative path, it is relative to the crate workspace-dir.
If not set, when ESP_IDF_GLOBAL_INSTALL is set to 1 it defaults to the global
install dir ~/.espressif, otherwise it defaults to the local install dir <crate
workspace-dir>/.embuild/espressif.
ESP_IDF_GLOBAL_INSTALL
If set to 1, true, y or yes uses the global install directory only when ESP_IDF_INSTALL_DIR is not specified.
ESP_IDF_VERSION:
The version used for the esp-idf can be one of the following:
commit:<hash>: Uses the commit <hash> of the esp-idf repository.
Note that this will clone the whole esp-idf not just one commit.tag:<tag>: Uses the tag <tag> of the esp-idf repository.branch:<branch>: Uses the branch <branch> of the esp-idf repository.v<major>.<minor> or <major>.<minor>: Uses the tag v<major>.<minor> of the esp-idf repository.<branch>: Uses the branch <branch> of the esp-idf repository.It defaults to v4.3.
ESP_IDF_REPOSITORY: The URL to the git repository of the esp-idf, defaults to https://github.com/espressif/esp-idf.git.ESP_IDF_SDKCONFIG_DEFAULTS: A ;-separated list of paths to sdkconfig.default files to be used as base
values for the sdkconfig.ESP_IDF_SDKCONFIG: A path (absolute or relative) to the esp-idf sdkconfig file.MCU: The mcu name (e.g. esp32 or esp32c3). If not set this will be automatically
detected from the cargo target.