cargo driven and automatically downloads & configures everything by default; no need to download the ESP IDF SDK manually, or set up a C toolchainYou might want to also check out the type safe Rust wrappers built on top of these raw bindings: - Type safe wrappers for ESP IDF Services - Type safe wrappers for ESP IDF Drivers
Note
esp-idf-sys's build script will download the esp-idf, its gcc toolchain, and build it. To show progress and build information about this process run cargo with the-vv(very verbose) flag, so that build script output is also displayed. This is especially useful since the initial build will take a while.
Please note that all esp-idf-* crates are a community effort, in that Espressif puts little to no paid developer time in these.
So while ESP-IDF itself is very popular and well tested, the esp-idf-* crates:
- Might be a bit lagging behind the latest stable ESP-IDF version
- Are (currently) missing HIL tests
- Need more documentation
For a HAL which is officially supported by Espressif (as in - with paid developer time), please look at esp-hal. Keep in mind that esp-hal is no_std-only, does not use ESP-IDF and requires async programming.
Follow the Prerequisites section in the esp-idf-template crate.
Read the documentation here.
The examples could be built and flashed conveniently with cargo-espflash. To run e.g. std_basics on an e.g. ESP32-C3:
(Swap the Rust target and example name with the target corresponding for your ESP32 MCU and with the example you would like to build)
with cargo-espflash:
$ MCU=esp32c3 cargo espflash flash --target riscv32imc-esp-espidf --example std_basics --monitor
| MCU | "--target" |
|---|---|
| esp32c2 | riscv32imc-esp-espidf |
| esp32c3 | riscv32imc-esp-espidf |
| esp32c5 | riscv32imac-esp-espidf |
| esp32c6 | riscv32imac-esp-espidf |
| esp32c61 | riscv32imac-esp-espidf |
| esp32h2 | riscv32imac-esp-espidf |
| esp32p4 | riscv32imafc-esp-espidf |
| esp32 | xtensa-esp32-espidf |
| esp32s2 | xtensa-esp32s2-espidf |
| esp32s3 | xtensa-esp32s3-espidf |
Use the esp-idf-template project. Everything would be arranged and built for you automatically - no need to manually clone the ESP IDF repository.
For more information, check out: - The Rust on ESP Book - The ESP Embedded Training - The esp-idf-template project - The esp-idf-svc project - The esp-idf-hal project - The embedded-svc project - The embedded-hal project - The Rust for Xtensa toolchain - The Rust-with-STD demo project
$ claude mcp add esp-idf-sys \
-- python -m otcore.mcp_server <graph>