esp32.diy

RuView: Turn Your ESP32 Into a Through-Wall WiFi Sensing System

Oct 11, 2026 · 5 min read

Advanced 97.2k stars 12.8k forks Rust MIT Updated 2026-10-11

Animated visualisation of real-time WiFi-based pose estimation, breathing detection, and heart-rate sensing through walls using RuView.

TL;DR RuView uses an ESP32-S3 to capture WiFi Channel State Information and run on-device machine learning that detects presence, measures breathing and heart rate, and recognises activity through walls — without cameras or wearables. Results feed directly into Home Assistant, Apple Home, Google Home, and Amazon Alexa via MQTT or Matter.
What you need
  • ESP32-S3
  • ESP32-C6
  • Cognitum Seed
  • Realtek RAC1
  • Raspberry Pi
BoardESP32-S3 / ESP32-C6
LanguageRust
LicenseMIT
Latest Releasev3122 (2026-10-10)
Node CostFrom $9 per node, $140 total BOM
DifficultyAdvanced

What You Will Build

RuView is a WiFi-based spatial sensing platform that turns ordinary router signals into actionable room intelligence using an ESP32-S3 as its sensor node. When you finish this build, a single board — costing as little as $9 — will detect people through walls, measure breathing rates between 6 and 30 breaths per minute, track heart rate between 40 and 120 BPM, recognise activity such as walking, sitting, gestures, and falls, and map room occupancy — all without a camera, a wearable, or an app on anyone's phone.

Each node publishes 21 entities to your smart-home hub: 11 raw radio signals plus 10 inferred semantic states including someone-sleeping, possible-distress, room-active, elderly-inactivity-anomaly, meeting-in-progress, bathroom-occupied, fall-risk-elevated, bed-exit, no-movement, and multi-room-transition. Three starter Home Assistant Blueprints are included out of the box.

The platform extends to a catalog of 105 edge modules called Cogs, covering health monitoring, security, building management, retail analytics, industrial sensing, and research applications. An optional Cognitum Seed companion board adds persistent vector memory, cryptographic attestation via an Ed25519 witness chain, and AI integration. Everything runs at the edge — no cloud account or ongoing internet connection required once the firmware is flashed.

RuView v2 dashboard showing live CSI-derived sensing data including occupancy, breathing rate, and heart rate readouts.\2
RuView v2 dashboard showing live CSI-derived sensing data including occupancy, breathing rate, and heart rate readouts.

What You Need

Hardware

The README names these specific components:

Software

The pretrained model weights are hosted on Hugging Face at ruvnet/wifi-densepose-pretrained. The 4-bit quantised variant fits in 8 KB, making it practical for direct deployment on the edge.

Typical use cases

Smart Home Presence

Detect occupancy room by room without cameras or motion PIRs, and trigger lights, thermostats, or locks through Home Assistant, Apple Home, or any Matter-compatible hub.

Contactless Vital Signs

Monitor breathing rate and heart rate overnight for elderly residents or sleeping family members — no wearable, no skin contact, no app required on the user's device.

Through-Wall Security

Detect intruder presence through walls at up to roughly 5 metres using existing WiFi infrastructure, with fall detection debounced across 3 frames for reliable alerting.

Building Analytics

Track room utilisation, queue length, customer flow, and elevator occupancy using specialised Cog modules from the 105-module edge catalog — all running locally on the ESP32.

How It Works

Every WiFi router continuously floods a room with radio energy. When a person moves, breathes, or sits still, their body absorbs and scatters those waves in a way that subtly changes the Channel State Information (CSI) reported by the receiving ESP32. RuView captures these disturbances at the firmware level and pipes them through a signal-processing and machine-learning stack.

The core signal chain works in five stages:

  1. CSI acquisition — the ESP32-S3 reads per-subcarrier amplitude and phase from the WiFi hardware and streams it for processing.
  2. Vital-sign extraction — a bandpass filter at 0.1–0.5 Hz isolates chest-wall motion for breathing rate; a second filter at 0.8–2.0 Hz extracts the cardiac pulse. Zero-crossing counting converts both signals to BPM.
  3. Presence and activity inference — a 128-dimensional contrastive encoder (4-bit quantised, 8 KB) compares live CSI embeddings against the pretrained reference. The v2 encoder reports a held-out temporal-triplet accuracy of 82.3%.
  4. On-device adaptation — spiking neural networks recalibrate to the local environment in under 30 seconds of ambient observation.
  5. Mesh expansion — multi-frequency scanning across 6 WiFi channels triples the effective sensing bandwidth, and neighbouring routers serve as free radar illuminators via Fresnel-zone geometry.

Every inference event is signed and appended to the Ed25519 witness chain for full auditability.

Getting Started

RuView ships the @ruvnet/ruview npm toolkit as the primary interface for environment checks, firmware flashing, and live monitoring. No global install is needed — all commands run via npx.

1. Check your environment

Run the doctor command first. It checks local dependencies and returns source-cited guidance on anything missing:

npx @ruvnet/[email protected] doctor

2. Test without hardware (optional)

Pull the Docker image to run a pipeline against simulated CSI data before your boards arrive:

docker pull ruvnet/wifi-densepose:latest

3. Verify connected hardware

With an ESP32-S3 or ESP32-C6 connected over USB, list detected devices:

npx @ruvnet/[email protected] devices

4. Start a live CSI stream

This opens a real-time view of raw CSI from your node so you can confirm the sensor is reading signal before any model runs:

npx @ruvnet/[email protected] esp32 --watch

5. Run the vitals pipeline

Capture 45 seconds of CSI and push it through the full breathing and heart-rate analysis:

npx @ruvnet/[email protected] esp32 --seconds 45 --analyze

Firmware flashing with boot evidence is handled by the MetaHarness — it signs the flash event and appends it to the witness chain. The full flashing walkthrough is in the repository's user guide.

Home Assistant integration requires only a single --mqtt flag when starting the server; the HA-DISCO publisher handles entity discovery automatically. For Apple Home, Google Home, Alexa, or SmartThings, use the Matter Bridge endpoint documented in the repository.

Extending the Build and Known Limitations

Ways to Extend

The 105-Cog catalog (served from app-registry.json) lets you add capability without reflashing. Specialised occupancy counters for elevator-count, queue-length, customer-flow, clean-room, and person-matching are ready to load. For custom environments, the built-in model workflow lets you record your own CSI, train a new model, save it as an RVF file, and switch between LoRA profiles at runtime.

The optional Cognitum Seed expands a single node into a persistent, AI-integrated sensing station with a vector store and kNN retrieval. A unified RF world model can combine WiFi CSI, radar, and UWB in a single spatial scene. For AI-assisted operation, the MetaHarness provides a read-only MCP server (usable over stdio or HTTP) and a Claude Code extension:

npx @ruvnet/[email protected] mcp start
npx @ruvnet/[email protected] mod

Known Limitations

The README is candid about where the project currently stands:

Verdict

RuView is one of the most ambitious ESP32 projects available: it turns a $9 WiFi node into a contactless presence and vital-sign sensor that integrates natively with every major smart-home ecosystem. The MetaHarness toolkit makes setup approachable, the signal-processing architecture is well documented, and the honest accuracy caveats in the README are a mark of a serious project. Go in with calibrated expectations — through-wall pose estimation is not yet production-ready and device vitals are explicitly unvalidated — but for presence detection and basic vital-sign trending, the foundation is genuinely usable today.

Sources

github.comruvnet/RuView — repository & README Cognitum.OneOfficial website

Facts in this article come from the project's public README and GitHub metadata at the time of writing. Images belong to their respective owners and link back to the original source.