[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82730":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":9,"pushedAt":9,"updatedAt":26,"readmeContent":27,"aiSummary":28,"trendingCount":15,"starSnapshotCount":15,"syncStatus":29,"lastSyncTime":30,"discoverSource":31},82730,"ESP32-Plane-Radar","MatixYo\u002FESP32-Plane-Radar","MatixYo","Open-source ESP32 firmware for a 1.28″ round display that shows live ADS-B aircraft around your location as a sonar-style plane radar.",null,"C++",461,58,13,9,0,14,89,235,60,95.29,"MIT License",false,"main",true,[],"2026-06-12 04:01:38","# Plane Radar\n\n\u003Cimg width=\"800\" height=\"450\" alt=\"plane-radar\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F716d0992-dab8-47ba-8f1a-2aec7f607419\" \u002F>\n\n**3D printed case (STL + assembly):** [MakerWorld](https:\u002F\u002Fmakerworld.com\u002Fen\u002Fmodels\u002F2872376-esp32-plane-radar-live-ads-b-on-a-round-display#profileId-3207083) · **Firmware:** [Releases](https:\u002F\u002Fgithub.com\u002FMatixYo\u002FESP32-Plane-Radar\u002Freleases)\n\nFirmware 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.\n\n## What it does\n\n1. **Wi‑Fi setup** (if needed) — captive portal on AP **`PlaneRadar-Setup`**\n2. **Radar** — live aircraft from [adsb.fi](https:\u002F\u002Fopendata.adsb.fi\u002F) on a sonar-style grid\n\nAfter Wi‑Fi is saved, the device reconnects automatically; the radar runs in the main loop with periodic ADS-B updates (~5 s).\n\n## Controls (BOOT, GPIO 9, active LOW)\n\n| Action | Effect |\n|--------|--------|\n| **Short tap** | Cycle range preset (5 → 10 → 15 → 25 km); saved to flash |\n| **Hold 3 s** | Clear Wi‑Fi, location, and units; reboot into setup portal |\n\nDuring setup you can also hold BOOT at power-on to force a credential reset (same as the long press).\n\n## Wi‑Fi setup portal\n\n1. Connect to **`PlaneRadar-Setup`**\n2. Open **`http:\u002F\u002Fplane-radar.local`** (preferred) or **`http:\u002F\u002F192.168.4.1`** — both are shown on the yellow setup screen; captive portal may open automatically\n3. Set home Wi‑Fi, then save\n\nmDNS hostname is configured in `config.h` as `kPortalHostname` (`plane-radar` → **plane-radar.local** on the setup AP). Some phones resolve `.local` slowly; use the IP if needed.\n\n**Custom fields** (stored in NVS):\n\n| Field | Purpose |\n|-------|---------|\n| **Latitude \u002F Longitude** | Radar center and ADS-B query position (defaults in `config.h` until set) |\n| **Display distances in miles** | Ring scale label in **mi** instead of **km** (e.g. `6mi` vs `10km`) |\n\nAfter a reset, the device reboots and shows the setup screen immediately (no “Connecting” loop on stale credentials).\n\n## Radar display\n\n### Grid\n\n- Dark blue background, subdued green rings and crosshairs\n- White **N \u002F S \u002F E \u002F W** at the bezel; range label on the **east** spoke (ring 3 = ¾ of outer radius)\n- White center dot\n\nLayout and colors: `include\u002Fui\u002Fradar_theme.h`.\n\n### Range presets\n\n| Ring 3 label | Outer radius (aircraft scale) |\n|------------|-------------------------------|\n| 5 km \u002F 3 mi | ~6.7 km |\n| 10 km \u002F 6 mi | ~13.3 km (default) |\n| 15 km \u002F 9 mi | ~20 km |\n| 25 km \u002F 16 mi | ~33.3 km |\n\nPreset and miles\u002Fkm choice persist across reboot (`planeradar` NVS namespace).\n\n### Aircraft\n\n- **Inside the outer ring** — red heading triangle, magenta speed vector (clipped at the ring), callsign \u002F type \u002F altitude tags\n- **Outside the ring** (still within ADS-B fetch) — small **red dot on the screen rim** at the correct bearing (direction cue; not distance-accurate past the ring)\n- **Tags** — placed toward the **center**: west (left) → tag on the **right** of the symbol; east (right) → tag on the **left**\n\nAs range decreases (or aircraft approach), targets move inward; beyond-ring dots become full symbols when they cross the outer ring.\n\n### ADS-B\n\n- Source: `https:\u002F\u002Fopendata.adsb.fi\u002Fapi\u002Fv3\u002F`\n- Fetch radius: `ui::radar::fetchRadiusKm()` — scales with the active preset to roughly the screen edge (so rim dots have data)\n- Poll interval: `kAdsbFetchIntervalMs` (5 s) in `config.h`\n- Ground aircraft hidden by default (`kAdsbShowGroundAircraft`)\n\n## Configuration\n\nEdit **`include\u002Fconfig.h`** for hardware and behavior:\n\n| Area | Keys \u002F notes |\n|------|----------------|\n| Portal | `kPortalApName`, `kPortalIp`, `kPortalHostname` \u002F `kPortalHostUrl` (mDNS; needs `-DWM_MDNS` in `platformio.ini`) |\n| Wi‑Fi timing | connect attempts, reconnect grace, portal timeout (`0` = no timeout) |\n| BOOT | `kBootPin`, `kBootResetHoldMs`, `kBootTapMinMs` |\n| Display SPI | pins, `kDisplayInvert`, `kDisplayRgbOrder`, `kDisplaySpiWriteHz` |\n| Default location | `kDefaultRadarLat`, `kDefaultRadarLon` (until portal overrides) |\n| ADS-B | `kAdsbFetchIntervalMs`, `kAdsbShowGroundAircraft` |\n\nRange presets: `include\u002Fui\u002Fradar_range.h` (`kRangePresets`).\n\n## Project layout\n\n```\ninclude\u002F\n  config.h\n  hardware\u002F\n    lgfx_config.hpp\n    display.h\n    display_font.h\n  ui\u002F\n    radar_theme.h\n    radar_range.h\n    radar_display.h\n    status_screens.h\n  services\u002F\n    wifi_setup.h\n    radar_location.h\n    adsb_client.h\ndata\u002F\n  ui_font.vlw              — embedded smooth UI font (Noto Sans Bold)\nsrc\u002F\n  main.cpp\n  hardware\u002F\n  ui\u002F\n  services\u002F\n```\n\n## Wiring (GC9A01 ↔ ESP32-C3 Super Mini)\n\n| Display | ESP32-C3 |\n|---------|----------|\n| VCC | 3V3 |\n| GND | GND |\n| RST | GPIO **0** |\n| CS | GPIO **1** |\n| DC | GPIO **10** |\n| SDA (MOSI) | GPIO **3** |\n| SCL (SCLK) | GPIO **4** |\n| BOOT (user) | GPIO **9** |\n\n## Build\n\n```bash\npio run -t upload\npio device monitor\n```\n\n- PlatformIO env: **`supermini`**\n- Serial: **115200** baud\n- USB CDC on boot enabled in `platformio.ini` for the Super Mini\n\n### Web-flashable release image\n\nSingle `.bin` for [esptool-js](https:\u002F\u002Fespressif.github.io\u002Fesptool-js\u002F) and similar tools (ESP32-C3, 4 MB, flash at **0x0**):\n\n```bash\nchmod +x scripts\u002Fmerge-firmware.sh   # once\n.\u002Fscripts\u002Fmerge-firmware.sh\n```\n\nWrites `release\u002Fplane-radar-merged.bin`. Skip rebuild if firmware is already built:\n\n```bash\n.\u002Fscripts\u002Fmerge-firmware.sh --no-build\n```\n\nOr via PlatformIO only (output: `.pio\u002Fbuild\u002Fsupermini\u002Ffirmware-merged.bin`):\n\n```bash\npio run -e supermini\npio run -t merge -e supermini\n```\n\nPut the board in download mode (hold **BOOT**, tap **RESET**), then flash with Chrome\u002FEdge over USB.\n\n### CI and releases (GitHub Actions)\n\n| Workflow | When | Output |\n|----------|------|--------|\n| [Build](.github\u002Fworkflows\u002Fbuild.yml) | Push \u002F PR to `main` | Artifact `plane-radar-supermini` (merged + split `.bin` files, ~90 days) |\n| [Release](.github\u002Fworkflows\u002Frelease.yml) | Git tag `v*` (e.g. `v1.0.0`) | GitHub Release asset `plane-radar-v1.0.0.bin` + `.sha256` |\n\nTo ship a version users can download:\n\n```bash\ngit tag v1.0.0\ngit push origin v1.0.0\n```\n\nThe 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).\n\n## Dependencies\n\n- [LovyanGFX](https:\u002F\u002Fgithub.com\u002Flovyan03\u002FLovyanGFX)\n- [WiFiManager](https:\u002F\u002Fgithub.com\u002Ftzapu\u002FWiFiManager)\n- [ArduinoJson](https:\u002F\u002Fgithub.com\u002Fbblanchon\u002FArduinoJson)\n","该项目是一款开源的ESP32固件，用于1.28英寸圆形显示屏上显示当前位置周围的实时ADS-B飞机信息，以声纳风格的雷达形式呈现。其核心功能包括通过WiFiManager进行初次设置、从adsb.fi获取实时飞行数据并在圆环状网格上展示。技术特点有支持ESP32-C3 Super Mini与GC9A01 1.28英寸圆形屏幕，以及具备自定义范围预设和单位选择（公里或英里）的能力。适合航空爱好者或需要监测周围空域的专业人士使用，在家庭、办公室或其他固定位置安装后，可以方便地跟踪附近的航班动态。",2,"2026-06-11 04:09:02","CREATED_QUERY"]