• ruvnet released this 2026-03-01 15:36:51 +08:00 | 52 commits to main since this release

    ESP32-S3 CSI Firmware v0.1.0

    Pre-built firmware binaries for the ESP32-S3 CSI sensing pipeline (ADR-018).
    Built from main with ESP-IDF v5.2 via Docker.

    What's Included

    File Size Flash Address Description
    bootloader.bin 21 KB 0x0 ESP32-S3 second-stage bootloader
    partition-table.bin 3 KB 0x8000 Flash partition layout
    esp32-csi-node.bin 768 KB 0x10000 CSI 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 esptool
    

    2. 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.bin
    

    Replace COM7 with your serial port (/dev/ttyUSB0 on 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 5005
    

    4. Run the aggregator:

    # From the wifi-densepose repo
    cargo run -p wifi-densepose-hardware --bin aggregator -- --bind 0.0.0.0:5005 --verbose
    

    Or use the Docker image:

    docker run -p 3000:3000 -p 5005:5005/udp ruvnet/wifi-densepose:latest --source esp32
    

    ADR-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 esp32
    ESP32-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=5005
    
    Downloads