A minimal async‑Rust starter project for the ESP32‑S3 built on top of Embassy and the esp-idf-hal ecosystem.
- Runtime Wi‑Fi configuration (AP ⇄ STA)
- If no credentials are compiled in, the board boots as an Access Point named `esp-wifi` at 192.168.1.1.
- Connect to that network and open
http://192.168.1.1in a browser to enter your home SSID and password. - After reboot the device starts in Station mode and automatically reconnects on subsequent boots.
- Async Web server with Server‑Sent Events (SSE) and a simple WebSocket echo endpoint.
- Async HTTP client for outbound REST/OTA download requests.
- Dual‑core execution using two Embassy executors with lock‑free channels for inter‑core messaging.
- On‑board NeoPixel (WS2812) driver for status LEDs and custom effects.
- EKV key‑value storage for persisting configuration and runtime state across reboots.
- Over‑the‑air (OTA) firmware update via HTTP with a fallback slot for safe roll‑backs.
- Rust stable with the nightly esp32s3-unknown-none-elf target installed
- ESP‑IDF v5.x prerequisites (
idf.py, tool‑chain in PATH) make,cargo-makeand Docker (optional)
make deps # one‑time setup of Rust/ESP‑IDF tooling
source "$HOME/export-esp.sh"
make build # produces build/esp32s3/firmware.binSet your Wi‑Fi credentials in the environment (optional):
export SSID="MyWiFi"
export PASSWORD="SuperSecret"Then flash and open the serial monitor:
make runmake docker-buildTip: After the first boot look at the serial monitor to find debug logs and the device's IP address when it joins your network.