github ruvnet/RuView v0.5.0-esp32
ESP32-S3 CSI Firmware v0.5.0 — mmWave Sensor Fusion

4 hours ago

ESP32-S3 CSI Firmware v0.5.0 — mmWave Sensor Fusion (ADR-063/064)

What's New

60 GHz mmWave Radar Fusion — The firmware now auto-detects mmWave radar modules connected via UART and fuses their data with WiFi CSI for dramatically improved sensing.

Supported mmWave sensors:

Sensor Frequency Capabilities Cost
Seeed MR60BHA2 60 GHz Heart rate, breathing, presence, distance ~$15
HLK-LD2410 24 GHz Presence, distance (motion + static) ~$3

Auto-detection: The firmware probes UART1 (GPIO17/18) at boot — first at 115200 baud (MR60BHA2), then 256000 baud (LD2410). If a sensor is found, it registers capabilities and starts a background parsing task. No configuration needed.

48-byte fused vitals packet (magic 0xC5110004): When mmWave is active, vitals are fused using weighted Kalman averaging (mmWave 80% + CSI 20%). Falls back to the standard 32-byte CSI-only packet when no mmWave is detected — fully backward compatible.

Server-side fusion bridge (scripts/mmwave_fusion_bridge.py): For setups where the mmWave runs on a separate ESP32 (e.g., ESP32-C6 with ESPHome), this script reads both serial ports and fuses data in real-time.

Hardware Verified

Dual-sensor live capture (30 seconds, 2026-03-15):

  • COM7 (ESP32-S3): WiFi CSI on channel 5, RSSI -41 dBm
  • COM4 (ESP32-C6 + MR60BHA2): HR 75 bpm, BR 25/min, person at 52 cm
  • Both sensors feeding data concurrently

Also Includes (from v0.4.3.1)

  • Fall detection fix: threshold 15.0 rad/s², 3-frame debounce, 5s cooldown (#263)
  • Task watchdog fix: vTaskDelay after every frame (#266)
  • 4MB flash support (#265)
  • All 11 QEMU CI jobs green

Download Guide

File Flash Size
esp32-csi-node.bin 8MB 990 KB
bootloader.bin Both 18 KB
partition-table.bin 8MB 3 KB
ota_data_initial.bin Both 8 KB
esp32-csi-node-4mb.bin 4MB 773 KB
partition-table-4mb.bin 4MB 3 KB

Flash — 8MB:

python -m esptool --chip esp32s3 --port COM7 --baud 460800 \
  write_flash --flash_mode dio --flash_size 8MB --flash_freq 80m \
  0x0 bootloader.bin 0x8000 partition-table.bin \
  0xf000 ota_data_initial.bin 0x20000 esp32-csi-node.bin

Flash — 4MB:

python -m esptool --chip esp32s3 --port COM7 --baud 460800 \
  write_flash --flash_mode dio --flash_size 4MB --flash_freq 80m \
  0x0 bootloader.bin 0x8000 partition-table-4mb.bin \
  0xF000 ota_data_initial.bin 0x20000 esp32-csi-node-4mb.bin

Provision:

python firmware/esp32-csi-node/provision.py --port COM7 \
  --ssid "YourWiFi" --password "YourPassword" --target-ip 192.168.1.20

Full Changelog

See CHANGELOG.md

Closes #269

Don't miss a new RuView release

NewReleases is sending notifications on new releases.