A normal motion sensor watches a room with infrared light or a camera lens. ESPectre watches it with radio waves instead. It is an open source project that turns a cheap ESP32 board into a private, local Wi-Fi motion sensor: no camera, no microphone, no wearable, and no dedicated radar hardware, just the Wi-Fi network already in the room.
The project is francescopace/espectre, described on GitHub as Wi-Fi CSI motion sensing for ESP32, with a C++ SDK, ESPHome, Native, and Matter frontends, browser tools, and a CLI for the full device lifecycle. At the time of writing it holds 9,694 stars and 736 forks on GitHub, and it was created on October 26, 2025. Watch the 30-second repo signal: Turn Any ESP32 into a Wi-Fi Radar.
Key Takeaways
ESPectre reads Wi-Fi Channel State Information (CSI), the fine-grained measurement of how Wi-Fi signals travel through a room, and reports motion when a moving body disturbs those signals.
Everything runs on the device and nothing needs to go to the cloud: it works with Home Assistant through ESPHome or MQTT, and appears as a standard Matter occupancy sensor.
Supported chips are the ESP32-C6, ESP32-C5, ESP32-C3, ESP32-S3, ESP32-S2, and classic ESP32, on a normal 2.4 GHz Wi-Fi 4 network.
One board covers one area, so plan on one board per room.
It detects motion, not identity: it does not identify people, count them, or prove that a room is empty.
How Wi-Fi Sensing Works
Wi-Fi signals do not travel in a straight line from router to device. They bounce off walls, furniture, and people, taking many paths at once. Channel State Information describes that journey in detail: for each subcarrier of the Wi-Fi channel, it records amplitude and phase, the strength and timing of the signal. When someone moves through a room, they change those paths, and the CSI changes with them.
That is the whole trick, and it is why Wi-Fi sensing feels almost like magic. A camera sees a picture. A PIR sensor sees a warm body crossing its field of view. A CSI sensor sees the radio environment itself shift. Espressif, the maker of the ESP32, documents CSI in its ESP-CSI programming guide as a parameter describing wireless channel characteristics, sensitive enough to sense both large movements and subtle actions in a static environment. ESPectre turns that raw measurement into a simple output: motion, plus a movement score.
There is a trade-off worth understanding up front. Because the sensor reads the radio channel, not a person, it cannot tell you who moved, how many people moved, or whether a perfectly still person is present. The README states those limits plainly, and the ESPHome component docs add that detection does not establish whether a stationary person is present. For lights, heating, and alerts, that is usually enough. For a safety-critical alarm, it is not, and the project says so itself.
What ESPectre Gives You
ESPectre is not a single firmware file. It is a platform with several layers, and that is part of why it has gained traction.
First, there is ready-to-flash firmware. The quickest path needs only a browser: open the flash tool in desktop Chrome 151 or later, connect a supported ESP32 over USB, pick a firmware and release channel, and complete Wi-Fi provisioning on screen. A browser monitor then lets you watch motion, tune detection, and inspect the device.
Second, there is an embeddable C++ SDK for builders who want Wi-Fi sensing inside their own ESP32 firmware, plus a MicroPython implementation called Micro-ESPectre for lightweight sensing, a host CLI for the full device lifecycle, and browser tools for flashing and monitoring.
Third, there is open research behind the detectors: a published CSI dataset with recordings for empty rooms, static presence, and motion, trained model weights, and generated detector metrics and dataset quality reports. That transparency matters for a sensor that can reveal presence, and the project treats it as part of the design, not an afterthought.
Four Firmware Paths, One Sensor
The README lays out four firmware paths, and the right one depends on your smart home setup:
Path | Best for | What you get |
|---|---|---|
Native | Standalone sensors, MQTT integrations, and custom applications | MQTT with Home Assistant discovery, a local HTTP API, and the full CLI |
ESPHome | Home Assistant users who want native entities | Native Home Assistant entities, ESPHome provisioning, and Device Builder updates |
Matter | Matter controllers with occupancy sensor support | A standard Matter occupancy sensor, with controller validation still limited |
Micro-ESPectre | Lightweight sensing in MicroPython | Local, read-only HTTP monitoring in a small footprint |
The ESPHome path got a big boost in October 2026: ESPHome 2026.10.0 shipped a native `espectre` component among its 20 new components, so an ESP32 and an existing Wi-Fi access point act as a motion detector without additional sensing hardware (ESPHome 2026.10.0 release notes). The component page (ESPHome espectre component) confirms the details: declaring `espectre:` in YAML creates motion and movement score entities, the movement score ranges from 0 to 1, and scores publish after every detector evaluation, by default every 250 ms.
Two detection algorithms are available in the ESPHome component. Lightweight detection calibrates its threshold from the environment and uses less CPU and memory. High Accuracy detection uses an on-device neural network with trained weights. Detection needs at least 70% CSI occupancy, meaning enough of the detector window must contain usable CSI, and the component keeps Wi-Fi power saving off so the radio keeps listening.
Getting Started With Home Assistant
For most readers, the ESPHome path is the easiest way in. The shape of the setup is small:
Pick a supported board: ESP32-C6, ESP32-C5, ESP32-C3, ESP32-S3, ESP32-S2, or classic ESP32, plus the 2.4 GHz Wi-Fi network you already have.
Flash it from the browser tool, or through ESPHome, and keep the room still for the lightweight startup calibration.
Let Home Assistant discover the device, then use the motion binary sensor and the movement score in automations: lights on when you walk in, heating adjusted when a room is in use, an alert when there is movement where nobody should be.
A few practical notes from the docs will save you debugging time. Start with 2.4 GHz: detection quality on 5 GHz has not been characterized, and the ESPHome component uses a 20 MHz channel width. With several access points, pin the one with the strongest signal, in the range of -40 to -70 dBm, since the device connects only to that access point. Recalibrate after changing the room layout, and restart the device after moving it. And because the component disables Wi-Fi frame aggregation to get more CSI-bearing frames, Wi-Fi throughput on the same device may drop, so over-the-air updates and audio streaming on that board may be slower.
If you prefer the browser route, the CLI is just as direct: `./espectre devices` finds your devices on the network, and `./espectre --help` lists every command.
Privacy: Private, But Not Magic
ESPectre's privacy pitch is real, and it is worth stating precisely. Wi-Fi sensing records no images or audio, motion detection is local, and cloud connectivity is not required. That is a genuine step up from a camera in a bedroom or a microphone in a living room, and it is why the project appeals to privacy-focused smart home builders.
It is not, however, a privacy free pass. The project's own security and privacy section warns that motion data can still reveal routines, sleep, or when nobody is home, even without images or audio. Raw CSI collection is optional and meant for research and debugging, firmware releases include build-specific software bills of materials so their contents can be inspected, and the docs include a security and responsible-use guide covering deployment boundaries, consent, data minimization, and abuse reporting.
The honest rule is simple: use ESPectre only where you have the right to, tell the people affected, get consent where required, and protect access to the device and its data. A sensor that works through walls, which Wi-Fi signals do, deserves that care. The project's guidance says the same, and following it is part of using the tool well.
Who Should Try It?
ESPectre fits Home Assistant users who want presence-based automations without cameras: lights and climate that follow real room use, alerts for unexpected movement, and energy savings from switching off devices in empty rooms. It fits makers who already have spare ESP32 boards, since the hardware cost is a board and a USB cable, not a radar module. And it fits builders who want to experiment, because the SDK, the open dataset, and the published validation reports give you something real to build on.
It is less useful if you need to know who is in a room, count occupants, detect a still person reliably, or run a certified security system. Hackaday, covering the project in January 2026, made a similar point: pairing a sensor like this with a PIR sensor can give more robust results, since PIR only senses what it can see, while ESPectre works on Wi-Fi, which can penetrate walls (Hackaday). It is also the wrong tool if your rooms have weak or unstable Wi-Fi, since detection depends on placement, the access point, and the radio environment. Test one room first, tune the threshold, and only then buy boards for the rest of the house.
Licensing is friendly for both hobbyists and companies. First-party code is available under GPLv3, and eligible parts are also available under a separate commercial license for closed-source firmware, while the ESPHome frontend stays GPLv3-only. If you are wondering what open source licensing means in practice, the earlier explainer What Is Open Source? covers the basics.
Frequently Asked Questions
Do I need a camera, microphone, or radar module?
No. You need a supported ESP32 board and the Wi-Fi network already in the room. The board reads Wi-Fi Channel State Information and reports motion from changes in the radio channel.
Which ESP32 boards work?
The ESP32-C6, ESP32-C5, ESP32-C3, ESP32-S3, ESP32-S2, and classic ESP32, on a normal 2.4 GHz Wi-Fi 4 (802.11n) network. ESP32-C5 and ESP32-C6 require ESP-IDF in the ESPHome component, because ESPHome does not support the Arduino framework on those chips.
Does it work with Home Assistant?
Yes, in two ways: natively through the ESPHome component, which creates motion and movement score entities, or through MQTT with Home Assistant discovery in the Native firmware path. It also appears as a standard Matter occupancy sensor for Matter controllers, though controller validation is still limited.
Can it tell who is in the room, or count people?
No. It detects changes in the radio environment. It does not identify people, count them, or prove that a room is empty, and a person sitting still can read as unoccupied.
Does it send data to the cloud?
No. Everything runs on the device, and cloud connectivity is not required. Motion and a movement score are reported locally, through Home Assistant, MQTT, Matter, or the local HTTP API.
How much does it cost to try?
A supported ESP32 development board and a USB cable are the hardware you need, plus the Wi-Fi network you already have. The software, firmware, SDK, dataset, and docs are open source.
The Bottom Line
ESPectre takes something your house already has, Wi-Fi signals bouncing around every room, and turns it into a sensor that respects your privacy better than a camera ever could. It is not perfect: it sees motion, not people, it needs one board per room, and Matter support is still being validated. But for Home Assistant automations, it is a remarkably cheap and elegant idea, executed in the open, with the dataset and docs to back it up. Flash one board, put it in one room, and let your Wi-Fi tell you when the room wakes up.
Read this article in Indonesian: ESPectre: Ubah ESP32 Apa Pun Menjadi Sensor Gerak Wi-Fi yang Privat.
