Friend or Foe ESP32 Flasher

Flash current ESP32-S3 firmware — production node, seed node, and FoF Badge — 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.

Seed Scanner Board (S3)

ESP32-S3 Seed/Mini carrier — 8 MB flash, no config needed
  • BLE Remote ID (ASTM F3411)
  • WiFi promiscuous capture (2.4 GHz)
  • Calibration-mode BLE UUID filtering
  • Seed UART pin mapping
  • Runtime identity: scanner-s3-combo-seed
Your browser does not support Web Serial
Use this for Gate/seed SATM scanner boards. It reports the seed variant explicitly.

Uplink Board (S3)

ESP32-S3 N16R8 — needs WiFi config (Step 2)
  • WiFi STA + backend upload
  • GPS NMEA parsing
  • Dual scanner UART slots
  • Calibration-mode fleet control
  • OTA relay to attached scanners
Your browser does not support Web Serial
Current production uplink target. Config (WiFi/URL) is preserved across updates.

FoF Badge Uplink

Seeed XIAO ESP32-S3 — badge LCD + dual scanner UART
  • ST7735 badge display
  • BLE + WiFi scanner slots
  • Firmware cache for badge scanners
  • UART relay updates to attached scanners
  • Runtime identity: uplink-s3-fof_badge
Your browser does not support Web Serial
Flash the badge uplink once, then let it stage and relay scanner updates over its UART ports.

FoF Badge Scanner

Seeed XIAO ESP32-S3 scanner module — no config needed
  • BLE + WiFi scanner build
  • Badge UART pin mapping
  • Scanner-managed firmware checks
  • OTA receiver with CRC/NACK relay
  • Runtime identity: scanner-s3-combo-fof_badge
Your browser does not support Web Serial
Use this for first-time recovery or bench setup; normal scanner updates come through the badge uplink.

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 "SCANNER" | -------------> | ESP32-S3 "UPLINK" | | | JSON messages | | | Dual-core, 2.4 GHz WiFi | | WiFi STA (always on) | | BLE extended discovery | | HTTP POST -> backend | | | | GPS, OLED, LED, Battery | | BLE scan + WiFi promisc | | Dual UART RX | | Bayesian fusion + UART TX | | | +-------------------------------+ +---------------------------+ | v +-------------------+ | FastAPI Backend | | /detections/ | | drones | +-------------------+

Quick Start

  1. Get the hardware — ESP32-S3 scanner/seed boards + ESP32-S3 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 (S3)" or "Flash Seed Scanner (S3)" above. No configuration needed — it auto-starts scanning.
  3. Flash the Uplink — connect the ESP32-S3 uplink board, click "Flash Uplink (S3)".
  4. Configure the Uplink — with the S3 uplink 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-S3 +----------------+ +----------------+ | TX ---+-- GPIO 17 ---> | GPIO 20 -- RX | | RX ---+-- GPIO 18 <--- | GPIO 21 -- TX | | GND ---+----------------+-- GND | +----------------+ +----------------+ Seed Scanner ESP32-S3 Uplink ESP32-S3 +----------------+ +----------------+ | TX ---+-- GPIO 1 ---> | scanner RX | | RX ---+-- GPIO 2 <--- | scanner TX | | GND ---+----------------+-- GND | +----------------+ +----------------+ Uplink ESP32-S3 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.64.68-live-follow — Full Install Guide — Detection Parity — GitHub