# ESP32 Hacking Project ## Overview Firmware and tooling for ESP32 CSI (Channel State Information) sensors used for passive wireless sensing, device tracking, and security monitoring (OPSEC/OSINT/Purple team). ## Goals - Custom ESP32 firmware with remote management, OTA updates, adaptive sampling - BLE scanning and WiFi probe/deauth detection for device intelligence - CSI-based presence detection without cameras - Flask REST API backend for data aggregation and OSINT queries - Fleet management for multiple sensors ## Components | Component | Location | Description | |-----------|----------|-------------| | Firmware | `get-started/csi_recv_router/` | ESP32 sensor firmware (C, ESP-IDF) | | CLI Tools | `~/git/esp-tools/` | `esp-ctl`, `esp-fleet`, `esp-ota` | | Flask API | `~/git/esp32-web/` | REST API backend (Python, Flask) | ## Current State (v1.9) - 3x ESP32-DevKitC V1 deployed with custom firmware - UDP data streams: CSI_DATA, BLE_DATA, PROBE_DATA, ALERT_DATA, EVENT - Remote management via UDP commands (port 5501) - OTA firmware updates (HTTP/HTTPS) - Presence detection via CSI baseline calibration - Multi-channel scanning for broader WiFi coverage - BLE fingerprinting (company_id, tx_power, flags) ## Hardware | Device | Chip | IP Address | Location | |--------|------|------------|----------| | muddy-storm | ESP32-WROOM-32 | 192.168.129.29 | Living Room | | amber-maple | ESP32-WROOM-32 | 192.168.129.30 | Office | | hollow-acorn | ESP32-WROOM-32 | 192.168.129.31 | Kitchen | ## Network Ports | Port | Protocol | Direction | Description | |------|----------|-----------|-------------| | 5500 | UDP | Sensors → Flask | Sensor data streams (CSI, BLE, probes, alerts, events) | | 5500 | TCP | Clients → Flask | REST API (HTTP) | | 5501 | UDP | Flask → Sensors | Sensor commands | ## Data Streams (UDP 5500) | Stream | Format | Use Case | |--------|--------|----------| | CSI_DATA | hostname,count,mac,rssi,... | Motion/presence detection | | BLE_DATA | hostname,mac,rssi,type,name,company_id,tx_power,flags | Device fingerprinting | | PROBE_DATA | hostname,mac,rssi,ssid,channel | Device tracking, SSID enumeration | | ALERT_DATA | hostname,type,source,target,rssi | Wireless IDS (deauth detection) | | EVENT | hostname,key=value pairs | Motion, presence, calibration events | ## Software Stack | Component | Version | Purpose | |-----------|---------|---------| | ESP-IDF | v5.5.2 | Firmware development framework | | Flask | 3.x | REST API backend | | SQLAlchemy | 2.x | Database ORM | | SQLite/PostgreSQL | - | Data storage | | podman | - | Container runtime | ## Key Paths | Path | Description | |------|-------------| | `~/git/esp32-hacking/` | This project (firmware sources, docs) | | `~/git/esp32-web/` | Flask API backend (planned) | | `~/git/esp-tools/` | CLI tools (esp-ctl, esp-fleet, esp-ota) | | `~/esp/esp-idf/` | ESP-IDF toolchain | ## API Endpoints (Planned) Base URL: `http://:5500/api/v1` | Method | Endpoint | Description | |--------|----------|-------------| | GET | `/sensors` | List sensors with status | | GET | `/devices` | List discovered devices | | GET | `/alerts` | Alert feed with filters | | GET | `/probes` | Probe requests | | GET | `/events` | Sensor events | | POST | `/sensors//command` | Send command to sensor | | GET | `/stats` | Aggregate statistics | ## References - [ESP-IDF Docs](https://docs.espressif.com/projects/esp-idf/en/latest/) - [ESP-CSI GitHub](https://github.com/espressif/esp-csi) - [IEEE OUI Database](https://standards-oui.ieee.org/) - [Bluetooth Company Identifiers](https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers/)