Wi-Fi CSI

SWMD

Detecting human presence through Wi-Fi, not cameras.

A privacy-first sensing system that reads tiny changes in Wi-Fi signals to infer room occupancy.
Built with ESP32-S3 CSI capture, a Python detection backend, and a live radar-style dashboard.

live-radar-dashboard.local
rate ~10 Hz
mode CSI RX
status occupied

About the project

Presence detection without cameras or wearables.

SWMD uses ordinary Wi-Fi signal behavior as a room sensor, keeping the sensing layer lightweight and privacy-conscious.

The system uses Wi-Fi Channel State Information (CSI) from an ESP32-S3 to detect when a person is present in a room, without any camera or wearable.

The ESP32-S3 captures CSI from incoming Wi-Fi packets. To keep a steady receive rate, it pings the gateway 10 times per second, then sends each CSI frame to a Python backend over the USB serial console.

The backend runs a presence detector that co-confirms motion, phase, and baseline shifts using auto-tuned thresholds, Hampel/PCA CSI denoising, and hold-and-decay logic.

The current senior-project flow uses one ESP32-S3 sensing node: calibrate the empty room, stream CSI to the laptop, and display a live occupied or empty decision on the dashboard.

Sensor ESP32-S3 CSI
Privacy layer No camera
Sampling target 10 frames/s
Output Presence

How it works

A simple signal pipeline from room to dashboard.

CSI frames move from the ESP32-S3 to the PC, where the backend turns signal changes into an occupancy estimate.

ESP32-S3 captures CSI

The board receives Wi-Fi traffic and extracts Channel State Information from incoming packets.

USB serial to PC

Frames stream through the ESP32-S3 UART console while gateway pings keep the receive rhythm steady.

Python detects + visualizes

The backend filters CSI frames, applies the detector, and visualizes live confidence on a radar-style dashboard.

Tech stack

Hardware, firmware, backend, and dashboard.

The project combines embedded Wi-Fi CSI collection with Python signal processing and a browser-based visualization layer.

Hardware

ESP32-S3 Wi-Fi 2.4 GHz CH343 UART bridge

Firmware

ESP-IDF v5.3 C gateway ping loop

Backend

Python 3 Flask NumPy pyserial Hampel/PCA filter

Frontend dashboard

HTML5 Canvas vanilla JS

Tools

Git VS Code Windows PowerShell

Features

Built for real-time sensing and field testing.

SWMD focuses on live feedback, one-node calibration, and repeatable presence testing.

ESP32-S3 Gateway AP

One ESP32-S3 captures CSI from gateway replies and streams frames to the backend.

  • Real-time presence detection (~10 Hz)
  • Live radar-style room visualization
  • Auto-calibration with user-controlled cooldown that lets you leave the room first
  • Single ESP32-S3 sensing node
  • CSI heatmaps for amplitude, baseline shift, and phase
  • Hampel + PCA CSI denoising before detection
  • USB serial CSI stream from the ESP32-S3 to the laptop

Prototype

Single-node CSI sensing, live backend feedback.

The prototype streams CSI from the ESP32-S3 into the laptop over USB serial, then Python detector code filters the frames and updates the radar dashboard.

ESP32-S3 CSI capture
USB serial CSI Python processing
Python code detector.py

ESP32-S3 node -> laptop USB serial stream -> Python detector code.

Hardware setup

One ESP32-S3 captures Wi-Fi CSI while placed inside the test room and connected to the laptop over USB.

Streaming link

The firmware prints CSI frames over the UART console, keeping the receiver rate stable with gateway pings.

Detection dashboard

The Python backend applies CSI denoising and detector logic, then displays activity on the live radar view.

Team

Students and supervisor.

S1

Sayed Jaafar Sadeq

Student

20184311@stu.uob.edu.bh Download CV
S3

Hashem Saeed Alkhanaizi

Student

202203100@stu.uob.edu.bh Download CV
SV

Dr. Mohamed Baqer

Supervisor

mbaqer@uob.edu.bh

Contact

Send us a message.

Contact us

Use the form below to reach the SWMD team directly.

SWMD was built as a compact sensing prototype for privacy-aware room presence detection using Wi-Fi CSI, embedded hardware, and Python-based inference.

info@wifisense.org University of Bahrain