⭐ Tutorial: ESP32-S3 CSI Pipeline End-to-End Setup (ADR-018) #34
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
ESP32-S3 CSI Pipeline: Step-by-Step Tutorial (ADR-018)
Complete end-to-end guide for building, flashing, and running the WiFi CSI human presence detection pipeline using an ESP32-S3 and the Rust aggregator.
Verified hardware: ESP32-S3-DevKitC-1 (CP2102 UART, MAC 3C:0F:02:EC:C2:28)
Verified performance: ~20 Hz CSI streaming, 64/128/192 subcarrier frames, RSSI -47 to -88 dBm
Prerequisites
pip install esptoolStep 1: Clone the repository
Step 2: Build the Rust aggregator
The binary will be at
target/release/aggregator(oraggregator.exeon Windows).Step 3: Configure WiFi credentials
Create or edit
firmware/esp32-csi-node/sdkconfig.defaults:Replace:
YOUR_WIFI_SSIDwith your WiFi network nameYOUR_WIFI_PASSWORDwith your WiFi password192.168.1.20with the IP of the machine running the aggregatorStep 4: Build firmware with Docker
Build output appears in
build/(~960 compilation steps, takes 3-5 minutes first time).Step 5: Find your serial port
ls /dev/ttyUSB*ls /dev/cu.usbserial*Step 6: Flash firmware to ESP32-S3
Replace
COM7with your serial port. Expected output:Step 7: Open firewall (Windows only)
Run in elevated PowerShell:
Step 8: Run the aggregator
Expected output when ESP32 connects:
Step 9: Verify presence detection
Walk near the ESP32 and observe changes in amplitude and RSSI values. Expect:
Step 10: Multi-node setup (optional)
For multi-node coverage, repeat Steps 3-6 for additional ESP32-S3 boards with different
CONFIG_CSI_NODE_IDvalues (2, 3, ...). All nodes stream to the same aggregator.Architecture
ADR-018 Binary Frame Format
Troubleshooting
esp_wifi_set_promiscuous(true)in csi_collector.cMSYS_NO_PATHCONV=1prefixesptoolnot foundpip install esptoolVerified Test Results
cargo test -p wifi-densepose-hardware)pytest v1/tests/)Related
92a5182: feat(adr-018) ESP32-S3 firmware, Rust aggregator, and live CSI pipelinefirmware/esp32-csi-node/README.md: Firmware-specific documentationUpdate: ESP32 Pipeline Now Includes Vital Signs + Trained Model Support
The Rust sensing server that this tutorial connects to has been significantly expanded. When following this tutorial with ESP32-S3 hardware, you now get additional capabilities beyond basic CSI streaming:
New with ESP32 CSI data
GET /api/v1/vital-signsreturns live breathing/heartbeat datavital_signsalongside pose dataNew CLI flags for the sensing server
The ESP32 firmware and flash steps in this tutorial remain unchanged — the improvements are all server-side.
— Ruflo AI
Update: Docker + Rust Sensing Server Available
You can now skip the local Rust toolchain and run the sensing server directly from Docker:
The Docker image includes:
--load-rvf,--export-rvf)RVF model package (portable, single-file deployment):
The ESP32 tutorial steps remain the same — only Step 8 (run aggregator) can now be replaced with the Docker command above.
Current test coverage
Is there any real testing results? datasets or images or screenshots?