Skip to content

Instantly share code, notes, and snippets.

@ruvnet
Created May 18, 2026 21:56
Show Gist options
  • Select an option

  • Save ruvnet/8c099b17eeb589370b36eff74df08890 to your computer and use it in GitHub Desktop.

Select an option

Save ruvnet/8c099b17eeb589370b36eff74df08890 to your computer and use it in GitHub Desktop.
RuView v0.6.5-esp32 — open-source WiFi sensing on a $9 ESP32 board (presence, vitals, motion through walls — no camera)

See through walls with WiFi — RuView v0.6.5 firmware released

Most rooms are already full of radio waves. Your WiFi router is constantly transmitting, and your phone, laptop, and smart-home gear are constantly listening. Every human body in the room subtly disturbs those waves — moving, breathing, even just sitting still. RuView is open-source software that turns those disturbances into useful data: where people are, what they're doing, whether they're okay.

Just shipped v0.6.5 of the ESP32 firmware. This is the bit that runs on the $9 sensor board.

Links:


What RuView actually does

Capability What it means Latency
🧍 Presence sensing Detect that a person is in the room — through internal walls <1 ms
🫁 Breathing rate Contactless, while sitting still or sleeping (6–30 BPM) ~1 s
💓 Heart rate Contactless, requires reasonable signal-to-noise (40–120 BPM) ~1 s
🚶 Activity recognition Walking, sitting, gestures, falls Real-time
🛏 Sleep monitoring Overnight breathing + movement patterns Continuous
🏠 Multi-room mesh 3+ ESP32 nodes cover a whole home, triangulate position Real-time
🔐 Cryptographic attestation Every measurement signed via Ed25519 witness chain Verifiable

All of this happens on the local network. No camera. No microphone. No wearable. No cloud. No internet required.

The hardware: an ESP32-S3 board (~$9 each from anywhere), 1-6 of them per room, optionally a Cognitum Seed (a $15 Raspberry Pi Zero 2 W with persistent memory and AI integration) at the center.


Why this release

Two regressions caught on actual hardware before shipping:

  1. Fresh installs no longer crash on first boot. A FreeRTOS timer-task stack-size setting silently fell out of the canonical build config (it was still in the template). Result: any fresh build crashed inside the OS timer task and looped forever. I caught this when I flashed v0.6.5 to my own COM7 board and watched it bootloop. Cherry-picked the line back. Verified: 0 panics, 0 reboots in 30 seconds of operation on real hardware.

  2. OTA security made visible. A prior release (#623) made the over-the-air firmware update endpoint refuse uploads until you set a password — important security default. But the boot-time warning explaining this wasn't printing because the production code path was different from the path the fix lived on. Refactored so both paths print the warning. Now operators get a clear signal on the serial log:

    W (3126) ota_update: NVS namespace 'security' not found — OTA upload endpoint will REJECT all requests until provisioned. Fail-closed per RuView#596.

  3. Closes issue #438 (boot loop at "edge tier 2" reported on an old release). Validated as not-reproducible end-to-end on a physical ESP32-S3.


Who is this for

  • 🏥 Healthcare and elder care — fall detection, contactless vital signs, overnight breathing trends. Nothing on the person.
  • 🏠 Smart home builders who don't want a camera in every room.
  • 🔬 Researchers doing WiFi sensing — the signal-processing pipeline is open source, with a deterministic verification harness you can run with one command (./verify).
  • 🛡 Privacy-first deployments — everything runs on $9-$15 hardware, locally, no API keys, no third-party servers.
  • 🏗 Hardware tinkerers who want to try CSI (Channel State Information) without first writing your own ESP-IDF firmware from scratch.

How to try it (3 steps)

You need: an ESP32-S3 board (8 MB or 4 MB flash, ~$9 on AliExpress / Amazon / Adafruit), a USB-C cable, a 2.4 GHz WiFi network, and a computer.

1. Flash the firmware

Download the 6 binaries from the release page, then run:

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

(Replace COM7 with your serial port — /dev/ttyUSB0 on Linux, /dev/cu.SLAB_USBtoUART on macOS.)

2. Tell the board your WiFi

python firmware/esp32-csi-node/provision.py --port COM7 \
  --ssid "YourWiFi" --password "YourPassword" \
  --target-ip 192.168.1.100 \
  --node-id 1 --edge-tier 2

--target-ip is the address of the computer that'll receive sensor data over UDP.

3. Start the sensing server + open the dashboard

git clone https://github.com/ruvnet/RuView.git
cd RuView
cargo run -p wifi-densepose-sensing-server -- --source esp32 --http-port 3000
# then open http://localhost:3000/ui/index.html

Walk into range. Presence, motion, breathing, and heart-rate readings should light up.

For multi-node setups (3+ boards covering a whole home with through-wall sensing), see the User Guide. For the system-level architecture (Cognitum Seed integration, mesh coordination, cryptographic attestation), see cognitum.one/ruview.


Honest caveats

It's important to be straight about what works today vs what's in flight:

  • No pretrained pose-keypoint model ships in the repo yet. What works today: presence, motion, breathing, heart rate. What's pending: full 17-keypoint skeleton estimation (the training pipeline exists, the trained weights don't yet — tracked in #509).
  • Person-counting is a heuristic, not a learned classifier. On multi-node deployments it can over-report (e.g. show 2 people when there's 1). There's a live PR (#491) that auto-calibrates to your specific environment.
  • Single-node = presence-only. For triangulated position / room mapping you need 3+ nodes — the geometry math needs diversity.
  • First 60 seconds are a calibration window. If the board boots while someone's in the room, the presence baseline will sit too low. Power-cycle in an empty room if it gets stuck.
  • Strong RF interferers (microwaves, fans near the antenna, neighbouring AP power swings) can cause false positives. Multi-node mesh helps; single-node is sensitive.

Help

Thanks to everyone who reported bugs this release cycle — three critical bugs got caught and fixed in under 24 hours because the reports were precise and reproducible. The project moves fast when the inbound signal is high-quality.


RuView is open source under MIT OR Apache-2.0. Built on RuVector and Cognitum Seed. The original DensePose-From-WiFi research came out of Carnegie Mellon — RuView is the productionized, edge-running version of that idea.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment