Inspiration

The Housing Dignity track made us ask a hard question: where are unhoused people most at risk, and why can't we help them there? The answer was the same place every time — shelter bathrooms, supportive-housing units, warming centers. Overdoses and falls happen alone and unwitnessed. But those are exactly the rooms where you can't put a camera: it's invasive, often illegal, and it strips dignity from people who are already the most surveilled in society. We didn't want to watch people. We wanted to watch over them. Then we realized the WiFi already in the room could do it.

What it does

Wispheart turns one ~$9 ESP32 and the WiFi that's already there into a privacy-first presence-and-motion sensor — no cameras, no images, no identity. It listens to a single radio link between the chip and a router; when someone moves through that space, the wireless signal changes and Wisp flips EMPTY → MOTION in under a second.

The signal that matters for housing dignity is the absence of motion: STILL for too long = someone may be in trouble (an overdose, a fall), which fires an alert that sends a human, not a camera. At scale — one cheap node per room — it gives shelters live occupancy, so staff can coordinate care and point people to the beds that are actually open tonight.

How we built it Hardware: an ESP32-S3 flashed with the Steven Hernandez ESP32-CSI-Tool firmware (which we ported to ESP-IDF v5.4). It associates to the WiFi and self-pings to stream ~25–100 Channel State Information (CSI) packets/sec over USB. Bridge (Python): one file, pyserial + websockets, pure-Python math. It parses the raw CSI, runs a sliding-window variance detector with per-frame power normalization and hysteresis, and broadcasts the state over a websocket. Web view (vanilla JS): a big live state readout, a motion meter, and a scrolling amber subcarrier waterfall so you can see the channel react — in a clean ink-and-amber instrument aesthetic. Honest by design: a clearly-flagged --sim mode as a stage backup, and a NO SIGNAL guard so live mode can never fake an empty room. Challenges we ran into Getting real CSI off the board. The CSI-Tool firmware predates ESP-IDF v5, so we debugged a chain of build failures (a removed header, a FreeRTOS task priority above the allowed max, CSI not being enabled in the WiFi driver) and a boot-loop. The hour-long ghost bug. The ESP32-S3 enumerates on a different USB port when it's running the app versus the flash loader — and opening the port with default settings silently held the chip in download mode. The board looked completely dead while it was actually streaming the whole time, just on a port we weren't reading. It only worked when we shook the chip, not when we waved a hand. WiFi power fluctuates even in an empty room, and our detector counted that as motion. We fixed it by normalizing each CSI frame by its own power — cancelling the noise while keeping the real movement. Accomplishments that we're proud of It actually works, live, on real hardware — real radio-frequency sensing, not a simulation. A judge can wave a hand and watch it flip in under a second. We kept it honest. Presence and motion only — no overpromised vitals or pose — plus a guard that makes faking it impossible. We made dignity the design constraint, not a feature. Every decision was shaped by one rule: no one is ever watched. What we learned How WiFi CSI works and how a moving body perturbs a radio link; the realities of flashing and debugging an ESP32 under deadline pressure; and that the real cleverness was in the signal processing (per-frame normalization), not the raw data. That the strongest social-impact idea came from a constraint (no cameras), not a feature — and that being honest about scope is far more convincing to judges, and to a shelter, than overclaiming. What's next for wispheart Multi-node: one cheap sensor per bunk/room → a live, shelter-wide occupancy + safety map that connects people to open beds and coordinates staff. The full alert pipeline: escalation logic and real staff notifications, plus a pilot with a shelter or supportive-housing partner. Real-world validation of the "still-too-long" overdose/fall detection, with per-environment tuning.

Built With

  • apis
  • body-model
  • csi
  • csi-heatmap
  • css
  • emailjs
  • esp32?cam
  • google
  • hardware
  • languages-html
  • services
  • state
  • wifi
Share this project:

Updates

Submission history