-
ESP32-S3 CSI Firmware v0.1.0 Stable
released this
2026-03-01 15:36:51 +08:00 | 52 commits to main since this releaseESP32-S3 CSI Firmware v0.1.0
Pre-built firmware binaries for the ESP32-S3 CSI sensing pipeline (ADR-018).
Built frommainwith ESP-IDF v5.2 via Docker.What's Included
File Size Flash Address Description bootloader.bin21 KB 0x0ESP32-S3 second-stage bootloader partition-table.bin3 KB 0x8000Flash partition layout esp32-csi-node.bin768 KB 0x10000CSI firmware — ADR-018 binary streaming over UDP provision.py— — NVS provisioning script (WiFi + network config) Quick Start (No Build Required)
1. Install esptool:
pip install esptool2. Flash all three binaries:
python -m esptool --chip esp32s3 --port COM7 --baud 460800 \ --before default_reset --after hard_reset \ write_flash --flash_mode dio --flash_freq 80m --flash_size 4MB \ 0x0 bootloader.bin \ 0x8000 partition-table.bin \ 0x10000 esp32-csi-node.binReplace
COM7with your serial port (/dev/ttyUSB0on Linux,/dev/cu.usbserial-*on macOS).3. Provision WiFi credentials (no rebuild needed):
python provision.py --port COM7 \ --ssid "YourWiFi" --password "YourPassword" \ --target-ip 192.168.1.20 --target-port 50054. Run the aggregator:
# From the wifi-densepose repo cargo run -p wifi-densepose-hardware --bin aggregator -- --bind 0.0.0.0:5005 --verboseOr use the Docker image:
docker run -p 3000:3000 -p 5005:5005/udp ruvnet/wifi-densepose:latest --source esp32ADR-018 Binary Frame Format
Offset Size Field 0 4 Magic: 0xC5110001 4 1 Node ID 5 1 Number of antennas 6 2 Number of subcarriers (LE u16) 8 4 Frequency MHz (LE u32) 12 4 Sequence number (LE u32) 16 1 RSSI (i8) 17 1 Noise floor (i8) 18 2 Reserved 20 N*2 I/Q pairs (int8 pairs, n_antennas * n_subcarriers * 2)Hardware Compatibility
Board Status Notes ESP32-S3-DevKitC-1 Verified Tested with CP2102 USB-UART ESP32-S3-WROOM-1 Expected Same SoC ESP32-S3-MINI-1 Expected Same SoC ESP32 (classic) Rebuild required idf.py set-target esp32ESP32-C3 Not supported No CSI API Firmware Features
- WiFi STA + promiscuous mode for CSI capture on all management/data frames
- ADR-018 binary serialization with 20-byte header + raw I/Q payload
- UDP streaming to configurable aggregator (default
192.168.1.100:5005) - NVS runtime config — SSID, password, target IP/port, node ID
- ~20 Hz CSI frame rate (LLTF + HT-LTF + STBC HT-LTF2)
- 64-128 subcarriers per frame depending on bandwidth
- Automatic WiFi reconnection (up to 10 retries)
Firewall Note (Windows)
netsh advfirewall firewall add rule name="ESP32 CSI" dir=in action=allow protocol=UDP localport=5005Downloads