Cheapest option (~$5). WiFi detection only, no BLE. Connect via USB and flash.
Scanner Board (C5)
ESP32-C5-DevKitC-1 — dual-band 2.4 + 5 GHz, no config needed
BLE Remote ID (ASTM F3411)
WiFi dual-band capture (2.4 + 5 GHz)
DJI DroneID IE parsing
SSID pattern matching (104 patterns)
Bayesian sensor fusion
Your browser does not support Web Serial
Connect your ESP32-C5 via USB, then click to flash. Detects 5 GHz drones.
BLE Scanner
ESP32-S3 — BLE-only, no config needed
BLE Remote ID detection
Smart glasses / privacy alerts
OLED drone + glasses display
Meta, Snap, Xreal, Vuzix, Bose
No WiFi needed
Your browser does not support Web Serial
Standalone BLE detector with OLED. Detects drones AND smart glasses nearby.
Uplink Board
ESP32-C3-DevKitM-1 — needs WiFi config (Step 2)
WiFi STA + backend upload
GPS NMEA parsing
OLED status display
Battery monitoring
Offline ring buffer (100 batches)
Your browser does not support Web Serial
For ESP32-C3 boards. Config (WiFi/URL) is preserved across updates.
Uplink (Plain ESP32 OLED)
ESP32 with OLED — needs WiFi config (Step 2)
WiFi STA + backend upload
Dual UART (BLE + WiFi scanner)
OLED status display
Connectivity watchdog (auto-reboot)
Lock-on command forwarding
Your browser does not support Web Serial
For ideaspark ESP32 OLED boards. Config is preserved across updates.
Step 2 — Configure Uplink
After flashing the Uplink board, keep it plugged in via USB and fill in your settings below.
The configurator writes directly to the board's flash memory over serial.
Stored on the ESP32 only — never sent to any server.
Your Friend or Foe backend server address.
Unique name for this sensor node.
Optional. WiFi hotspot name for direct phone connection. Leave blank for auto.
Optional. Default is "friendorfoe". Stored on the ESP32 only.
Get the hardware — ESP32-S3 (scanner) + ESP32-C3 (uplink) + GPS module + OLED display.
See INSTALL.md for the full BOM (~$25-40 total).
Flash the Scanner — connect the ESP32-S3 via USB, click "Flash Scanner Firmware" above.
No configuration needed — it auto-starts scanning.
Flash the Uplink — disconnect the S3, connect the ESP32-C3, click "Flash Uplink Firmware".
Configure the Uplink — with the C3 still plugged in, fill in WiFi and backend settings
in Step 2 above and click "Send Configuration to Board". Settings are saved to flash.
Wire the boards — connect TX/RX/GND between Scanner and Uplink, attach GPS and OLED to the Uplink.
See the wiring diagram for pin assignments.
Power on — both boards via USB or a shared 5V supply. The OLED will show connection status,
GPS fix, and drone detection count.
This page is deployed automatically via GitHub Pages with CI-built firmware binaries.
When you click a flash button, your browser downloads the firmware from this site and writes it
to your ESP32 over USB — no installs, no toolchain, no command line.
The configuration step also uses the browser's serial connection to write your WiFi credentials
and backend URL directly to the ESP32's flash memory. Your credentials never leave your browser
— they go straight to the board over USB.
Troubleshooting
"No compatible device found" — make sure you're using a data-capable USB cable (not charge-only).
"Failed to connect" — hold the BOOT button on the ESP32 board while clicking flash, then release after connection starts.
Button says "Not supported" — switch to Chrome or Edge. Firefox and Safari do not support Web Serial.
Config says "No response" — press the RST button on the C3 board, then quickly click "Send Configuration". The board waits 3 seconds for config at boot.
Firmware files missing — the CI may not have run yet. Check Actions or download from Releases.