Airspace Monitor
Airspace Monitor is a self-contained, real-time flight tracking device built on the ESP32 microcontroller platform. It integrates directly with the...
Airspace Monitor
Category: Embedded Systems / IoT / Real-Time Data Visualisation
Platform: LilyGO T-Display-S3 / TTGO T-Display (ESP32 / ESP32-S3)
Framework: Arduino via PlatformIO | C++
Status: Active — Production Ready
Project Overview
Airspace Monitor is a self-contained, real-time flight tracking device built on the ESP32 microcontroller platform. It integrates directly with the FlightRadar24 public API to continuously pull live aircraft data for a user-defined geographic region and render it on the compact TFT display of the LilyGO hardware. No subscriptions, no accounts, and no cloud services are required beyond a standard WiFi internet connection.
The device operates as a fully standalone unit — placeable anywhere with a power source and a WiFi signal, making it ideal for aviation enthusiasts, hobbyists, air traffic watchers, and professionals who want always-on situational awareness of local airspace.
Core Features
Real-Time Flight Data
- Continuously polls the FlightRadar24 API for live aircraft positions within a configurable latitude/longitude bounding box
- Displays aircraft sequentially in a scrolling ticker-style presentation
- Configurable observation radius (in degrees) centred on any GPS coordinate
Embedded Aircraft Database
- Ships with a comprehensive onboard database of aircraft types (manufacturer, model, engine type, engine count, aircraft category)
- Full airline database with logos embedded in firmware — eliminates repeated API calls and renders instantly
- Complete airport database (IATA codes, full names, city/region, coordinates) for departure/destination lookups
- Country flags and country names for origin/nationality display
- All databases compiled into firmware and stored in flash — no external storage required
Per-Flight Information Display
- Aircraft registration and call sign
- Aircraft type and airline carrier (with carrier logo where available)
- Departure and destination airports (full names and regions)
- Current altitude (metric or imperial)
- Ground speed and heading
- Vertical speed (climb/descent rate)
- GPS coordinates of the aircraft
Advanced Filtering System
- Toggle inclusion/exclusion of: airborne aircraft, grounded aircraft, gliders, and ground vehicles
Web Configuration Interface
- Built-in web server accessible via browser over WiFi
- WiFi credentials, location, radius, filters, units, and timezone configurable without reflashing
- Initial setup via captive WiFi AP (FlightRadar) — device broadcasts its own hotspot on first boot
Clock Mode
- Top hardware button toggles between flight display mode and a full-screen clock mode (timezone-aware)
HTML Status Dashboard
- Browser-accessible status page showing device health, network info, current configuration, and live system state
Technical Architecture
| Component | Detail |
|---|---|
| MCU | ESP32 (TTGO) / ESP32-S3 @ 240 MHz (T-Display-S3) |
| Display | ST7789 IPS TFT — 135x240 (TTGO) / 170x320 (S3) |
| Display Library | TFT_eSPI |
| Graphics Engine | LVGL 8.3.x — hardware-accelerated UI framework |
| HTTP Client | Arduino ESP32 HTTPClient (HTTPS with ArduinoJson streaming) |
| Web Interface | Bootstrap 5 (gzip-embedded), custom Moustache templating |
| Configuration | IotWebConf — persistent WiFi and settings management |
| Time | micro-timezonedb — POSIX timezone database, NTP-synced |
| Build System | PlatformIO (supports esp32dev and lilygo-t-display-s3 envs) |
Key Libraries
- bodmer/TFT_eSPI — display driver with DMA support
- lvgl/lvgl — UI widgets and rendering pipeline
- bblanchon/ArduinoJson — zero-copy JSON streaming parser
- prampec/IotWebConf — captive portal and persistent config
- rzeldent/micro-timezonedb — compact IANA timezone support
- rzeldent/micro-moustache — minimal HTML template engine
Configuration Options
All settings adjustable via web interface without reflashing:
| Setting | Description |
|---|---|
| WiFi SSID and Password | Network credentials for internet access |
| AP SSID and Password | Configuration portal access credentials |
| Latitude / Longitude | Observation centre point (decimal format) |
| Range (degrees) | Observation radius around centre point |
| Filters | Airborne / Grounded / Gliders / Ground Vehicles |
| Timezone | IANA timezone string |
| Units | Metric (km/h, meters) or Imperial (knots, feet) |
Development History
| Date | Milestone |
|---|---|
| Dec 2019 | Initial prototype — birth of the project |
| Oct 2022 | LVGL integration for hardware-accelerated graphics |
| Oct 2022 | Filtering system for airborne, grounded, gliders |
| Oct 2023 | LilyGO T-Display-S3 support added |
| Jan 2026 | Optimised data tables for faster lookups |
Hardware Compatibility
| Device | Status |
|---|---|
| TTGO T-Display (ESP32) | Fully Supported |
| LilyGO T-Display-S3 (ESP32-S3) | Fully Supported |
Deployment
- Clone repository and open in PlatformIO (VS Code extension)
- Select appropriate environment (esp32dev or lilygo-t-display-s3)
- Build and flash to device via USB
- On first boot, connect to the FlightRadar WiFi AP from any device
- Navigate to 192.168.4.1 and enter home WiFi credentials and location
- Device reboots and begins tracking flights immediately
Holding the top button during boot clears all configuration and returns to factory defaults.