ESP32-S3 firmware project using Embassy + Rust.
cargo esp-build-all-releaseespflash flash --port COM3 -M target\xtensa-esp32s3-none-elf\release\slint_tftcargo run --bin web_gui --features web_gui
cargo build --release --bin web_gui --features web_gui
- Rust toolchain (installed via
rustup) - Windows PowerShell (examples below use PowerShell)
- A connected ESP32-S3 board (e.g. Adafruit ESP32-S3 TFT Feather)
winget install --id Microsoft.VisualStudio.2022.BuildTools --override "--passive --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended"
Install the ESP Rust toolchain helper and set up the esp toolchain:
cargo install espup
espup installInstall useful helpers:
cargo install esp-generate
cargo install espflashOptional: install esp-config (TUI):
cargo install esp-config --features=tui --lockedOptional: Probe-rs tools installer script (PowerShell):
irm https://github.com/probe-rs/probe-rs/releases/latest/download/probe-rs-tools-installer.ps1 | iexOptional: create a new project (example):
esp-generate --chip=esp32s3 speed-rs-ctlThis repo defines Cargo aliases in .cargo/config.toml.
Build all ESP32-S3 binaries (release):
cargo esp-build-all-releaseBuild just the Slint TFT app (release):
cargo esp-build-slint-tft-release# The desktop GUI hosts an embedded MQTT broker on TCP :1883 (standard MQTT port)
# and uses UDP broadcast discovery on :53530
# to find the ESP automatically (no hardcoded IP).
cargo run --bin web_gui --features web_gui
# If your router/VLAN blocks 255.255.255.255 broadcasts, set the subnet broadcast explicitly:
# $env:SPEED_DISCOVERY_BROADCAST = "192.168.0.255"
# Optional override (skip discovery):
# $env:SPEED_ESP_HOST = "192.168.0.50"
# If UDP discovery is blocked (VLANs, Wi-Fi isolation, Windows firewall), set SPEED_ESP_HOST
# so web_gui will also send discovery announces directly (unicast) to that IP.
# Note: setting SPEED_ESP_HOST enables unicast discovery announces
# (helpful when broadcasts are blocked across VLANs/subnets).You can flash a built binary using espflash.
If you don’t specify --port, espflash will try to auto-detect. On Windows, it’s often easiest to specify it explicitly (e.g. COM3).
Flash the Slint TFT firmware:
espflash flash --port COM3 -M target\xtensa-esp32s3-none-elf\release\slint_tftFlash the main firmware (speed):
espflash flash --port COM3 -M target\xtensa-esp32s3-none-elf\release\speedFlash the TFT test binary (tft):
espflash flash --port COM3 -M target\xtensa-esp32s3-none-elf\release\tft- No serial ports detected: try a different USB cable (data-capable), different USB port, and confirm the board enumerates in Device Manager.
- Wrong COM port: use the COM port shown by
espflashor Device Manager. - Rebuild issues: run the matching
cargo esp-build-*alias again (these include the required-Z build-std=core,allocflags).
