Final Year Project · January 2026

WISPR

Wi-Fi Intrusion Sensing & Presence Recognition
Non-Invasive Surveillance via Channel State Information

A dual-node ESP32 system that passively captures 802.11 Wi-Fi CSI fluctuations to detect human presence, infer motion direction, and visualise activity in real time, exposing a critical physical-layer privacy vulnerability in ubiquitous wireless infrastructure.

Live CSI Feed
50Packets / sec
64Subcarriers
4.0Detect Threshold
15Confirm Streak
● Presence Detected → L-to-R Motion
Hardware

ESP32 Nodes & Setup

Node A, ESP32 Board
Node B, ESP32 Board
Full Hardware Setup
2ESP32 nodes
50Packets / sec
64CSI Subcarriers
<$10Per node cost
802.11Wi-Fi standard
The Vulnerability

Problem & Proposed Solution

Problem Statement

Wi-Fi Has an Inherent Physical-Layer Vulnerability

Even when 802.11 network traffic is fully encrypted, the physical layer continues to leak environmental data through Channel State Information (CSI). A passive attacker with only a commodity Wi-Fi receiver can capture these signal fluctuations to silently map human activity within the wireless coverage area, no network credentials, no active probing, no interaction with user devices required.


This data can be exploited to detect presence, infer movement patterns, and even reconstruct room layout, all from signals that are normally dismissed as "just noise."

WISPR's Approach

Demonstrate the Risk with Commodity Hardware

Rather than proposing impractical countermeasures (such as Faraday cages, which block all wireless signals and are prohibitively expensive to retrofit), WISPR takes a research-first approach: build the attack ourselves on sub-$10 hardware to prove the vulnerability is real, accessible, and actionable.


The system uses two passively listening ESP32 nodes to capture CSI, processes it through a multi-stage Python pipeline, and visualises presence/direction in real time, making the invisible threat visible.

Project Objectives

What WISPR Sets Out to Achieve

01

Passive Presence Detection

Detect human presence using only ambient Wi-Fi CSI signals, without any active probing or user device involvement.

02

Directional Motion Inference

Infer movement direction (left-to-right / right-to-left) using a dual-node architecture that correlates activation timestamps.

03

Low-Cost Commodity Hardware

Develop a functional sensing system using ESP32 microcontrollers at under $10 per node, deployable by anyone.

04

Real-Time Visualisation

Build a live Python dashboard with RSSI graphs, CSI heatmaps, and an animated stickman tracking presence and direction.

05

Privacy Risk Demonstration

Demonstrate concretely that passive Wi-Fi-based surveillance is feasible, raising awareness about this underappreciated attack surface.

06

Reproducible Research

Document the full pipeline, firmware, signal processing, and GUI, so researchers can replicate, extend, or defend against the technique.

Signal Processing

5-Stage Processing Pipeline

1

CSI Capture, ESP32 Firmware

Each ESP32 node passively captures raw 802.11 CSI packets from ambient Wi-Fi traffic at 50 packets per second (20ms interval) via the esp_wifi_80211_tx hook. Per-subcarrier amplitude values and RSSI are packed into a compact binary UDP payload and streamed over the local network. An SH1106 OLED display shows real-time RSSI graphs and packet counts. Node configuration (IP, port) is persisted using NVS flash storage, surviving reflashes.

2

Binary Receiver & Expansion

Python's BinaryCSIReceiver class runs a dedicated thread per node, parsing binary UDP packets and filtering out null-dominant frames (frames where >98% of subcarrier values are zero). Valid frames are expanded from their sparse representation to a fixed 64-column matrix via expand_to_64(). A 500-frame rolling history buffer feeds downstream analysis. Connection liveliness is tracked with a 2-second timeout watchdog.

3

Digit Feature Extraction

DigitExtractor applies EMA smoothing (α = 0.04) to reduce per-subcarrier noise, then computes amplitude variance normalised against a rolling 200-frame baseline window. Values are trimmed at the 95th percentile to suppress outliers, then normalised between the 2nd and 98th percentile to produce a single scalar "digit" value, a dimensionless indicator of environmental motion activity. A user-selectable subcarrier mask allows specific subcarrier channels to be excluded.

4

Presence Detection with Hysteresis

PresenceDetector applies dual-threshold hysteresis to prevent flickering: a detection threshold of 4.0 triggers candidate presence, while re-entry after a confirmed-low state requires exceeding a higher threshold of 5.2. A 15-frame consecutive streak confirms presence, with graceful decay (−1 per NaN frame) to handle brief signal dropouts. Results are broadcast as a boolean confidence flag per node.

5

Direction Tracking & Live GUI

DirectionTracker correlates Node A/B activation timestamps to infer traversal direction. The StickmanWindow Tkinter GUI updates at ~30 fps, rendering an animated stickman that scales up by 1.55× on crossing events, directional arrows, and real-time RSSI/CSI heatmap panels for both nodes. The dashboard displays presence state, signal strength, and motion history in a single cohesive interface.

Software

Python Dashboard Screenshots

Live GUI, Presence Detected State
Live GUI, Motion Direction State
System Design

Dual-Node Architecture

MONITORED SPACE NODE A ESP32 UDP :8001 OLED display NODE B ESP32 UDP :8000 OLED display SUBJECT CSI fluctuations CSI fluctuations Wi-Fi Router 802.11 beacon source HOST PC Python · NumPy · Matplotlib · Tkinter GUI UDP stream UDP stream
Firmware Stack

ESP32 Nodes

Arduino framework with esp_wifi CSI hooks. Wi-Fi Manager handles AP provisioning. NVS stores IP/port config across reflashes. SH1106 OLED shows live RSSI graph.

Software Stack

Python Dashboard

Threaded UDP receivers → NumPy signal processing → Matplotlib heatmaps → Tkinter stickman GUI. 30 fps update loop. Subcarrier mask selector via Tkinter sub-window.

Key Parameters

Tunable Config

Presence threshold4.0
Hysteresis hi5.2
Confirm streak15 frames
EMA alpha0.04
History buffer500 frames
Crossing scale1.55×
Evaluation

Findings & Results

PASS

Presence Detection Confirmed

WISPR successfully detected human presence across varying distances and room configurations. The hysteresis-based confirmation scheme eliminated false positives caused by transient reflections and environmental movement.

PASS

Dual-Node Advantage

The dual-node architecture significantly improved sensing reliability over single-node baselines and enabled reliable bi-directional motion tracking. Directional accuracy was consistent in open-plan spaces.

PASS

Commodity Hardware Viable

Sub-$10 ESP32 nodes performed covert environmental sensing on par with more expensive purpose-built CSI tools, validating that the attack surface is accessible to low-budget adversaries.

NOTE

Calibration Required

Performance degraded in high-multipath environments and under competing Wi-Fi traffic. Node placement and per-environment threshold calibration are necessary for consistent detection reliability.

Demo

System Demonstration

Live Demo Video
Applications

Business Model & Use Cases

Residential

Smart Home Security

Passive intrusion detection without cameras, privacy-preserving occupancy sensing for residential security applications.

Healthcare

Elderly Care Facilities

Non-intrusive fall and non-movement alerts for elderly residents, monitoring without cameras or wearables.

Enterprise

Cybersecurity Consulting

Demonstrating physical-layer Wi-Fi vulnerabilities to enterprise clients and informing wireless infrastructure security audits.

UN Sustainable Development Goals

SDG Alignment

4

Quality Education

Open-source security research advances academic understanding of wireless privacy vulnerabilities and provides hands-on learning resources.

9

Industry & Innovation

Commodity-hardware approach democratises advanced sensing capabilities, enabling low-cost smart infrastructure sensing for developing regions.

11

Sustainable Cities

Non-invasive occupancy sensing supports smart building management, energy optimisation, and urban infrastructure monitoring.

Roadmap

Future Enhancements

Algorithmic & AI

ML / Deep Learning Integration

LSTM or CNN models for gesture recognition, precise occupancy counting, fall detection, and activity classification from CSI time series.

Hardware & Topology

Multi-Node Mesh Sensing

3+ node topology enabling 2D room mapping, through-wall sensing, and triangulated positioning of multiple simultaneous occupants.

Edge Deployment

On-Device Inference

TinyML inference directly on ESP32-S3 for standalone, server-free operation with sub-millisecond response times.

New Capabilities

Breathing & Heartbeat Detection

Fine-grained CSI analysis to detect micro-movements indicative of respiration and cardiac rhythms for passive health monitoring.

Privacy & Defence

Countermeasure Research

Designing and evaluating physical-layer countermeasures, randomised channel hopping, signal injection, to protect against CSI-based surveillance.

Platform

Web Dashboard & API

Browser-based real-time dashboard with REST API for integration into building management systems and SIEM platforms.

Project Team

Meet the Team

AW
Group Member 01
Abdul Wasay
221580

ESP32 firmware, Wi-Fi CSI capture, OLED display, hardware integration & testing.

WA
Group Member 02
Waqass Ahmed
221504

Signal processing pipeline, Python dashboard, CSI feature extraction, live GUI.

MI
Supervisor
Dr. Mohammad Imran
NCSA Faculty

Department of Cyber Security, National Centre for Cyber Security.

Department

Cyber Security, NCSA

FYP Phase

Phase 3

FYP ID

#25001

Presented

14th May 2026

Stack

ESP32 · Python · NumPy · Matplotlib · Tkinter