Skip to main content
An ESP32 asks the network what is flying nearest to you every 30 seconds and draws it on a small e-paper: callsign, route, type, registration, altitude, speed and distance. Between changes the panel holds the picture with no power at all. One evening and eight wires; no soldering if your board comes with its pins fitted.
Photo to come: the finished display on a windowsill.

Parts

The code does not care which e-paper brand you pick as long as the driver chip is the SSD1680; the one line that names it is marked in the sketch.

Wiring

Some newer Waveshare modules have a ninth pin, PWR: connect it to 3V3 as well. Power the panel from 3V3, never from 5V.
Photo to come: the wiring, close up.

Software

  1. Install the Arduino IDE.
  2. In Boards Manager, install esp32 by Espressif Systems.
  3. In Library Manager, install GxEPD2 by Jean-Marc Zingg (it pulls in Adafruit GFX Library) and ArduinoJson by Benoit Blanchon, version 7.
  4. Choose the board ESP32 Dev Module and your USB port.
  5. Paste the sketch below, fill in the four settings at the top, and upload.
The first picture says “Connecting”. Within a minute it shows the nearest aircraft, or “A quiet sky” when nothing is airborne within your radius. It redraws only when something changes.

The sketch

We compiled it against esp32 3.3.10, GxEPD2 1.6.9 and ArduinoJson 7.4.2. It uses 90 percent of the board’s default program space, which is mostly the secure connection.

How it works

  • /v2/point/{lat}/{lon}/{radius} returns every aircraft within the radius, nearest first. The sketch keeps the first one that is not on the ground. A filter throws away the fields it does not draw, so the answer fits comfortably in memory.
  • /v1/flights/{callsign} gives the route the network has observed for that callsign, or the leg it flies most often. The sketch asks once per new callsign, not on every poll.
  • A 429 carries Retry-After, and the sketch waits that long. A 503 means the live picture is briefly stale; the panel keeps what it shows and the next round tries again.
  • The e-paper redraws only when the flight, its route or its altitude (to the nearest thousand feet) changes.
The footer credits the data, as the licence asks: Attribution.

If something is off

Take it further

  • A bigger panel: GxEPD2 drives most SPI e-paper sizes; change the class and the coordinates.
  • Deep sleep between polls with esp_deep_sleep() and a battery.
  • Show the airline’s name from /v1/airlines/{icao}, the first three letters of the callsign, cached for a day.
Made one? Share your build.