andrisgauracs / wifi-sensing-kit
git clone https://github.com/andrisgauracs/wifi-sensing-kit.git
Teach three $10 ESP32-S3 boards to recognise what you're doing from WiFi alone, with your webcam as the teacher
β
stars, 24h
β
stars, 7 days
+182
stars, 30 days Β· #1,383
182
β
total
29
forks Β· 0 open issues
Star history starts 2026-10-20; the chart appears after the second daily snapshot.
LanguageHTML
LicenseMIT
Created2026-10-10 (10d ago)
Last push9d ago
Watchers0
OwnerUser
Links
README excerpt
# wifi-sensing-kit Teach three $10 ESP32-S3 boards to recognise what you're doing β sitting, squatting, spinning, walking, jumping, standing, or nobody home β from your WiFi alone. Your webcam is the teacher while you train; then you cover it and the WiFi keeps going. Built on RuView's open-source CSI firmware, with two changes: each board lights up in its own colour, and the boards measure **each other** as well as the router, so the room gets sensing links that cross it instead of all fanning out from the router. ## What to expect (measured, not marketing) One person, one living room, three boards, one afternoon. Training: 3 rounds of 8 movements. Test: a **separate** session recorded afterwards, judged by the camera: | Movement | WiFi correct | | Movement | WiFi correct | |---|---|---|---|---| | Nobody home | 100% | | Standing | 84% | | Jumping | 97% | | Squatting | 79% | | Sitting | 93% | | Walking | 70% | | Spinning | 92% | | Waving | 13% (mostly read as jumping) | **79.5% overall across 8 movements β guessing gets 12.5%.** Router links alone: 76.3%; only the *amount* of motion: 63.1%. Your numbers will differ; `python kit/evaluate.py` gives you yours. What it **doesn't** do: draw a skeleton, track your exact position (it can tell roughly which part of a room you're in), or carry over to another room, another person, or boards that have been moved β you retrain. See docs/how-it-works.md for why. ## What you need - **3 Γ ESP32-S3** dev boards with β₯ 8 MB flash (e.g. ESP32-S3-DevKitC-1 N16R8), USB **data** cables, and USB chargers to power them in place - a **2.4 GHz WiFi** network (the boards can't join 5 GHz) - a computer on that network with a **webcam** (macOS or Linux; Windows works for the dashboards) - **ESP-IDF** v5.4 or v5.5 to build the firmware β install guide - about an hour, and enough energy for ~10 minutes of squats ## Setup [code] 1. **WiFi password** β save it alone in a text file (default `~/.wifi-sensing-pass`), `chmod 600` it. Put your network name in `config.yaml`. 2. **Find your boards** β plug all three in over USB (the board's *native* USB socket if it has two) and run `.venv/bin/python firmware/discover.py`. Paste the printed `boards:` list into `config.yaml`. 3. **Build** β `.venv/bin/python firmware/build.py` (downloads RuView v0.8.8, applies the patch, builds). 4. **Flash** β `.venv/bin/python firmware/flash.py`. Each board is flashed, joins your WiFi, and lights up in its colour. 5. **Router address** β `.venv/bin/python firmware/discover.py --router`, put it in `config.yaml` as `router_bssid`, then `firmware/build.py` and `firmware/flash.py --app-only` once more. 6. **Place the boards** around the room at chest height on chargers; nothing metal in between. 7. **Run** β `.venv/bin/python kit/server.py` and open . ## The three dashboards | Page | What it shows | |---|---| | **Signals** (`/`) | Live CSI heatmap per board, packet rates, the board's own presence/motion detection | | **Room map** (`/room.html`) |