An open-source LED display system for the MBTA that runs on Raspberry Pi Zero 2W with WS2812B LEDs. Features real-time transit data visualization, web control interface, and geographically accurate station mapping. PCBs for the Blue, Orange, and Green Lines are in progress!
Prerequisites: Raspberry Pi Zero 2W with Raspberry Pi OS, a WS2812B LED strip or custom PCB, WiFi configured, SSH enabled (RPI Connect recommended), and an MBTA API key. For assembly instructions, see the Hardware Assembly Guide.
Run the following commands to install and initialize the display.
sudo apt update && sudo apt install -y git python3-pip
cd ~
git clone --filter=blob:none --sparse https://github.com/tomunderwood99/CharlieBoard.git
cd mbta_led_controller
git sparse-checkout set --no-cone '/*' '!hardware'
chmod +x deployment/quick_start/setup_mbta_controller.sh
sudo ./deployment/quick_start/setup_mbta_controller.shThe setup script will prompt for your MBTA API key and various setting inputs. After completion, access the web interface at http://your-hostname.local:8000 on your local network.
Optional enhancement: Set up a reverse proxy to access the web interface at http://hostname.local without the port number. See the nginx reverse proxy setup guide.
Note: The sparse-checkout excludes the hardware/ directory (PCB design files) to speed up cloning. This setting persists across future git pull operations. If you need the hardware files, run: git sparse-checkout disable
- Real-time Transit Data: Live vehicle positions, occupancy, and speed data
- Geographically Accurate: LED display system with geographic station mapping
- Web Control Interface: Remote control from any device on your network
- Customizable Display: Adjustable brightness, colors, and display hours
- Reliable Operation: Automatic recovery, health monitoring, and maintenance
| Component | Notes |
|---|---|
| Raspberry Pi Zero 2W | Main controller |
| WS2812B LEDs | Custom PCB (~$120 for 5) or LED strips (~$20) |
| 5V 4A Power Supply | Powers Pi and LEDs |
| MicroSD Card (16GB+) | For OS and software |
| Display Enclosure | Picture frame or custom case |
Total Cost: $50–180 depending on LED choice
Complete PCB design files (Gerber + KiCad) are available in hardware/PCB Production/. See the Bill of Materials for detailed pricing and sourcing.
| Guide | Description |
|---|---|
| Quick Start Guide | Step-by-step setup walkthrough |
| Complete Setup Guide | Detailed manual configuration |
| Bill of Materials | Hardware pricing and sourcing |
| Hardware Assembly | PCB assembly instructions |
| Operations & Troubleshooting | Maintenance and problem solving |
| Transit System Adaptation | Adapt for other transit systems |
| Map Making with QGIS | Create custom transit maps (example project) |
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Test on Raspberry Pi Zero 2W hardware
- Commit your changes (
git commit -m 'Add amazing feature') - Push and open a Pull Request
Follow existing code style, update documentation for new features, and add comments for complex logic.
MIT License – See LICENSE for details.
Copyright © 2025 Thomas Underwood
Disclaimers & Attributions
This project was developed with the assistance of AI coding tools. All code has been reviewed, tested, and validated on actual hardware.
This project uses data from:
- MBTA and MassDOT – Transit data via MBTA V3 API
- MassGIS – Geographic and mapping data
All data is provided "as is" without warranties. This project is not affiliated with, endorsed by, or sponsored by MBTA, MassDOT, MassGIS, or the Commonwealth of Massachusetts.
- Check the Operations and Troubleshooting Guide
- Review logs:
sudo journalctl -u mbta_display -n 100 - Open an issue on GitHub with your Pi model, OS version, and error details
- MBTA V3 API Documentation · Raspberry Pi GPIO Pinout · Adafruit NeoPixel Guide
