A compact live-aircraft radar for ESP8266 and a 240 × 240 GC9A01 round display, with selectable radar range and adaptive aircraft labels.
ARDUnia Fly Radar retrieves nearby aircraft positions from the ADS-B data service and plots aircraft around a configurable location with selectable radar ranges from 10 km to 500 km (the upstream API limits the requested distance to 250 nautical miles). A built-in web interface lets you configure Wi-Fi and the radar center from a phone or computer.
Latest release: v1.6.4
Platform: ESP8266 / NodeMCU
Display: GC9A01, 240 × 240, round TFT
- Circular radar view with range rings, cardinal directions, aircraft markers, and heading indicators when track data is available.
- Seven selectable radar ranges: 10, 20, 30, 40, 50, 100, and 500 km.
- Physical range button on GPIO12 (D6), with the selected range saved in EEPROM.
- Current aircraft count centered at the bottom of the display.
- Adaptive aircraft labels: labels are shown for up to 20 aircraft in range and hidden when traffic is denser.
- Aircraft data refreshed approximately every 15 seconds.
- First-run Wi-Fi setup access point and browser-based configuration page.
- Nearby Wi-Fi network scanning and selection from the setup page.
- Radar center configuration by latitude/longitude or by city name.
- Settings stored in EEPROM so Wi-Fi credentials and radar location survive restart.
- Device information page and option to clear saved network settings.
- Teal ARDUnia intro/setup interface.
This image is a visual concept/reference for the round radar display.
- ESP8266 NodeMCU development board
- GC9A01 round TFT display, 240 × 240 pixels
- USB power supply and suitable wiring
The sketch uses GPIO numbers, not NodeMCU D labels. The range-selection button is connected between GPIO12 (D6) and GND; the firmware enables the internal pull-up.
Connect a momentary push button between GPIO12 (NodeMCU D6) and GND. The input uses INPUT_PULLUP, so no external pull-up resistor is required. Pressing the button cycles through the seven range values. The selected value is stored in EEPROM.
The display's SPI clock and MOSI are provided by the ESP8266 hardware SPI interface. Do not connect the display's MISO unless your particular module requires it. Check your board and display-module pin labels before powering the circuit.
Install the ESP8266 board platform in Arduino IDE and select the appropriate NodeMCU ESP8266 board.
Libraries used by the sketch:
- ArduinoJson — JSON parsing (the sketch uses the ArduinoJson 6-style
DynamicJsonDocumentAPI) - Adafruit GFX Library
- Adafruit GC9A01A
The following are provided by the ESP8266 Arduino core and do not need separate library installs: ESP8266WiFi, ESP8266HTTPClient, WiFiClientSecure, ESP8266WebServer, and EEPROM.
- Install the ESP8266 board package and the libraries listed above.
- Open
ARDUnia_Fly_Radar.inoin Arduino IDE. - Select the correct ESP8266 board and serial port.
- Upload the sketch.
- On first setup, connect a phone or computer to the Wi-Fi access point named
ARDUnia-Fly-Radar-Setup. - Open http://192.168.4.1 in a browser.
- Scan for nearby Wi-Fi networks, select your network, and enter its password.
- Set the radar center using coordinates or the city lookup option, then save the settings. The device restarts and attempts to connect to the configured network.
If the device cannot connect using saved settings, use the setup workflow to configure it again. The web page also provides an option to clear the saved network configuration.
- Aircraft data: adsb.fi Open Data API
- City-name lookup: OpenStreetMap Nominatim
Internet access is required for live aircraft data and city-name lookup. Availability and coverage depend on the upstream data services and local receiver coverage. Aircraft positions can be delayed, incomplete, or unavailable.
The initial configuration access point is open and the sketch uses WiFiClientSecure::setInsecure() for HTTPS clients. This means server certificates are not validated by the firmware. Use the setup access point only in a trusted environment, and do not treat the current network implementation as hardened security.
- Radar range: selected in kilometres from 10, 20, 30, 40, 50, 100, or 500 km; the setting persists in EEPROM.
- API distance cap: requests are capped at 250 nautical miles by the firmware/upstream service limit, so the 500 km display option may not cover a full 500 km radius of source data.
- Range button: GPIO12 (D6), active-low to GND.
- Refresh interval: 15 seconds (
UPDATE_INTERVAL). - Radar center: saved latitude and longitude.
- Wi-Fi: credentials stored in EEPROM.
Change these constants only if you understand the effects on display scaling, API requests, and device memory.
ARDUnia-Fly-Radar/
├── .gitignore
├── ARDUnia_Fly_Radar.ino
├── LICENSE
├── README.md
└── docs/
├── HARDWARE.md
├── SETUP.md
└── images/
├── IMAGE-CREDITS.md
├── device-info.jpg
├── radar-display-concept.png.jpeg
└── web-setup.jpg
Additional guides:
- Adds seven selectable radar ranges and a physical range-selection button.
- Persists the selected range across restarts.
- Displays the aircraft count in a centered status area.
- Hides aircraft labels automatically when more than 20 aircraft are within the selected range to reduce clutter.
- Keeps the existing ESP8266 + GC9A01 hardware platform and web-based Wi-Fi/location setup.
The project maintainer reports that v1.6.4 was tested on physical hardware. The source is available in this repository and the GitHub Release v1.6.4 is published. The GitHub Actions workflow checks that the versioned source exists and compiles it for NodeMCU ESP8266; see the live workflow status. Hardware testing and automated compilation are separate checks.
- Setup access point is not visible: restart the board and check the serial output and power supply.
- Browser page does not open: connect to
ARDUnia-Fly-Radar-Setupfirst, then navigate tohttp://192.168.4.1. - No aircraft appear: verify Wi-Fi connectivity and the configured radar center. The upstream API may have no reports for the selected area or may be temporarily unavailable.
- Display is blank or corrupted: recheck CS/DC/RST wiring, hardware SPI clock/MOSI, power, and the selected board.
- Compilation fails on ArduinoJson: install a version compatible with the ArduinoJson 6 API used by this sketch.
Created by Hamidreza Milaninia for ARDUnia.
- Project page on ARDUnia: ARDUnia Fly Radar
- ARDUnia projects and documentation: ardunia.ir
- Personal / professional website: hrmnia.com
- GitHub organization: github.com/ardunia
- Project repository: ARDUnia-Fly-Radar
Aircraft and geocoding data are provided by third-party services. This project is an independent hobby/learning project and is not affiliated with or endorsed by those services.
This project is provided “as is” for educational and experimental use. Building, wiring, modifying, or operating electronic hardware may cause damage to the board, display, other components, connected equipment, or property, and may cause injury. The author accepts no responsibility for hardware damage, component failure, wiring mistakes, power-supply issues, or other losses resulting from assembling, modifying, or using this project. You build and use the hardware at your own risk.
Before applying power, verify all pin connections, voltage levels, current requirements, polarity, and the specifications of your particular ESP8266 board and display module. Do not assume that every module sold under the same name has identical electrical requirements.
This project is licensed under the MIT License. See the LICENSE file for the full license text.





