Skip to content

Releases: ruvnet/RuView

ESP32-S3 CSI Firmware v0.5.0 — mmWave Sensor Fusion

15 Mar 20:15
66e2fa0

Choose a tag to compare

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

ESP32-S3 CSI Firmware v0.4.3.1 — Watchdog Fix

15 Mar 16:11

Choose a tag to compare

ESP32-S3 CSI Firmware v0.4.3.1 — Watchdog Fix

Patch release for v0.4.3 that fixes a task watchdog crash on Core 1 (#266).

What's Fixed

Task watchdog starvation on Core 1 — The edge DSP task (biquad filters, Welford stats, BPM estimation, multi-person vitals) was CPU-intensive enough to starve the IDLE1 task, triggering the watchdog timer every 5 seconds. The firmware kept running but spammed error logs and could cause instability.

Fix: The DSP task now yields to IDLE after every processed frame (vTaskDelay(1)). At 20 Hz CSI rate this adds ~1 ms per frame — negligible for vitals extraction.

Verified on real ESP32-S3: 0 watchdog triggers in 60 seconds of live WiFi CSI (was every 5 seconds before).

Includes all v0.4.3 fixes

  • Fall detection threshold 2.0 → 15.0 rad/s² (#263)
  • 3-frame debounce + 5s cooldown for fall alerts
  • 4MB flash support (#265)

Flash Instructions

Same as v0.4.3 — see v0.4.3 release notes for full instructions.

8MB boards:

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

4MB boards:

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

ESP32-S3 CSI Firmware v0.4.3 — Fall Detection Fix + 4MB Flash

15 Mar 15:53
5b2aacd

Choose a tag to compare

ESP32-S3 CSI Node Firmware v0.4.3 — Fall Detection Fix + 4MB Flash Support

What's Fixed

False fall detection alerts (#263)

The previous firmware (v0.4.2 and earlier) triggered constant "Fall Detected" alerts during normal walking and movement. The threshold was set to 2.0 rad/s², but normal activity produces 2-5 rad/s².

This release fixes the problem by:

  • Raising the default threshold from 2.0 to 15.0 rad/s²
  • Requiring 3 consecutive frames above threshold before alerting
  • Adding a 5-second cooldown between alerts

Verified on real hardware: 0 false alerts in 60s with 1,300+ live WiFi CSI frames. Previous firmware had 7 false alerts in 45s.

Already have v0.4.2? Fix without reflashing:

python provision.py --port COM7 --fall-thresh 15000

What's New

4MB flash support (#265)

ESP32-S3 boards with 4MB flash (e.g. SuperMini 4MB) are now officially supported. Thanks to @sebbu for proving feasibility with a community workaround!

Download Guide

File Flash Size Size
esp32-csi-node.bin 8MB 978 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 755 KB
partition-table-4mb.bin 4MB 3 KB

Flash — 8MB boards (most ESP32-S3):

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 boards (e.g. SuperMini 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 WiFi:

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

CI: All 11 QEMU jobs green

Closes #263, Closes #265

v0.4.2-esp32: Channel Override + MAC Filter (ADR-060)

13 Mar 12:29
d793c1f

Choose a tag to compare

ESP32-S3 CSI Node Firmware v0.4.2 — Channel Override + MAC Filter (ADR-060)

Boot Proof (COM7, 2026-03-13)

I (229) app_init: Project name:     esp32-csi-node
I (233) app_init: App version:      v0.4.2-esp32-dirty
I (238) app_init: Compile time:     Mar 13 2026 08:37:29
I (243) app_init: ELF file SHA256:  6fac16e35...
I (260) efuse_init: Chip rev:         v0.2
I (291) spi_flash: detected chip: gd
I (294) spi_flash: flash io: dio
I (370) nvs_config: No NVS config found, using compiled defaults
I (370) main: ESP32-S3 CSI Node (ADR-018) — Node ID: 1
I (390) wifi:wifi firmware version: 48ea317a7
I (530) wifi:mode : sta (3c:0f:02:ec:c2:28)
I (530) main: WiFi STA initialized, connecting to SSID: wifi-densepose

Firmware Binary Hashes (SHA-256)

File Size SHA-256
esp32-csi-node.bin 978,064 bytes 4884001780fff646946003a462498daf6f14b70e4f369d444d9eb0f5dbb68877
bootloader.bin 18,880 bytes 7fb987037d737a6f87fe955d4fa8ae1f872f1e4f7998a572910ee669989d84fb
partition-table.bin 3,072 bytes 67222c257c0477501fd4002275638dc4262b34eb68235b8289fb1337054d322b

New Features

Channel Override (--channel)

python provision.py --port COM7 --channel 6

Explicitly set CSI channel (1-14 for 2.4GHz, 36-177 for 5GHz). When omitted, firmware auto-detects channel from connected AP using esp_wifi_sta_get_ap_info().

MAC Address Filter (--filter-mac)

python provision.py --port COM7 --filter-mac AA:BB:CC:DD:EE:FF

Only collect CSI from frames matching the specified source MAC. Reduces noise in multi-AP environments.

Combined Example

python provision.py --port COM7 --ssid "MyWiFi" --password "secret" \
  --target-ip 192.168.1.20 --channel 6 --filter-mac AA:BB:CC:DD:EE:FF

Bug Fixes

  • Channel mismatch — Auto-detect AP channel after WiFi connect instead of hardcoding (#247)
  • MAC filter — Drop non-matching CSI frames before processing (#229)

Capabilities Verified on Hardware

Capability Status
ESP32-S3 boot (QFN56 rev v0.2) PASS
8MB GD flash detection PASS
NVS config load (defaults) PASS
WiFi STA init + connect retry PASS
ADR-018 binary frame format PASS
ADR-060 channel/MAC filter fields PASS
CSI collector init PASS
Edge intelligence defaults (tier 2) PASS
TDM defaults (slot 0, count 1) PASS

Flash Instructions

python -m esptool --chip esp32s3 --port COM7 --baud 460800 write_flash \
  0x0 bootloader.bin \
  0x8000 partition-table.bin \
  0x20000 esp32-csi-node.bin

Provisioning All Options

python provision.py --port COM7 \
  --ssid "MyWiFi" --password "secret" \
  --target-ip 192.168.1.20 --target-port 5005 \
  --node-id 1 \
  --tdm-slot 0 --tdm-total 3 \
  --edge-tier 2 \
  --channel 6 \
  --filter-mac AA:BB:CC:DD:EE:FF

Architecture

  • ADR-060: Channel override and MAC filter design
  • NVS keys: csi_channel (u8), filter_mac (6-byte blob)
  • Auto-channel: esp_wifi_sta_get_ap_info() after WiFi connect
  • MAC filter: memcmp(info->mac, ...) in CSI callback

Built with ESP-IDF v5.4 | Target: ESP32-S3 | Flash: 8MB (53% free)

ESP32-S3 CSI Firmware v0.4.1 — CSI Build Fix (ADR-057)

12 Mar 16:18

Choose a tag to compare

ESP32-S3 CSI Firmware v0.4.1

Critical bugfix release — fixes CSI not being enabled in pre-built firmware binaries.

What was broken

The committed sdkconfig had CONFIG_ESP_WIFI_CSI_ENABLED disabled (line 1135), causing all builds to produce firmware that crashed at runtime with:

E (6700) wifi:CSI not enabled in menuconfig!

This affected all pre-built binaries from v0.1.0 through v0.4.0-alpha.

Fixes (ADR-057)

  1. sdkconfig — CSI now enabled (CONFIG_ESP_WIFI_CSI_ENABLED=y)
  2. sdkconfig.defaults — Created from template so fresh builds always inherit CSI
  3. csi_collector.c — Added #error compile-time guard to prevent this from recurring
  4. sdkconfig.defaults.template — Fixed NVS encryption default (was causing build failure)

Verified

  • Built with Docker (espressif/idf:v5.2)
  • Flashed to ESP32-S3 (QFN56, rev v0.2, 8MB GD flash)
  • Boot log confirms CSI initialization without errors
  • Binary size: 1,041 KB (49% partition free)

Flashing

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

Provisioning (after flash)

python firmware/esp32-csi-node/provision.py \
  --port COM7 --ssid "YOUR_WIFI" --password "YOUR_PASS" \
  --target-ip YOUR_PC_IP --target-port 5005

Hardware Support

Variant Status
ESP32-S3 (all: DevKitC, N16R8, Super Mini, Zero) Supported
ESP32 (original D0WD) Unsupported (use ADR-018 frame format for interop)
ESP32-C3 Unsupported (RISC-V, needs separate build target)
ESP32-C6 Unsupported (RISC-V, needs separate build target)

Related Issues

  • #241 — Tracking issue for this fix
  • #223 — CSI not enabled in menuconfig (root cause)
  • #238 — 0.4 firmware not working (original ESP32, unsupported variant)
  • #234 — ESP32-C3 support request
  • #210 — Flashing issues with Super Mini
  • #190 — No data received from ESP32-S3

SHA256 Checksums

See SHA256SUMS.txt attached to this release.

RuView Desktop v0.4.0

10 Mar 01:58
0b98917

Choose a tag to compare

RuView Desktop v0.4.0

WiFi-based human pose estimation desktop application.

Downloads

Platform Architecture Download
macOS Apple Silicon (M1/M2/M3) RuView-Desktop-*-macos-arm64.zip
macOS Intel RuView-Desktop-*-macos-x64.zip
Windows x64 RuView-Desktop-*.msi or RuView-Desktop-*.exe

Installation

macOS:

  1. Download the appropriate .zip file for your Mac
  2. Extract the zip file
  3. Move RuView Desktop.app to your Applications folder
  4. Right-click and select "Open" (first time only, to bypass Gatekeeper)

Windows:

  1. Download the .msi installer
  2. Run the installer
  3. Launch RuView Desktop from the Start menu

Requirements

  • macOS 11.0+ (Big Sur or later)
  • Windows 10/11 (64-bit)

RuView Desktop v0.4.1

10 Mar 04:06

Choose a tag to compare

RuView Desktop v0.4.1

WiFi-based human pose estimation desktop application.

Downloads

Platform Architecture Download
macOS Apple Silicon (M1/M2/M3) RuView-Desktop-*-macos-arm64.zip
macOS Intel RuView-Desktop-*-macos-x64.zip
Windows x64 RuView-Desktop-*.msi or RuView-Desktop-*.exe

Installation

macOS:

  1. Download the appropriate .zip file for your Mac
  2. Extract the zip file
  3. Move RuView Desktop.app to your Applications folder
  4. Right-click and select "Open" (first time only, to bypass Gatekeeper)

Windows:

  1. Download the .msi installer
  2. Run the installer
  3. Launch RuView Desktop from the Start menu

Requirements

  • macOS 11.0+ (Big Sur or later)
  • Windows 10/11 (64-bit)

Full Changelog: v0.4.0-desktop...desktop-v0.4.1

RuView Desktop v0.4.0

10 Mar 15:17

Choose a tag to compare

RuView Desktop v0.4.0

WiFi-based human pose estimation desktop application.

Downloads

Platform Architecture Download
macOS Apple Silicon (M1/M2/M3) RuView-Desktop-*-macos-arm64.zip
macOS Intel RuView-Desktop-*-macos-x64.zip
Windows x64 RuView-Desktop-*.msi or RuView-Desktop-*.exe

Installation

macOS:

  1. Download the appropriate .zip file for your Mac
  2. Extract the zip file
  3. Move RuView Desktop.app to your Applications folder
  4. Right-click and select "Open" (first time only, to bypass Gatekeeper)

Windows:

  1. Download the .msi installer
  2. Run the installer
  3. Launch RuView Desktop from the Start menu

Requirements

  • macOS 11.0+ (Big Sur or later)
  • Windows 10/11 (64-bit)

Full Changelog: desktop-v0.4.1...desktop-v0.4.0

RuView Training Datasets v1.0.0

10 Mar 18:09

Choose a tag to compare

Real WiFi CSI datasets for training RuView pose estimation models.

Datasets

Dataset Samples Activities Size
csi-activity 24 brushteeth, cook, getintobed, sleeping, walk, washingdishes 1 MB
csi-vitals 23 Heart rate monitoring (66-90 BPM) 800 KB
csi-respiration 1 Breathing detection 44 KB

Data Source

Converted from Intel CSI Tool .dat files to RuView JSON format.

Format

Each sample is a JSON file with:

  • csi_features: 5600 values (100 frames × 56 subcarriers)
  • keypoints: 17 COCO pose keypoints
  • activity: Activity label
  • metadata: RSSI, noise, frame count

Usage

Download and extract to ~/.ruview/datasets/

RuView Desktop v0.3.0

09 Mar 17:24

Choose a tag to compare

RuView Desktop v0.3.0

WiFi-based human pose estimation desktop application.

Downloads

Platform Architecture Download
macOS Apple Silicon (M1/M2/M3) RuView-Desktop-*-macos-arm64.zip
macOS Intel RuView-Desktop-*-macos-x64.zip
Windows x64 RuView-Desktop-*.msi or RuView-Desktop-*.exe

Installation

macOS:

  1. Download the appropriate .zip file for your Mac
  2. Extract the zip file
  3. Move RuView Desktop.app to your Applications folder
  4. Right-click and select "Open" (first time only, to bypass Gatekeeper)

Windows:

  1. Download the .msi installer
  2. Run the installer
  3. Launch RuView Desktop from the Start menu

Requirements

  • macOS 11.0+ (Big Sur or later)
  • Windows 10/11 (64-bit)

What's Changed

  • feat: complete Tauri desktop frontend with all pages and enhanced design by @ruvnet in #198
  • Add temporal graph evolution & RuVector integration research by @ruvnet in #197

Full Changelog: v0.3.0-desktop-alpha...desktop-v0.3.0