ESP32-S2 firmware for the official Flipper Zero WiFi Dev Board. The ESP32-S2 handles RF scanning and outputs line-based UART messages to a companion Flipper Zero app (flock_scanner.fap).
Note: ESP32-S2 does not support Bluetooth/BLE, so BLE scanning is disabled.
- WiFi Scanning: Promiscuous mode detection of probe requests and beacons
- Pattern Matching: Identifies devices based on SSID patterns and MAC OUIs
- UART Telemetry: Line-based serial protocol for the Flipper app
- Event-Driven Architecture: Modular design for easy extension
- Flipper Zero
- Official Flipper Zero WiFi Dev Board (ESP32-S2)
- USB-C cable (for flashing the ESP32-S2)
The WiFi Dev Board routes ESP32-S2 UART0 to the Flipper GPIO header:
- TX = GPIO43
- RX = GPIO44
These are wired on the official board; no extra wiring is required.
For Arduino IDE installation and ESP32 board support, see Getting Started.
No additional libraries are required for the ESP32-S2 build (NimBLE is not used).
If your Arduino-ESP32 core does not provide esp32-hal-neopixel.h, install:
- Adafruit NeoPixel (fallback for the onboard RGB LED)
- Select board: Tools > Board > ESP32S2 Dev Module
- Upload speed: 115200 (or lower if upload fails)
- CPU frequency: 240MHz (WiFi/BT)
- Partition scheme: Default 4MB with spiffs or Huge APP (3MB No OTA/1MB SPIFFS)
- Connect ESP32-S2 via USB-C
- Select port: Tools > Port
- Click Upload
- Seat the WiFi Dev Board on the Flipper GPIO header
- Power on -- the ESP32-S2 initializes WiFi scanning automatically
Line-based, newline-terminated messages (see Telemetry Format for full details):
STATUS,SCANNING
STATUS,BLE_UNSUPPORTED
SEEN,RSSI=-62,MAC=AA:BB:CC:DD:EE:FF,CH=6
ALERT,RSSI=-62,MAC=AA:BB:CC:DD:EE:FF,RADIO=wifi,CH=6,ID=Flock,CERTAINTY=95
CLEAR
The Flipper app consumes these lines directly.
The onboard RGB LED provides status feedback:
- Boot: cycles red/green/blue
- Scanning: flashes blue
- Alert: solid red
LED pins (discrete RGB, active-low): R=GPIO6, G=GPIO5, B=GPIO4.
- Confirm baud rate: 115200
- Confirm app:
flipper_flock_appinstalled on the Flipper - Check seating: Dev board seated properly on Flipper GPIO header
- Check protocol: Use serial monitor to verify line-based output
flipper-zero/
├── dev-board-firmware/
│ └── flocksquawk-flipper/
│ ├── flocksquawk-flipper.ino # Main sketch
│ └── src/
│ ├── RadioScanner.h # Variant-specific RF scanning
│ ├── SoundEngine.h # Stub (no audio on Flipper)
│ └── TelemetryReporter.h # UART line-based reporter
├── flock_scanner.fap # Flipper Zero app (prebuilt)
└── README.md
Shared headers (EventBus.h, ThreatAnalyzer.h, Detectors.h, etc.) are in common/.
- Configuration -- WiFi tuning, detection patterns
- Architecture -- pipeline, detectors, thread safety
- Extending -- adding detectors, patterns, new variants
- Build System -- Makefile and Docker builds
- Troubleshooting -- common issues
- Inspired by flock-you
- ESP32 community for excellent hardware support
- NimBLE-Arduino for efficient BLE scanning on non-S2 targets