-
Notifications
You must be signed in to change notification settings - Fork 9.8k
Releases: ruvnet/RuView
ESP32-S3 CSI Firmware v0.4.3.1 — Watchdog Fix
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/s2 (#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
Assets 8
ESP32-S3 CSI Firmware v0.4.3 — Fall Detection Fix + 4MB Flash
5b2aacd 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/s2, but normal activity produces 2-5 rad/s2.
This release fixes the problem by:
- Raising the default threshold from 2.0 to 15.0 rad/s2
- 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
Assets 8
v0.4.2-esp32: Channel Override + MAC Filter (ADR-060)
d793c1f 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)
Assets 5
ESP32-S3 CSI Firmware v0.4.1 — CSI Build Fix (ADR-057)
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)
sdkconfig— CSI now enabled (CONFIG_ESP_WIFI_CSI_ENABLED=y)sdkconfig.defaults— Created from template so fresh builds always inherit CSIcsi_collector.c— Added#errorcompile-time guard to prevent this from recurringsdkconfig.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.
Assets 7
RuView Desktop v0.4.0
0b98917 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:
- Download the appropriate
.zipfile for your Mac - Extract the zip file
- Move
RuView Desktop.appto your Applications folder - Right-click and select "Open" (first time only, to bypass Gatekeeper)
Windows:
- Download the
.msiinstaller - Run the installer
- Launch RuView Desktop from the Start menu
Requirements
- macOS 11.0+ (Big Sur or later)
- Windows 10/11 (64-bit)
Assets 7
RuView Desktop v0.4.1
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:
- Download the appropriate
.zipfile for your Mac - Extract the zip file
- Move
RuView Desktop.appto your Applications folder - Right-click and select "Open" (first time only, to bypass Gatekeeper)
Windows:
- Download the
.msiinstaller - Run the installer
- 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
Assets 6
RuView Desktop v0.4.0
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:
- Download the appropriate
.zipfile for your Mac - Extract the zip file
- Move
RuView Desktop.appto your Applications folder - Right-click and select "Open" (first time only, to bypass Gatekeeper)
Windows:
- Download the
.msiinstaller - Run the installer
- 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
Assets 6
RuView Training Datasets v1.0.0
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 keypointsactivity: Activity labelmetadata: RSSI, noise, frame count
Usage
Download and extract to ~/.ruview/datasets/
Assets 5
RuView Desktop v0.3.0
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:
- Download the appropriate
.zipfile for your Mac - Extract the zip file
- Move
RuView Desktop.appto your Applications folder - Right-click and select "Open" (first time only, to bypass Gatekeeper)
Windows:
- Download the
.msiinstaller - Run the installer
- 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
Assets 6
RuView Desktop v0.3.0-alpha — Windows (Debug Build)
c82c4fc RuView Desktop v0.3.0-alpha (Windows x64)
Work in Progress — Debug build for testing. Production builds with bundled assets will follow.
Quick Start
# 1. Clone the repo and install frontend dependencies git clone https://github.com/ruvnet/RuView.git cd RuView/rust-port/wifi-densepose-rs/crates/wifi-densepose-desktop/ui npm install # 2. Start the frontend dev server npx vite --host # 3. Download and run the exe (below) # The app window opens and loads from localhost:5173
Why a dev server? This is a debug build — it loads the React frontend from
localhost:5173via Vite. Production builds will bundle assets directly into the exe.
Requirements
- Windows 10 (1803+) or Windows 11
- WebView2 runtime (pre-installed on modern Windows)
- Node.js 20+ (for the Vite dev server)
What's Included
| Page | Description |
|---|---|
| Dashboard | Live stat cards with count-up animation, server panel, quick actions, node grid |
| Nodes | Sortable table with expandable detail rows |
| Flash | 3-step serial firmware flash wizard |
| OTA Update | Single-node and batch over-the-air updates with strategy selection |
| Edge Modules | WASM module upload and lifecycle management (start/stop/unload) |
| Sensing | Server start/stop, scrolling log viewer with pause/clear, activity feed |
| Mesh View | Force-directed canvas topology graph with click-to-inspect |
| Settings | Server configuration (ports, bind address, discovery) |
Design Highlights
- Dark professional theme (ADR-053) with glassmorphism cards
- Gradient accents on logo, nav indicator, and primary buttons
- Page transitions with fade-in + scale animations
- Status dot glows for online/error/warning states
- Staggered card fade-ins on the dashboard
- Live status bar polling node count and server state
Build from Source
See the Desktop README for full build instructions.
🤖 Generated with claude-flow