MCPcopy Index your code
hub / github.com/esp-rs/esp-idf-svc

github.com/esp-rs/esp-idf-svc @v0.51.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.51.0 ↗ · + Follow
1,425 symbols 2,701 edges 85 files 261 documented · 18% updated 13d ago★ 52752 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Safe Rust wrappers for the services in the ESP IDF SDK

CI crates.io Documentation Matrix Wokwi

Highlights

  • Supports almost all ESP IDF services: timers, event loop, Wifi, Ethernet, HTTP client & server, MQTT, WS, NVS, OTA, etc.
  • Implements the traits of embedded-svc
  • Blocking and async mode for each service (async support where feasible)
  • Re-exports esp-idf-hal and esp-idf-sys as esp_idf_svc::hal and esp_idf_svc::sys. You only need to depend on esp_idf_svc to get everything you need

You might want to also check out the ESP IDF Drivers wrappers, and the raw bindings to ESP IDF in the esp-idf-sys crate!

Build Prerequisites

Follow the Prerequisites section in the esp-idf-template crate.

Examples

The examples could be built and flashed conveniently with cargo-espflash. To run e.g. wifi 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 wifi --monitor
MCU "--target"
esp32c2 riscv32imc-esp-espidf
esp32c3 riscv32imc-esp-espidf
esp32c6 riscv32imac-esp-espidf
esp32h2 riscv32imac-esp-espidf
esp32p4 riscv32imafc-esp-espidf
esp32 xtensa-esp32-espidf
esp32s2 xtensa-esp32s2-espidf
esp32s3 xtensa-esp32s3-espidf

Setting up a "Hello, world!" binary crate with ESP IDF

Use the esp-idf-template project. Everything would be arranged and built for you automatically - no need to manually clone the ESP IDF repository.

More information

For more information, check out: * The Rust on ESP Book * The ESP Embedded Training * The esp-idf-template project * The embedded-svc project * The esp-idf-hal project * The embedded-hal project * The esp-idf-sys project * The Rust for Xtensa toolchain * The Rust-with-STD demo project

Extension points exported contracts — how you extend this code

EspEventSource (Interface)
# Safety By implementing this trait, the user guarantees that the binary format serialized/deserialized by `EspTypedEve [8 …
src/eventloop.rs
RawHandle (Interface)
Wrapper around ESP-IDF raw handles [21 implementers]
src/handle.rs
NetifStatus (Interface)
(no doc) [16 implementers]
src/netif.rs
Mode (Interface)
A trait shared between the `Host` and `RCP` modes providing the option for these to do additional initialization. [2 implementers]
src/thread.rs
EspHttpTraversableChainNonstatic (Interface)
# Safety Implementing this trait means that the chain can contain non-`'static` handlers and that the chain can be used [2 …
src/http/server.rs
BtMode (Interface)
(no doc) [3 implementers]
src/bt.rs
NvsPartitionId (Interface)
(no doc) [3 implementers]
src/nvs.rs
NonBlocking (Interface)
(no doc) [3 implementers]
src/wifi.rs

Core symbols most depended-on inside this repo

len
called by 106
src/wifi.rs
to_cstring_arg
called by 101
src/private/cstr.rs
lock
called by 95
src/private/mutex.rs
as_ptr
called by 93
src/private/cstr.rs
clone
called by 62
src/nvs.rs
as_bytes
called by 29
src/bt.rs
get
called by 26
src/private/waitable.rs
start
called by 21
src/eth.rs

Shape

Method 979
Class 205
Function 114
Enum 106
Interface 21

Languages

Rust100%

Modules by API surface

src/wifi.rs123 symbols
src/thread.rs92 symbols
src/netif.rs82 symbols
src/eth.rs74 symbols
src/http/server.rs63 symbols
src/bt/gap.rs58 symbols
src/eventloop.rs53 symbols
src/tls.rs50 symbols
src/bt/hfp.rs45 symbols
src/nvs.rs42 symbols
src/mqtt/client.rs41 symbols
src/partition.rs40 symbols

For agents

$ claude mcp add esp-idf-svc \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page