# matixyo/esp32-plane-radar architecture

> Architecture diagram of the GitHub repository matixyo/esp32-plane-radar, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/matixyo/esp32-plane-radar
- Repository: https://github.com/matixyo/esp32-plane-radar

## Overview

Plane Radar is ESP32 firmware whose principal workflow is to configure or reconnect Wi-Fi, load a saved radar center and range, periodically fetch nearby ADS-B traffic, and render it on a round display. The main loop coordinates these stages; the radar view combines aircraft symbols, scale/grid, and optional runway overlays. The README documents portal controls, persistent preferences, reconnect behavior, and runway data capabilities. Several subsystem details are supported by the README and tree but were not sampled, so their internal wiring is shown only where documented.

Main entry points: [`src/main.cpp`](https://github.com/matixyo/esp32-plane-radar/blob/main/src/main.cpp) (Runtime loop), [`src/ui/radar_display.cpp`](https://github.com/matixyo/esp32-plane-radar/blob/main/src/ui/radar_display.cpp) (Radar composition), [`src/services/wifi_setup.cpp`](https://github.com/matixyo/esp32-plane-radar/blob/main/src/services/wifi_setup.cpp) (Wi-Fi portal), [`src/ui/runway_overlay.cpp`](https://github.com/matixyo/esp32-plane-radar/blob/main/src/ui/runway_overlay.cpp) (Runway overlay)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_setup["Setup and connectivity"]
  node_main["Runtime loop<br/>[main.cpp]"]
  node_wifi["Wi-Fi portal<br/>[wifi_setup.cpp]"]
  node_location["Radar location<br/>[radar_location.cpp]"]
  node_range["Range settings<br/>[radar_range.cpp]"]
  node_preferences[("Persistent settings<br/>[wifi_setup.cpp]")]
end

subgraph group_traffic["Traffic data"]
  node_adsb["ADS-B client<br/>[adsb_client.cpp]"]
  node_aircraft["Aircraft state<br/>[adsb_client.cpp]"]
end

subgraph group_radar["Radar presentation"]
  node_radar_display["Radar composition<br/>[radar_display.cpp]"]
  node_grid["Grid and theme<br/>[radar_theme.h]"]
  node_runway["Runway overlay<br/>[runway_overlay.cpp]"]
  node_airport_data["Airport runway data"]
end

subgraph group_device["Device support"]
  node_display["Display driver<br/>[display.cpp]"]
  node_fonts["Font support<br/>[display_font.cpp]"]
  node_status["Status screens<br/>[status_screens.cpp]"]
end

node_user(("Device user"))
node_network(("Wi-Fi network"))
node_adsb_api(("adsb.fi API"))
node_screen(("Round display"))

node_user -->|"configures"| node_wifi
node_user -->|"presses BOOT"| node_main
node_main -->|"connects / reconnects"| node_wifi
node_wifi -->|"joins"| node_network
node_wifi -->|"persists settings"| node_preferences
node_wifi -->|"saves coordinates"| node_location
node_wifi -->|"resets units"| node_range
node_main -->|"loads center"| node_location
node_main -->|"initializes / cycles"| node_range
node_main -->|"requests updates"| node_adsb
node_main -->|"gets fetch radius"| node_range
node_main -->|"gets query center"| node_location
node_adsb -->|"fetches JSON"| node_adsb_api
node_adsb -->|"parses aircraft"| node_aircraft
node_main -->|"draws / refreshes"| node_radar_display
node_radar_display -->|"reads aircraft"| node_aircraft
node_radar_display -->|"reads center"| node_location
node_radar_display -->|"reads scale"| node_range
node_radar_display -->|"uses layout"| node_grid
node_radar_display -->|"draws overlay"| node_runway
node_runway -->|"reads runway data"| node_airport_data
node_runway -->|"reads center"| node_location
node_runway -->|"reads radius"| node_range
node_main -->|"initializes"| node_display
node_main -->|"shows setup state"| node_status
node_wifi -->|"shows portal state"| node_status
node_radar_display -->|"renders frame"| node_display
node_radar_display -->|"sets text styles"| node_fonts
node_runway -->|"sets label fonts"| node_fonts
node_display -->|"drives"| node_screen
node_status -->|"renders"| node_screen

click node_main "https://github.com/matixyo/esp32-plane-radar/blob/main/src/main.cpp"
click node_wifi "https://github.com/matixyo/esp32-plane-radar/blob/main/src/services/wifi_setup.cpp"
click node_location "https://github.com/matixyo/esp32-plane-radar/blob/main/src/services/radar_location.cpp"
click node_range "https://github.com/matixyo/esp32-plane-radar/blob/main/src/ui/radar_range.cpp"
click node_preferences "https://github.com/matixyo/esp32-plane-radar/blob/main/src/services/wifi_setup.cpp"
click node_adsb "https://github.com/matixyo/esp32-plane-radar/blob/main/src/services/adsb_client.cpp"
click node_aircraft "https://github.com/matixyo/esp32-plane-radar/blob/main/src/services/adsb_client.cpp"
click node_radar_display "https://github.com/matixyo/esp32-plane-radar/blob/main/src/ui/radar_display.cpp"
click node_grid "https://github.com/matixyo/esp32-plane-radar/blob/main/include/ui/radar_theme.h"
click node_runway "https://github.com/matixyo/esp32-plane-radar/blob/main/src/ui/runway_overlay.cpp"
click node_airport_data "https://github.com/matixyo/esp32-plane-radar/blob/main/src/data/large_airports_data.cpp"
click node_display "https://github.com/matixyo/esp32-plane-radar/blob/main/src/hardware/display.cpp"
click node_fonts "https://github.com/matixyo/esp32-plane-radar/blob/main/src/hardware/display_font.cpp"
click node_status "https://github.com/matixyo/esp32-plane-radar/blob/main/src/ui/status_screens.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_wifi,node_location,node_range,node_preferences,node_user toneBlue
class node_adsb,node_aircraft toneAmber
class node_radar_display,node_grid,node_runway,node_airport_data,node_adsb_api toneMint
class node_display,node_fonts,node_status toneRose
class node_network,node_screen toneIndigo
```

## Components

### Setup and connectivity

- [Runtime loop](https://github.com/matixyo/esp32-plane-radar/blob/main/src/main.cpp): `src/main.cpp`
- [Wi-Fi portal](https://github.com/matixyo/esp32-plane-radar/blob/main/src/services/wifi_setup.cpp): `src/services/wifi_setup.cpp`
- [Radar location](https://github.com/matixyo/esp32-plane-radar/blob/main/src/services/radar_location.cpp): `src/services/radar_location.cpp`
- [Range settings](https://github.com/matixyo/esp32-plane-radar/blob/main/src/ui/radar_range.cpp): `src/ui/radar_range.cpp`
- [Persistent settings](https://github.com/matixyo/esp32-plane-radar/blob/main/src/services/wifi_setup.cpp): `src/services/wifi_setup.cpp`

### Traffic data

- [ADS-B client](https://github.com/matixyo/esp32-plane-radar/blob/main/src/services/adsb_client.cpp): `src/services/adsb_client.cpp`
- [Aircraft state](https://github.com/matixyo/esp32-plane-radar/blob/main/src/services/adsb_client.cpp): `src/services/adsb_client.cpp`

### Radar presentation

- [Radar composition](https://github.com/matixyo/esp32-plane-radar/blob/main/src/ui/radar_display.cpp): `src/ui/radar_display.cpp`
- [Grid and theme](https://github.com/matixyo/esp32-plane-radar/blob/main/include/ui/radar_theme.h): `include/ui/radar_theme.h`
- [Runway overlay](https://github.com/matixyo/esp32-plane-radar/blob/main/src/ui/runway_overlay.cpp): `src/ui/runway_overlay.cpp`
- [Airport runway data](https://github.com/matixyo/esp32-plane-radar/blob/main/src/data/large_airports_data.cpp): `src/data/large_airports_data.cpp`

### Device support

- [Display driver](https://github.com/matixyo/esp32-plane-radar/blob/main/src/hardware/display.cpp): `src/hardware/display.cpp`
- [Font support](https://github.com/matixyo/esp32-plane-radar/blob/main/src/hardware/display_font.cpp): `src/hardware/display_font.cpp`
- [Status screens](https://github.com/matixyo/esp32-plane-radar/blob/main/src/ui/status_screens.cpp): `src/ui/status_screens.cpp`

### Other components

- **Device user**
- **Wi-Fi network**
- **adsb.fi API**
- **Round display**

## Connections

- Device user → Wi-Fi portal: configures
- Device user → Runtime loop: presses BOOT
- Runtime loop → Wi-Fi portal: connects / reconnects
- Wi-Fi portal → Wi-Fi network: joins
- Wi-Fi portal → Persistent settings: persists settings
- Wi-Fi portal → Radar location: saves coordinates
- Wi-Fi portal → Range settings: resets units
- Runtime loop → Radar location: loads center
- Runtime loop → Range settings: initializes / cycles
- Runtime loop → ADS-B client: requests updates
- Runtime loop → Range settings: gets fetch radius
- Runtime loop → Radar location: gets query center
- ADS-B client → adsb.fi API: fetches JSON
- ADS-B client → Aircraft state: parses aircraft
- Runtime loop → Radar composition: draws / refreshes
- Radar composition → Aircraft state: reads aircraft
- Radar composition → Radar location: reads center
- Radar composition → Range settings: reads scale
- Radar composition → Grid and theme: uses layout
- Radar composition → Runway overlay: draws overlay
- Runway overlay → Airport runway data: reads runway data
- Runway overlay → Radar location: reads center
- Runway overlay → Range settings: reads radius
- Runtime loop → Display driver: initializes
- Runtime loop → Status screens: shows setup state
- Wi-Fi portal → Status screens: shows portal state
- Radar composition → Display driver: renders frame
- Radar composition → Font support: sets text styles
- Runway overlay → Font support: sets label fonts
- Display driver → Round display: drives
- Status screens → Round display: renders
