Browse by type
3D printed case (STL + assembly): MakerWorld · Firmware: Releases
Firmware for an ESP32-C3 Super Mini and a 1.28″ round GC9A01 display (240×240). Shows a circular ADS-B radar around your configured location, with WiFiManager for first-time setup.
PlaneRadar-SetupAfter Wi‑Fi is saved, the device reconnects automatically; the radar runs in the main loop with periodic ADS-B updates (~5 s).
| Action | Effect |
|---|---|
| Short tap | Cycle range preset (5 → 10 → 15 → 25 km); saved to flash |
| Hold 3 s | Clear Wi‑Fi, location, and units; reboot into setup portal |
During setup you can also hold BOOT at power-on to force a credential reset (same as the long press).
First-time setup (no saved Wi‑Fi):
PlaneRadar-Setuphttp://plane-radar.local (preferred) or http://192.168.4.1 — both are shown on the yellow setup screen; captive portal may open automaticallyReconfigure anytime (after the device is on your network):
http://plane-radar.local or http://<device-ip> (e.g. from your router or serial log at boot)The same portal runs on the setup AP and on the device’s LAN IP while connected to Wi‑Fi. mDNS hostname is plane-radar → plane-radar.local (kPortalHostname in config.h). Some clients resolve .local slowly; use the IP if needed.
Custom fields (stored in NVS):
| Field | Purpose |
|---|---|
| Latitude / Longitude | Radar center and ADS-B query position (defaults in config.h until set) |
| Display distances in miles | Ring scale label in mi instead of km (e.g. 6mi vs 10km) |
| Show airport runways | Major-airport runway overlay on the radar (off to hide) |
After a reset, the device reboots and shows the setup screen immediately (no “Connecting” loop on stale credentials).
Layout and colors: include/ui/radar_theme.h.
| Ring 3 label | Outer radius (aircraft scale) |
|---|---|
| 5 km / 3 mi | ~6.7 km |
| 10 km / 6 mi | ~13.3 km (default) |
| 15 km / 9 mi | ~20 km |
| 25 km / 16 mi | ~33.3 km |
Preset and miles/km choice persist across reboot (planeradar NVS namespace).
large_airport); all open runway strips in range (helipads excluded)KJFK); toggle in the Wi‑Fi setup portalpython3 scripts/build_large_airports.pyAs range decreases (or aircraft approach), targets move inward; beyond-ring dots become full symbols when they cross the outer ring.
https://opendata.adsb.fi/api/v3/ui::radar::fetchRadiusKm() — scales with the active preset to roughly the screen edge (so rim dots have data)kAdsbFetchIntervalMs (5 s) in config.hkAdsbShowGroundAircraft)Edit include/config.h for hardware and behavior:
| Area | Keys / notes |
|---|---|
| Portal | kPortalApName, kPortalIp, kPortalHostname / kPortalHostUrl (mDNS; needs -DWM_MDNS in platformio.ini) |
| Wi‑Fi timing | connect attempts, reconnect grace, portal timeout (0 = no timeout) |
| BOOT | kBootPin, kBootResetHoldMs, kBootTapMinMs |
| Display SPI | pins, kDisplayInvert, kDisplayRgbOrder, kDisplaySpiWriteHz |
| Default location | kDefaultRadarLat, kDefaultRadarLon (until portal overrides) |
| ADS-B | kAdsbFetchIntervalMs, kAdsbShowGroundAircraft |
Range presets: include/ui/radar_range.h (kRangePresets).
include/
config.h
hardware/
lgfx_config.hpp
display.h
display_font.h
data/
large_airports.h
ui/
radar_theme.h
radar_range.h
radar_display.h
runway_overlay.h
status_screens.h
services/
wifi_setup.h
radar_location.h
adsb_client.h
data/
ui_font.vlw — embedded smooth UI font (Noto Sans Bold)
scripts/
build_large_airports.py
src/
main.cpp
data/
large_airports_data.cpp
hardware/
ui/
services/
| Display | ESP32-C3 |
|---|---|
| VCC | 3V3 |
| GND | GND |
| RST | GPIO 0 |
| CS | GPIO 1 |
| DC | GPIO 10 |
| SDA (MOSI) | GPIO 3 |
| SCL (SCLK) | GPIO 4 |
| BOOT (user) | GPIO 9 |
pio run -t upload
pio device monitor
superminiplatformio.ini for the Super MiniSingle .bin for esptool-js and similar tools (ESP32-C3, 4 MB, flash at 0x0):
chmod +x scripts/merge-firmware.sh # once
./scripts/merge-firmware.sh
Writes release/plane-radar-merged.bin. Skip rebuild if firmware is already built:
./scripts/merge-firmware.sh --no-build
Or via PlatformIO only (output: .pio/build/supermini/firmware-merged.bin):
pio run -e supermini
pio run -t merge -e supermini
Put the board in download mode (hold BOOT, tap RESET), then flash with Chrome/Edge over USB.
| Workflow | When | Output |
|---|---|---|
| Build | Push / PR to main |
Artifact plane-radar-supermini (merged + split .bin files, ~90 days) |
| Release | Git tag v* (e.g. v1.0.0) |
GitHub Release asset plane-radar-v1.0.0.bin + .sha256 |
To ship a version users can download:
git tag v1.0.0
git push origin v1.0.0
The release workflow builds firmware in CI and attaches the merged image to the release. Download from Releases on GitHub, then flash at 0x0 (ESP32-C3, 4 MB).
$ claude mcp add ESP32-Plane-Radar \
-- python -m otcore.mcp_server <graph>