Aerial Detection
Detect drones, controllers, and OpenDroneID broadcasts with sequential Wi-Fi/BLE sweeps.
GhostESP’s aerial detector watches both Wi-Fi and BLE airspace to find Remote ID beacons, DJI links, and drone-branded networks. It alternates radios so scans run reliably on every ESP32 board.
Overview
- Phase 1 – Wi-Fi sniffing: Promiscuous capture with channel hopping looks for OpenDroneID NAN frames, DJI OUIs, and drone SSIDs.
- Phase 2 – BLE scanning: Wi-Fi is suspended so BLE can search for OpenDroneID (UUID
0xFFFA) and DJI advertisements (UUID0xFFE0). - Automatic recovery: When BLE stops, GhostNet AP and STA sessions return without user interaction.
Prerequisites
- ESP32 board with both Wi-Fi and BLE (ESP32-S2 can only run Wi-Fi phase).
- Latest GhostESP firmware with aerial detector enabled.
- Serial, GhostLink display, or WebUI terminal access.
- Optional GPS for pairing detections with coordinates.
How to Use
Via Terminal
- Scan for aerial devices (default 30 seconds):
aerialscan 30 - Review captured drones:
aeriallist - Track one device by index or MAC:
aerialtrack 0 - Stop scanning or tracking at any time:
aerialstop
Via Display
- Open the on-device BLE menu.
- Select Aerial Detector.
- Choose an action such as
Scan Aerial Devices,List Aerial Devices, orTrack Aerial Device. - Wait for the command to finish in the terminal pane, then review the results card.
Note for Flipper app: The Aerial Detector submenu is under the Wi-Fi category (not BLE) in the Flipper UI. On-device displays keep it under BLE.
What Gets Detected
- OpenDroneID Remote ID (ASTM F3411) — Wi-Fi NAN frames and BLE service
0xFFFAdecode BasicID, Location, System, SelfID, and OperatorID messages. - DJI protocols — MAC OUI matching and BLE service
0xFFE0flag Mavic, Phantom, Inspire, and other DJI links. - Drone SSIDs — Pattern matching for DJI, Parrot, Autel, Skydio, and FPV networks.
- Telemetry frameworks — Optional MAVLink, FrSky Sport, and CRSF signatures when UART monitoring is enabled.
Each device record stores MAC, vendor, RSSI, GPS/altitude (if broadcast), operator position, and flight status so you can triage real aircraft versus test spoofers.
Spoofing Remote ID for Testing
Use the spoof workflow to broadcast a test drone and confirm your detector (or another receiver) reacts:
aerialspoof DRONE-TEST 37.7749 -122.4194 120
- Sends alternating BasicID and Location frames once per second.
- Wi-Fi remains suspended until you run
aerialspoofstop. - Pair a second GhostESP, run
aerialscan, and verify it listsDRONE-TEST.
Troubleshooting
- “Wi-Fi suspended” message: Normal during BLE phase or spoofing. It clears after the command finishes or you run
aerialstop. - No detections: Increase scan time (
aerialscan 60) so each phase lasts longer, or move closer to the suspected drone. - ESP32-S2 board: Only Wi-Fi detections work; BLE phase is skipped.
- Heap errors during repeated scans: Restart your device
