Features

Real-time transit data, smart display features, and flexible configuration for your LED matrix display.

Multi-Source Transit Data

Direct API Integration

  • Prague: Golemio API (official Prague public transit API)
  • Berlin: BVG API (Berlin public transport)
  • Configurable refresh intervals (10-300 seconds)

MQTT Integration

  • Connect to Home Assistant or any MQTT broker
  • Server-side aggregation and filtering
  • Dual ETA modes (timestamp or pre-calculated)
  • Custom JSON field mapping
→ MQTT Integration Guide

Multi-Stop Support

  • Query up to 12 transit stops simultaneously
  • 144 departure buffer
  • Automatic sorting by departure time
  • 1-second rate limiting to prevent API abuse

Smart Display Features

Real-Time ETA Updates

Local ETA calculation: Updates every 10 seconds from cached timestamps.
Reduces server load while keeping display fresh.
No additional API calls between data refreshes.

Configurable Display Modes

Four display layouts to match your needs:

  • Vanilla: Line + Destination + ETA (maximum destination space)
  • Platform: Adds platform/stop letter for multi-platform stations
  • Dual ETA: Shows next two departure times to see frequency
  • Dual ETA + Platform: Full information mode

Trade-off: More information = less space for destination names. The display compensates automatically.

Adaptive Font Rendering

Automatically switches to condensed font for long destination names, fitting up to 23 characters on screen.
Horizontal scrolling for destinations that still don't fit.
Smart thresholds that adjust based on display mode (platform, dual ETA).

Czech Language Support

Custom 8-bit ISO-8859-2 fonts with automatic UTF-8 conversion:

  • Czech: ž, š, č, ř, ň, ť, ď, ú, ů, á, é, í, ó, ý
  • German: ß, ä, ö, ü

Automatic headsign shortening for long Czech words (e.g., "Nádraží" → "Nádr.")

Configuration & Setup

WiFi Setup Portal

Automatic AP mode with captive portal when WiFi fails — no code editing needed. Just connect to the "SpojBoard-Setup" network and configure.

Web-Based Configuration

  • Tabbed interface for easy setup
  • City selector for quick API configuration
  • Per-tab save for incremental updates
  • Demo mode to preview custom departures before API setup

Persistent Settings

All configuration stored in ESP32 flash memory, survives reboots and power cycles.

Additional Features

Custom Line Colors

Configure colors for specific transit lines via web interface with exact matching or pattern matching (prefix/suffix/contains).

Direction Arrows

Map platforms or stop IDs to directional arrows (←/→) to indicate which way the stop is from your location.

AC Indicator

Shows asterisk (*) for air-conditioned vehicles (Prague transit only).

Trip Filtering

Configurable minimum departure time (default 3 minutes) to hide departures that are too soon to catch.

Weather Display

Optional weather info in status bar from Open-Meteo API (free, no API key required).

Rest Mode

Scheduled display power saving — configure time periods when the display turns off automatically to save energy.

Remote Debugging

Optional telnet logging (port 23) when debug mode is enabled — mirrors all logs over WiFi for troubleshooting.

Hardware Specifications

Resolution

128×32 pixels (two 64×32 HUB75 panels)

Colors

Full RGB support with configurable line colors

Refresh Rate

10-300 seconds (configurable per API source)

Brightness

Adjustable 0-255 (default 90 for low power)

Display Technology

  • HUB75 RGB LED matrix panels
  • 128×32 resolution (2× 64×32 panels)
  • 16-bit color depth
  • Brightness control 0-255

Fonts & Rendering

  • Custom 8-bit ISO-8859-2 fonts
  • Automatic UTF-8 conversion
  • Adaptive font switching for long names
  • Optional scrolling for long text

Power Consumption

  • Normal: ~0.3A @ 5V (1.5W)
  • Max brightness: ~0.7A @ 5V (3.5W)
  • Boot spikes: up to 1.6A
  • Recommended PSU: 5V 2-3A

Processor

  • ESP32-S3 dual-core @ 240MHz
  • 8MB flash, 2MB PSRAM minimum
  • WiFi 802.11 b/g/n (2.4GHz)
  • OTA firmware updates

Firmware & Updates

GitHub-Based OTA Updates

  • Check for new releases directly from web interface
  • User confirmation required before update
  • Safe rollback if update fails

Dual-Core Architecture

FreeRTOS multi-task design:

  • Core 0: WiFi interrupts and network stack
  • Core 1: Display rendering, API fetching, web server

All tasks run concurrently for responsive operation even during network activity.

Hardware Flexibility

Two supported variants:

  • MatrixPortal S3 (Adafruit) — plug & play
  • Generic ESP32-S3 N8R2 — manual wiring

Automatic pin detection — firmware adjusts based on hardware variant.

→ Wiring Guide

Ready to Build?

Get the parts list and start building your own SpojBoard.