DeskRadar

Real-time aircraft tracking on a 64×64 LED matrix display.

DeskRadar is a hardware and software system that polls live ADS-B data from a local dump1090 receiver and renders nearby aircraft tracks on a 64×64 RGB LED matrix. Altitude is mapped to color, historical trails fade over time, and the closest aircraft is highlighted and shown on a 16×2 LCD display. The entire system runs on a Raspberry Pi alongside a small CircuitPython device that drives the LED matrix.

Components

deskradar

Python application that polls ADS-B data, processes aircraft tracks through a multi-stage pipeline, and sends pixel draw commands to the matrix.

Language: Python 3.13
Runs on: Raspberry Pi (Linux)

deskradar-pi-services

Supporting services on the Pi: a FastAPI LCD display service, a Flask web configurator, and a boot-time mDNS resolver.

Language: Python
Managed by: systemd

deskradar-matrixportals3

CircuitPython firmware on an Adafruit MatrixPortal S3. Exposes an HTTP API and renders pixel commands to the physical 64×64 LED matrix.

Language: CircuitPython
Hardware: MatrixPortal S3 + HUB75 matrix

System Diagram

  ┌──────────────── Raspberry Pi ─────────────────────────────────────┐
  │                                                                    │
  │  ┌──────────────┐   ADS-B JSON   ┌──────────────────────────┐    │
  │  │  dump1090    │ ─────────────► │   deskradar (main app)   │    │
  │  │  :8080       │                │   polls every second     │    │
  │  └──────────────┘                └──────────┬───────────────┘    │
  │                                             │                     │
  │  ┌────────────────────┐          pixel draw │  HTTP POST /draw   │
  │  │  deskradar-        │          commands   │                     │
  │  │  configurator      │                     ▼                     │
  │  │  Flask :5000       │   ┌───────────────────────────────────┐  │
  │  └────────────────────┘   │   deskradar-matrixportals3        │  │
  │                           │   MatrixPortal S3 (ESP32-S3)      │  │
  │  ┌────────────────────┐   │   WiFi · HTTP :80                 │  │
  │  │  deskradar-lcd     │   │   Renders to 64×64 LED matrix     │  │
  │  │  FastAPI :8010     │   └───────────────────────────────────┘  │
  │  │  → I2C LCD display │                                           │
  │  └────────────────────┘                                           │
  │                                                                    │
  └────────────────────────────────────────────────────────────────────┘

  /etc/deskradar/config.json — shared configuration file
  deskradar-bootstrap — resolves deskradar-portal.local at boot,
                        writes MatrixPortal IP to config

Data Flow Summary

  1. dump1090 receives ADS-B transmissions from aircraft and exposes them as JSON at :8080/data/aircraft.json.
  2. The deskradar app polls that endpoint every second, filters aircraft by altitude and geographic bounds, then runs each track through a 10-stage processing pipeline (plot → deduplicate → fill gaps → smooth → color by altitude → fade trails).
  3. The resulting pixel list is sent via HTTP POST to the MatrixPortal S3, which renders it onto the 64×64 LED matrix.
  4. Simultaneously, the closest aircraft callsign is sent to the LCD service on the Pi, which displays it on a 16×2 character display.
  5. The web configurator allows changing all settings from a browser and restarts the main app when saved.

Quick Links