Real-time flights display. No login or account required. Easy configuration through the web interface.
Display flights in your area and display them on the screen of the ESP32 TTGO-Display or LilyGo-T-Display-S3 module. Under the hood it uses the API of FlightRadar24.com but only for flight updates. Internally there is a database with airport, aircraft and airline data with graphics to minimize the requests.
This application retrieves the current flights near a configured location and displays them sequentially on the display.
Example of layout on LilyGo-T-Display-S3
- History
- Features
- Prerequisites
- Getting Started
- Project structure
- Status overview
- Display and buttons
- Configuration
- Case / Enclosure
- Suggestions
- Credits
| Sep 14 2026 | Added the combined flights + clock display mode |
| Sep 13 2026 | Clock screen (top button) and stepped backlight brightness (bottom button) |
| Sep 3 2026 | Added backlight dimming controlled with the upper/lower buttons |
| Aug 25 2026 | Fixed display issues with updating, new logo, removed scrollbar |
| Jan 10 2026 | Optimized data tables |
| Jan 4 2026 | Created build / release script |
| Oct 21 2023 | Added configuration from LilyGo-T-Display-S3 with help from ulihuber |
| Oct 25 2022 | Use LVGL for graphics |
| Oct 15 2022 | Filtering for airborne/grounded/gliders/vehicles |
| Oct 14 2022 | Added vertical speed |
| Oct 2 2022 | Bootstrap for HTML overview |
| Jun 16 2022 | Wifi manager for configuration |
| Jun 15 2022 | Use time zones |
| Apr 27 2022 | Import aircraft types |
| Dec 5 2021 | Compressing of RGB565 |
| Nov 21 2021 | Import airlines from Wiki page |
| Nov 8 2021 | New airline logos |
| Oct 31 2021 | Added heading, altitude and speed |
| Oct 6 2021 | Move images from SPIFF to code |
| May 25 2021 | GUI update |
| Dec 26 2019 | Initial version: The "birth" of the project |
The FlightRadar firmware offers the following features:
- Lookup of airplane type and specifics (manufacturer, type, description, engine type and count)
- Lookup of carrier and (if available) display the logo
- Display GPS location, registration, altitude, heading, speed and vertical speed of the airplane
- Lookup of the full name for the from- and to airports name and region, lat/lon
- Lookup and display flag for the countries
- No account required, only WiFi with internet connection!
- Minimal interaction with FlightRadar24; database and graphics are present in firmware
- Clock screen with date, time and the configured location (top button)
- Combined flights + clock mode that shows the clock when no flights are in range
- Backlight brightness dimming in 7 steps (bottom button)
- Configuration using a Web interface
- HTML status screen
- Stay in AP mode at reset (Resetting + pressing top button)
- Hardware: ESP32 TTGO-Display or LilyGo-T-Display-S3
- Software: Visual Studio Code with the PlatformIO extension
- Clone the repository:
git clone https://github.com/rzeldent/esp32-flightradar24-ttgo.git - Open the folder in VS Code with the PlatformIO extension installed
- Build the firmware:
pio run - Flash to the device:
pio run -t upload - Watch the serial output:
pio run -t monitor - Erase the flash for a full reset (also clears the configuration):
pio run -t erase
On first boot, connect to the WiFi access point FlightRadar and configure your network credentials.
After configuration the device starts updating the flights in the configured area.
src/– firmware source (main.cpp, flights, airlines, airports, countries)include/– generated headers and lookup tables (aircraft, airline logos, country flags, images, settings)html/– embedded web configuration pageassets/– screenshots used in this READMEgenerate_images.ps1/generate_images.sh/images_to_lvgl.py– logo, flag and image generation pipeline
When connected to the FlightRadar, the main screen is shown; the overview.
Here details about the device, network and settings are shown.
There are two buttons on the module, the top and the bottom button.
| Button | Action |
|---|---|
| Top | Cycle through the display modes: flights → clock → flights + clock → flights |
| Bottom | Select the next backlight brightness step |
Switching the display mode is only possible when the device is online. During boot the buttons have a special meaning, please refer to the tips in the configuration section below.
The top button selects one of the following modes. The mode is not stored, so after a reboot the device starts in Flights.
| Mode | Description |
|---|---|
| Flights | Shows the flights in the configured area, one after the other. When the area has no flights, the "No flights in range" screen is shown |
| Clock | Shows the date, time and location. Requires a valid NTP time |
| Flights + clock | Shows the flights when there are any, and the clock as long as the configured area has no flights |
In the Flights + clock mode the flights are still retrieved in the background, so the display switches back to the flights as soon as an aircraft enters the area. When retrieving the flights fails (for example when there is no internet connection), the error message is shown instead of the clock.
When there are no flights in the configured area, the information screen shows:
- the
No flights in rangemessage, - the date and time,
- the configured latitude and longitude,
- the configured range in km or miles,
- the configured location and time zone.
In the Clock mode, the clock shows:
- the weekday and the date,
- the time, updated once per second,
- the configured location.
The date and time format follows the Metric units setting:
| Units | Date | Time | Date and time |
|---|---|---|---|
| Metric | %A %d-%m-%Y |
%H:%M:%S (24-hour) |
%A %d-%m-%Y %H:%M:%S |
| Imperial | %A %m/%d/%Y |
%I:%M:%S %p (12-hour) |
%A %m/%d/%Y %I:%M:%S %p |
The clock screen displays the date and the time separately; the combined date and time format is used on the "No flights in range" screen and on the status page.
The clock requires a valid NTP time from the network.
As long as no time is known, the date and time are left empty and No NTP Time is shown instead.
The backlight LED (TFT_BL) is driven with PWM (5 kHz, 8-bit resolution), so it does not audibly whine. Each press of the bottom button selects the next brightness step; after the last step the sequence wraps around to the brightest step:
| Step | Duty cycle |
|---|---|
| 1 | 100% (startup value) |
| 2 | 75% |
| 3 | 50% |
| 4 | 25% |
| 5 | 15% |
| 6 | 10% |
| 7 | 5% |
The selected brightness is not persisted; after a reboot the display starts at full brightness again.
The configuration can be changed using a web browser. Connecting to the flight radar can be done in two ways:
- During startup, connect to the access point
FlightRadar-xxxxxxxxxxxxand log in. In case the browser does not open the page immediately, the url is http://192.168.4.1. - Find the internal IP address of the FlightRadar (from your home router) and enter the url.
- When the password is lost, a fix is to completely erase the ESP32 using the
pio run -t erasecommand. This will reset the device including configuration. If using the esptool, you can do this usingesptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash. However, after erasing, reflashing of the firmware is required.
| Option | Description |
|---|---|
| WIFI SSID / password | Credentials for changing the configuration |
| SSID / password (network) | Network to connect to for internet access |
| Latitude / longitude | Position (decimal format) to observe |
| Range (lat / lon) | Area to observe, in degrees |
| Include airborne | Filter: show airborne flights |
| Include grounded | Filter: show grounded flights |
| Include gliders | Filter: show gliders |
| Include vehicles | Filter: show vehicles on the ground |
| Timezone | Time zone for time and date display |
| Metric units | Use metric or imperial units |
- Sometimes after configuration a reboot is required. If the error screen is shown that it is unable to make a connection, first try to reboot the device,
- When booting, the device waits 30 seconds for a connection. Make a connection to the SSID indicated on the screen using the AP password,
- When connected, go to the ip of the device and, when prompted for the credentials, enter 'admin' and the AP password. This field is required before saving the credentials,
- When the password is lost, holding the top button while booting will clear the configuration.
- When finished disconnect from the wireless network. This should reset the flight radar. Resetting is also a good alternative...
Please take a look at the STL file to create a case for the FlightRadar to host the TTGO-Display and a battery. Thanks to Erwin Reid for creating the models.
Files can be found at Thingiverse.
Another option is from LilyGo (AliExpress). With a little modification, the "LILYGO® T-Display Shell ABS Accessories For T-Display T-PicoC3 T-Display RP2040" can be adapted by removing the stands in the case.
These can be ordered at https://www.aliexpress.com/item/1005004507656890.html
Suggestions especially to faulty or missing logos, airlines etc are welcome. Please make a Pull request and, after verification, this will be added to the main version.
Thanks to FlightRadar24.com to be able to hook into their API.