Live Sports Scoreboard
Real-time LED scoreboard for displaying live sports scores

I built a full LED scoreboard system that shows live professional sports scores across seven leagues. It has a mobile interface to change settings and the displayed games as well. Everything is built from the ground up from the hardware to the backend system and graphical display.
Components
Hardware
The scoreboard is centered around an ESP32-S3 board mounted on a custom PCB designed in KiCad to pair with the 64x32 RGB LED matrix, SPI flash chip for logos, and the power components.
Custom C++ Firmware
The ESP32 runs custom C++ firmware that controls the LED panel, memory management from the SPI chip, and communication with the custom REST APIs.
Firmware Features
- Live score retrieval from custom REST API endpoints using a unique board identity and per-device authentication key
- Dynamic rendering of team abbreviations, records, rankings, scores, start times, periods, and game clocks
- Custom variable-width bitmap font engine with multiple font sizes and left, center, and right text alignment
- Remotely configurable display brightness and score refresh interval without reflashing the device
- Automatic Wi-Fi reconnection with retry protocols
- Periodic device heartbeat reporting with board ID and firmware version for remote uptime monitoring
- Persistent device provisioning through ESP32 NVS, allowing the same generic firmware image to support uniquely authenticated scoreboards
Python-powered backend
A Raspberry Pi running a Python scraper consistenly pulls and parses live game scores from external APIs and pushes the live scores to a Cloudflare D1 database. The scores are updated every 15 seconds while there are live games and scales down to 10 minutes when there are no live games to keep traffic low.
Mobile Interface
React Native mobile application allows the user to change their scoreboard's settings such as the games being rotated on the display or the brightness and refresh time.
Pictures
