Friend or Foe ESP32 Flasher

Flash drone detector firmware to your ESP32 boards — directly from your browser.

Browser requirement: Web Serial requires Google Chrome or Microsoft Edge (version 89+). Firefox and Safari are not supported.

Step 1 — Flash Firmware

Scanner Board (S3)

ESP32-S3-DevKitC-1 — 2.4 GHz, no config needed
  • BLE Remote ID (ASTM F3411)
  • WiFi promiscuous capture (2.4 GHz)
  • DJI DroneID IE parsing
  • SSID pattern matching (104 patterns)
  • Bayesian sensor fusion
Your browser does not support Web Serial
Connect your ESP32-S3 via USB, then click to flash. That's it.

WiFi Scanner (ESP32)

Plain ESP32 DevKit — 2.4 GHz WiFi only, no config needed
  • WiFi promiscuous capture (2.4 GHz)
  • DJI DroneID IE parsing
  • WiFi Beacon RID + French DRI
  • SSID pattern matching (104 patterns)
  • Bayesian sensor fusion
Your browser does not support Web Serial
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.

System Architecture

+-------------------------------+ UART 921600 +---------------------------+ | ESP32-S3 or C5 "SCANNER" | -------------> | ESP32-C3 "UPLINK" | | | JSON messages | | | S3: Dual-core, 2.4 GHz WiFi | | WiFi STA (always on) | | C5: Single-core, 2.4+5 GHz | | HTTP POST -> backend | | | | GPS, OLED, LED, Battery | | BLE scan + WiFi promisc | | UART RX | | Bayesian fusion + UART TX | | | +-------------------------------+ +---------------------------+ | v +-------------------+ | FastAPI Backend | | /detections/ | | drones | +-------------------+

Quick Start

  1. Get the hardware — ESP32-S3 (scanner) + ESP32-C3 (uplink) + GPS module + OLED display. See INSTALL.md for the full BOM (~$25-40 total).
  2. Flash the Scanner — connect the ESP32-S3 via USB, click "Flash Scanner Firmware" above. No configuration needed — it auto-starts scanning.
  3. Flash the Uplink — disconnect the S3, connect the ESP32-C3, click "Flash Uplink Firmware".
  4. 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.
  5. 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.
  6. Power on — both boards via USB or a shared 5V supply. The OLED will show connection status, GPS fix, and drone detection count.

Wiring Reference

Scanner ESP32-S3 Uplink ESP32-C3 +----------------+ +----------------+ | TX ---+-- GPIO 17 ---> | GPIO 20 -- RX | | RX ---+-- GPIO 18 <--- | GPIO 21 -- TX | | GND ---+----------------+-- GND | +----------------+ +----------------+ Scanner ESP32-C5 Uplink ESP32-C3 +----------------+ +----------------+ | TX ---+-- GPIO 4 ---> | GPIO 20 -- RX | | RX ---+-- GPIO 5 <--- | GPIO 21 -- TX | | GND ---+----------------+-- GND | +----------------+ +----------------+ Uplink ESP32-C3 Peripherals: GPIO 4 (SDA) ---> SSD1306 OLED SDA GPIO 5 (SCL) ---> SSD1306 OLED SCL GPIO 6 (TX) ---> GPS module RX GPIO 7 (RX) <--- GPS module TX GPIO 8 ---> Status LED (+ 220ohm -> GND) GPIO 3 (ADC) <--- Battery voltage divider midpoint 3.3V ---> OLED VCC, GPS VCC GND ---> OLED GND, GPS GND, LED GND

How It Works

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

Friend or Foe ESP32 Drone Detector — v0.10.0-beta — Full Install GuideDetection ParityGitHub