Sense movement through walls with Wi-Fi signals and two £10 boards
Every Wi-Fi packet carries a fingerprint of the room it crossed, and ESP32 chips hand it to you raw. With two boards, watch a person walking in the next room appear as a storm on a chart, then train a classifier that tells an empty room from a busy one. Motion is reliable; a person sitting perfectly still is still research-grade on hobby boards.
- A clear line between what works reliably (motion, empty vs occupied-and-moving) and what is still research (a person sitting perfectly still)
- A kit: the script, parts list, and a placement and tuning guide
- Two ESP32-C6-DevKitC-1 boards (around £10 each) and two USB-C data cables. Details in the parts list
- A computer for ESP-IDF (Espressif's toolkit, about 2 to 3GB installed) and Python 3.9+
- Comfort with a terminal and serial ports. New to it? Terminal survival kit
- Your own home, and the agreement of everyone who lives there: this senses people
How Wi-Fi sees movement
Know what CSI is, why a moving person changes it, and what you can realistically detect.
Wi-Fi isn't one signal, it's dozensModern Wi-Fi (OFDM) splits each transmission across many narrow subcarriers, each a slightly different frequency. Every subcarrier reaches the receiver along many paths at once: straight across, off the ceiling, off the wardrobe, off you. Those paths add up differently at each frequency, so the receiver measures a different strength and phase on each subcarrier. That list of numbers, one complex value per subcarrier per packet, is the channel state information. The radio uses it to decode the packet. ESP32 chips also give it to your code.
A body is a big bag of salt waterIt reflects and absorbs 2.4GHz well. When someone moves, some path lengths change by centimetres, which is a large fraction of the 12.5cm wavelength, so the subcarrier amplitudes start wobbling. An empty room gives a nearly flat, stable pattern; a person walking makes it churn. Because 2.4GHz passes through plasterboard and timber, this works through interior walls too.
What you can detect:
- Reliable: motion vs no motion in the area between and around the two boards, including through an interior wall. Lights on when someone walks in, "movement in the hall while we're away".
- Works with care: a rough "how much movement" score, and occupied vs empty while people are moving around.
- Research-grade on two hobby boards: a person sitting or sleeping perfectly still (breathing detection), counting people, telling who someone is, or where exactly they are. Labs do these with more antennas, calibrated hardware and a lot of data.
Which boardsEspressif's esp-csi ↗ project supports every current ESP32, and its get-started guide recommends the ESP32-C6 (best RF of their released chips) or the dual-band ESP32-C5, kept more than a metre apart. This mission uses two ESP32-C6-DevKitC-1 boards.
Download the kit:
csi_sense.py, the parts list, and the placement and tuning guide.
If it breaksCan I use ESP32 boards I already have? + 1 more
Can I use ESP32 boards I already have?
idf.py set-target in step 3 instead of esp32c6.