The best part? There is absolutely no coding or soldering required!
Open-source firmware that shows live ADS-B traffic on a sweeping radar around your preset position. Built for the LilyGO T-Encoder Pro and the Waveshare ESP32-S3-Knob-Touch-LCD-1.8, inspired by ESP32-Plane-Radar and deskradar.
Firmware is CC BY-NC-SA 4.0 (LICENSE) - shareable for hobbyists, not for closed commercial forks.
Not for safety-critical use. FlightScnr is not certified for aviation or navigation, depends on external APIs, and uptime is not guaranteed. Every boot shows a disclaimer on the touchscreen (see assets/FlightScnr_disclaimer.png). Tap Accept to continue. Optionally tap Don’t show again then Accept (touch only — knob/encoder are ignored) to remember acceptance for the current firmware and disclaimer text version; later boots show a five-second countdown with no Accept button, then continue automatically. Every firmware update or disclaimer wording change requires manual acceptance again. Clear the saved preference from the web portal’s Disclaimer card.
Enclosure: MakerWorld (separate license - see below).
Contributions are welcome. If you find a bug, have an idea, or want to improve the project, open a pull request. For larger changes, opening an issue first is helpful so we can discuss the approach.
Join the FlightScnr community on Discord for any questions or troubleshooting help.
- Radar - sweeping display with range rings (2–30 mi presets: 2, 3, 6, 8, 10, 20, 30; default 8), compass rose, optional sweep line, optional label hide (compass + scale), themed colors (Green default), km/mi/nm units, rim dots for out-of-range traffic. Live ADS-B via adsb.fi, ~2s refresh, up to 64 aircraft.
- Flight detail - tap a blip or short-press the knob: callsign, airline logo/name, route, ICAO type, altitude, speed. Knob cycles visible aircraft. Optional route lookup (see APIs).
- Clock & forecast - swipe down from radar: NTP time, date, current weather, sunrise/sunset. Swipe right for a 3-day forecast (hi/lo, icons, rain %).
- Auto timezone - Fetch Timezone + DST from your radar center (timeapi.io, no API key needed). Manual UTC offset on-device disables auto until re-enabled on the web portal.
- Tomorrow.io weather - optional key + enable checkbox on the web portal; metric or imperial.
- Auto-idle clock (default on) - empty radar (no in-range aircraft) switches to the clock; returns when traffic appears.
- Settings - three on-device pages (network/API status, display/timeouts, color/beep) plus full config at the device’s unique
http://flightscnr-xxxx.local/(or its IP). Web Save applies live - no reboot.
Screen timeouts (configurable on web or device page 2): flight detail 10/20/30s or manual; clock/forecast 5/10/15s or manual. Settings and about auto-return to radar after 10s
From radar: knob = range preset · tap / short press = flight detail · swipe ↓ clock · ↑ about · ← settings
From clock: ← clock settings · → forecast · ↑ radar
From forecast: ← clock · ↑ radar
From flight detail / settings / about: swipe right (or timeout) → back
Everywhere: hold knob 5 s = clear all Wi‑Fi networks and open the setup portal (T-Encoder only — Waveshare has no knob button; use the web UI). Do not hold the screen at power-on - that is BOOT/download mode.
On-device settings: page 2 = brightness, units, compass, sweep, timeouts, idle clock. Page 3 = radar color, beep on/off, tone A–E.
- Power on → if prompted, scan the on-screen QR with the phone camera (or Wi‑Fi QR scanner) to join the SoftAP (FlightScnr-AP-XXXX). Match the SSID on screen if several units are nearby. The captive portal often opens automatically after join; if not, open http://4.3.2.1 while connected to the SoftAP.
- Enter Wi‑Fi credentials (or manage Saved networks). You can also join the SSID manually and open
http://4.3.2.1or the uniquehttp://flightscnr-xxxx.local. Reboot the unit. - After connect: safety disclaimer (touch Accept; optional Don’t show again) → About splash (~5 s) → radar. When acceptance is remembered, the disclaimer still appears for five seconds, then continues.
- Set radar center, weather key, and optional route APIs at
http://flightscnr-xxxx.local/(or the device IP shown on settings page 1). - Optional: Radar basemap card → pick style (Dark Matter, Positron, Voyager, or VFR Sectional) + contrast/wash + Bake coverage, then Generate basemap. Zooming out past the bake needs regenerate; center/facing/style changes do too.
You can save up to 3 Wi‑Fi networks. Preference order is slot order (#1 tried first). Manage them from the setup portal (Saved networks) or the online settings page (Wi‑Fi networks card: add, remove, reorder, update password).
If a network fails repeatedly, it is temporarily skipped for the rest of that boot/session — credentials stay until you delete or edit them. The connecting screen shows whichever SSID is being tried.
If Wi‑Fi stays down through several reconnect attempts, the setup portal opens again (networks are not wiped) so you can add or fix a network.
To change other settings later: same URL, Save. To wipe all Wi‑Fi networks and reopen the portal: hold knob 5s.
Flight detail - route, airline logo, altitude, speed

Settings - network, display, color & audio (3 pages via swipe left)

Clock - time, weather, sunrise/sunset (→ forecast on swipe right)

| Item | Details |
|---|---|
| Boards | LilyGO T-Encoder Pro (390×390 AMOLED) or Waveshare ESP32-S3-Knob-Touch-LCD-1.8 (360×360 IPS). Board is selected at compile time. |
| T-Encoder | Auto-detects DXQ120 (SH8601) or TFD12 (CO5300) panel at boot; piezo beep + knob push button |
| Waveshare | ST77916 + CST816; PWM backlight; rotary encoder only (no push button — Wi‑Fi wipe via web UI); no piezo |
| Enclosure | MakerWorld (T-Encoder; not in repo) |
Requires PlatformIO.
pio run -t upload # auto: USB heuristic / last board / T-Encoder default
pio run -e tencoder-pro -t upload # LilyGO T-Encoder Pro
pio run -e waveshare-knob-18 -t upload # Waveshare Knob Touch LCD 1.8
# or: set FLIGHTSCNR_BOARD=waveshare-knob-18On Waveshare, USB-C plug orientation matters (CH334 hub). If esptool reports the wrong chip, flip the cable.
WebFlasher (no PlatformIO): yashmulgaonkar.github.io/FlightScnr supports both boards. Connect → confirm the Auto-detected board (or select it manually) → choose a release → Install. USB VID/PID alone cannot tell the boards apart (both use Espressif native USB 0x303A:0x1001). Auto instead looks for a FlightScnr board marker already in flash, then falls back to the SPI flash manufacturer as a hint (Boya → Waveshare, Winbond → T-Encoder on known units). Always confirm before Install. Older releases may be T-Encoder-only and are offered as full installs for safer downgrades.
Once the unit is on your network, open the web settings page (http://flightscnr-xxxx.local/ or the device IP):
- Firmware update card → Check GitHub / Install latest to pull the board-specific app image (
FlightScnr-tencoder-pro-app.binorFlightScnr-waveshare-knob-18-app.bin) from the latest GitHub release (app image only — not the merged factory file). - Or upload an app
.binmanually (same card). - After a successful install, press the device reset button (or power-cycle). Do not rely on a soft reboot.
The device also checks GitHub for a newer release on every boot and again after 24 hours of uptime. If one is available, the About screen shows a short “Update available” note (install remains on the web portal).
Merged binary: pio run -t merge -e tencoder-pro (or -e waveshare-knob-18) → .pio/build/<env>/firmware-merged.bin
Builds auto-download tar1090-db and Airports lookups. Wrong T-Encoder panel saved? Erase flash and re-detect, or override with -D FLIGHTSCNR_PANEL_DXQ / -D FLIGHTSCNR_PANEL_TFD12 in platformio.ini.
Sign up at Tomorrow.io, enable Use Tomorrow.io on the web portal, paste key, Save. Fetches only while clock or forecast is open; refreshes after 30 min. Free Open-Meteo is on by default as a fallback when Tomorrow.io is off or unavailable.
Routes (origin → destination) appear on flight detail after you tap a blip — not on the radar sweep.
Enable providers and keys on the web portal. Paste a key and leave the switch on (pasting a key turns that provider on automatically). Multiple comma-separated keys per provider; per-key monthly limits; counters reset each calendar month (NTP).
Order: AirLabs → FlightAware → FR24 → adsbdb (free, no key, default on) → callsign-prefix airline fallback. First provider that returns a complete origin/destination pair wins per callsign.
One live API call waterfall per uncached callsign on first flight-detail open; results cached in RAM + flash (/route_cache.csv, up to 1500 rows, downloadable or clearable from the portal). Cached callsigns don’t count toward limits.
| Service | Sign up |
|---|---|
| AirLabs | airlabs.co/signup |
| FlightAware | aeroapi signup |
| FR24 | fr24api docs |
| adsbdb | Free, no signup — toggle Use adsbdb on the portal |
Original application code, tools, and documentation in this repository are licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (LICENSE).
- Attribution: credit the author and link to the license when you share or adapt this work.
- NonCommercial: you may not use this material for commercial purposes without separate permission.
- ShareAlike: adaptations must be released under the same license.
Vendored libraries (lib/Arduino_GFX, lib/SensorLib, and PlatformIO registry dependencies) remain under their own licenses (GPL, MIT, etc.). Combining them into a binary does not re-license those components. Comply with each upstream license when you distribute builds.
The optional 3D-printed enclosure is not part of this firmware repository. Its digital files and physical prints are governed by the license shown on the linked MakerWorld model page. That content is published under a Standard Digital File License, which includes terms such as:
This user content is licensed under a Standard Digital File License.
You shall not share, sub-license, sell, rent, host, transfer, or distribute in any way the digital or 3D printed versions of this object, nor any other derivative work of this object in its digital or physical format (including - but not limited to - remixes of this object, and hosting on other digital platforms). The objects may not be used without permission in any way whatsoever in which you charge money, or collect fees.
Always read the full license on MakerWorld before downloading, printing, or sharing the enclosure design.

