A live aircraft radar display built on an ESP32-S3, rendering nearby flight traffic on round TFT LCD displays using real-world ADS-B data.
Dylan Bagwell
- Date: 24/06/26
- Version: 0.2
This program generates a radar-style flight tracking display on two 1.28" round TFT LCD screens, using the adsb.fi open data API to fetch real flight data. Security has been prioritized throughout the project via TLS certificate verification, per-session tokens, timeouts, and input validation wherever possible.
- Real-time aircraft plotting by bearing and distance from a fixed ground position (lat/lon)
- Rotary encoder control for adjusting radar range (short press = step range, long press = wipe saved credentials)
- Wi-Fi captive config portal (AP mode) for first-time setup, secured with a randomly generated per-session token
- TLS-verified HTTPS requests to the ADS-B data API using a pinned root certificate
- Credentials stored in non-volatile storage (NVS) via
Preferences, never logged to serial
MCU: ESP32-S3-WROOM-1
| Component | Pin(s) |
|---|---|
| Display 1 (TFT) | DC: 14, CS: 10, MOSI/SDA: 11, SCLK: 12 |
| Display 2 (TFT) | (not yet wired — TODO) |
| RGB LED | 48 |
| Rotary Encoder | CLK: 5, DT: 6, SW: 7 |
TODO: Add buttons or another input method for selecting/viewing individual flight data.
| Exposure | Surface | Risk |
|---|---|---|
| Config portal (HTTP) with token verification | Local AP network only | Low |
| ESP32 in STA mode | Local home network | Very Low |
| API requests over TLS | Outgoing internet | Very Low |
| Router | Public internet | Moderate (depends on router model) |
- On boot, the device checks NVS for saved Wi-Fi credentials and coordinates.
- If none are found (or the saved network fails to connect), it starts
a Wi-Fi AP (
PlaneRadar-Setup) hosting a config portal at192.168.4.1. - The user submits Wi-Fi credentials and their radar's latitude/longitude through the portal, protected by a randomly generated token.
- Once connected in station mode, the device polls the adsb.fi API on a fixed interval, calculates each aircraft's bearing and distance using the haversine formula, and plots it on the radar display.
- A rotary encoder adjusts radar range; a long press on the encoder button wipes stored credentials and restarts the device.
WiFi.hWebServer.hPreferences.hHTTPClient.hWiFiClientSecure.hArduinoJsonAdafruit_NeoPixelAdafruit_GFXAdafruit_GC9A01A
Flight data is obtained from adsb.fi's open data API. More information is available in their README.
- The config portal auto-closes after 5 minutes of inactivity.
- Wi-Fi passwords are cleared from RAM immediately after use and are never printed to serial.
- The root CA certificate is pinned for
opendata.adsb.fito ensure verified HTTPS connections.