Your Wi-Fi Can See You Move

Oleh Hadi K AR

2026-03-22

Your Wi-Fi Can See You Move

ESPectre web monitor showing real-time Wi-Fi CSI motion detection

Every second, your Wi-Fi router sends signals across your room. These signals bounce off walls, furniture, and everything in between. They pass through the air in predictable patterns — and when something moves, those patterns change.


This is not science fiction. This is Channel State Information — CSI for short — and it has been studied in academia for years. What makes it interesting now is that a ten-dollar microcontroller can read it.


What is CSI?

When a Wi-Fi device communicates, it does not send a single signal. It sends data across dozens of subcarriers — 64 of them in standard 20MHz mode. Each subcarrier carries two values: amplitude (how strong the signal is) and phase (where the signal is in its wave cycle).


Together, these 64 subcarriers paint a rich picture of the wireless channel between two devices. In a quiet room, this picture is stable — the signal bounces off the same walls and furniture the same way, packet after packet. But when someone walks through the room, their body reflects, absorbs, and scatters the signal differently. The picture changes. And that change is measurable.


Think of it this way: if you shine a flashlight across a dark room, you can see shadows on the far wall. Move your hand, and the shadow moves. CSI is the Wi-Fi equivalent of watching shadows — except the flashlight is your router, and the wall is your ESP32.


Here is what that looks like with real data. These are CSI amplitude readings captured from an actual ESP32-S3 — every row is a subcarrier, every column is a moment in time:


CSI Amplitude Heatmap — Baseline vs Movement

CSI Amplitude Heatmap — Baseline vs Movement

Left: an empty room — uniform and calm. Right: someone is moving — the subcarriers light up with disruption. Each row is one of 64 Wi-Fi subcarriers.


And if we zoom in on individual subcarriers and trace their amplitude over time, the contrast becomes even sharper:


CSI Amplitude Over Time — Baseline vs Movement

CSI Amplitude Over Time — Baseline vs Movement

Top: baseline — the signal is stable. Bottom: movement — the signal erupts. Each colored line is a different Wi-Fi subcarrier.

The top half is silence. The bottom half is chaos. That contrast is the entire foundation of Wi-Fi motion detection — and it is captured by a device that costs less than a meal.


Why not just use a camera?

Cameras work. PIR sensors work. But they have limitations that Wi-Fi sensing does not. A camera requires line of sight and raises privacy concerns. A PIR sensor detects heat, which means it can miss stationary presence and does not work well through walls. Wi-Fi signals, on the other hand, pass through walls. They do not record images. They do not care about lighting conditions. And the hardware is cheap — an ESP32 module costs less than a cup of coffee in most cities.


Enter ESPectre

ESPectre is an open-source project created by Francesco Pace that turns an ESP32 into a Wi-Fi motion detector. It uses CSI data to detect human presence and movement, and integrates with Home Assistant for smart home automation.


What makes ESPectre remarkable is not just that it works — it is that it works well. The project implements sophisticated signal processing: spatial turbulence calculation to quantify signal disruption, Moving Variance Segmentation to detect motion events over time, automatic subcarrier selection using a method called NBVI to find the frequencies most sensitive to motion, and even a neural network that runs inference directly on the microcontroller.


All of this runs on a device that fits in the palm of your hand.


What I am doing with it

I am studying ESPectre. Not as a user — as an engineer trying to understand every layer of the system. From the raw CSI data to the signal processing pipeline to the machine learning model that makes the final decision: is someone there, or not?


I will be honest: I do not fully understand all of it yet. The machine learning layer, in particular, is still something I am working through. But I believe the best way to learn is to teach, and the best way to teach is to be honest about what you know and what you do not.


This is the first in a series of posts where I will walk through how Wi-Fi sensing works — from the physics of the signal to the mathematics of the detection to the engineering of the firmware. Each post will go deeper, and I will share everything I find along the way.


What is next

Now you have seen that Wi-Fi signals change when someone moves. But seeing the chaos is not enough — we need to measure it. In the next post, I will walk through how ESPectre quantifies that disruption using something called spatial turbulence, and how it decides — mathematically — that motion has occurred.


Support Francesco Pace — the creator of ESPectre

Buy Me A Coffee

Support this series — and everything else we create

Buy Me A Coffee

With respect to Francesco Pace for creating ESPectre and sharing it with the world.

✦ ✦ ✦

Malik Andreas Darius, 2024