A CircuitPython-powered flight tracking display for Adafruit Matrix Portal M4 that shows overhead aircraft information on a 32x32 RGB LED matrix.
- Live Aircraft Tracking: Displays real-time overhead aircraft information
- Scrolling Text: Aircraft descriptions scroll smoothly for full visibility
- Boot Animation: Aircraft bitmap flies across screen during startup
- Auto-Refresh: Cycles through 5 aircraft every 10 seconds, refreshes data every 50 seconds
- WiFi Status: Visual feedback for connection status and errors
- Compact Display: Optimized for 32x32 LED matrix with 3 lines of information:
- Line 1: Airline/Operator (Green)
- Line 2: Aircraft Type (Yellow, scrolls if long)
- Line 3: Flight Callsign + Route (Blue, scrolls if long)
- Adafruit Matrix Portal M4 - Main controller board
- 32x32 RGB LED Matrix Panel - 4mm Pitch - Display panel
- USB-C Cable - For programming and power
- Acrylic Diffusion Panel - Softens LED appearance
- Matrix Portal Case - Protective enclosure
This project requires a local flight data API endpoint that provides aircraft information in JSON format. The display fetches data from:
http://YOUR_LOCAL_IP/api/flight_data/sign.php
Expected JSON structure:
{
"aircraft": [
{
"flight": "EZY65FJ",
"desc": "AIRBUS A-319",
"ownOp": "easyJet",
"route": "LGW-EDI",
"alt_baro": 22625
}
]
}i currently supply planefinder and use the client web ui to the flight data with a mixture of two other apis to get operator and destinations.
- Connect the LED matrix to Matrix Portal M4 following Adafruit's guide
- Connect USB-C cable to Matrix Portal M4
- Download CircuitPython for Matrix Portal M4
- Flash CircuitPython to the board following Adafruit's instructions
-
Clone this repository:
git clone https://github.com/random-robbie/flightwall.git
-
Copy files to your Matrix Portal M4 (appears as CIRCUITPY drive):
cp flightwall/code.py /Volumes/CIRCUITPY/ cp -r flightwall/lib/* /Volumes/CIRCUITPY/lib/ -
Configure WiFi settings:
cp flightwall/settings.toml.example /Volumes/CIRCUITPY/settings.toml
Edit
settings.tomlwith your WiFi credentials:CIRCUITPY_WIFI_SSID = "your_network_name" CIRCUITPY_WIFI_PASSWORD = "your_network_password" timezone = "Europe/London"
Edit code.py line 146 to point to your flight data API:
response = network.fetch("http://YOUR_LOCAL_IP/api/flight_data/sign.php")- Power on the Matrix Portal M4
- Watch the boot animation as it connects to WiFi
- The display will show overhead aircraft information:
- Each aircraft displays for 10 seconds
- Cycles through up to 5 aircraft
- Refreshes data every 50 seconds
- Long text scrolls automatically
The device outputs detailed information to the serial console:
Connecting to WiFi and fetching flight data...
Found 5 aircraft (showing first 5)
--- Aircraft 1/5 ---
Operator: easyJet
Aircraft: AIRBUS A-319
Flight: EZY65FJ LGW-EDI
- "CONNECTING RETRY...": Check WiFi credentials in
settings.toml - "NETWORK ERROR": Verify flight data API is accessible
- "NO AIRCRAFT": API returned empty aircraft list
- Blank screen: Check power connections and CircuitPython installation
- Garbled text: Verify all required libraries are in
/libfolder
- "JSON ERROR": Check API response format matches expected structure
- "BAD RESPONSE": API endpoint may be down or unreachable
AIRCRAFT_DISPLAY_TIME = 10 # Seconds each aircraft is shown
SCROLL_SPEED = 0.5 # Seconds between scroll updates# Line colors (RGB hex)
text1.color = 0x00FF00 # Green (Operator)
text2.color = 0xFFFF00 # Yellow (Aircraft)
text3.color = 0x0000FF # Blue (Flight/Route)- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by smartbutnot/flightportal
- Built with Adafruit CircuitPython
- Hardware from The Pi Hut
For issues and questions:
- Open an issue
- Check Adafruit's learning guides
