Zum Inhalt

Strassenbahnanzeige

Die Anzeige kann über ein textbasiertes Protokol - kompatibel zu Pixelflut, aber um zahlreiche zusätzliche Befehle erweitert - angesteuert werden. Das Display besteht aus einer 120×8 Pixel großen Matrix grüner LEDs. Nach dem Einschalten zeigt die Anzeige ihre aktuelle IP-Adresse an. Über eine TCP-Verbindung auf Port 23 können dann Befehle gesendet werden.

Unterstützte Befehle

Befehl Beschreibung
HELP Zeigt eine Übersicht aller verfügbaren Befehle
SIZE Gibt die Größe der Anzeigefläche in Pixeln zurück (SIZE 120 8)
PX <x> <y> <rrggbb> Setzt einen einzelnen Pixel auf eine bestimmte Farbe (weiß = ffffff, alles andere = aus)
PX <x> <y> Gibt die aktuelle Farbe eines Pixels zurück
TXT <text> Zeigt Text auf der Anzeige an
WHf Aktiviert das Wagen hält-Symbol
WH0 Deaktiviert das Wagen hält-Symbol
PB<x><y><v> Setzt den Helligkeitswert eines Pixels (binär, keine Zeilenumbrüche nötig)
SP Aktualisiert das gesamte Bild über einen Bitstream
ROT<x><y> Dreht den Bildpuffer um eine bestimmte Anzahl an Pixeln (experimentell)
LUA <script> Lädt und startet ein Lua-Skript (bis zu 1024 Byte)
SOL Entfernt das aktuell aktive Lua-Skript

Bis zu 30 gleichzeitige Verbindungen werden unterstützt, wobei pro Frame maximal 130 Byte pro Verbindung verarbeitet werden.

LUA-Skripte

Ein besonderes Feature der Software ist die Unterstützung für Lua-Skripte, die direkt auf dem ESP32 ausgeführt werden. Diese Skripte werden vor jedem Frame aufgerufen und können die Anzeige dynamisch verändern oder Animationen erzeugen. Der globale Zustand wird dabei zwischen Frames beibehalten.

Verfügbare Lua-Funktionen:

  • setPixel(x, y, brightness, transparency) – Setzt die Helligkeit eines Pixels (0–255)
  • getPixel(x, y) – Gibt die Helligkeit eines Pixels zurück
  • setWagenHalt(bool) – Aktiviert oder deaktiviert das „Wagen hält“-Signal
  • getWagenHalt() – Gibt den Status des „Wagen hält“-Signals zurück

Beispiel: Scrollender Pixel

LUA
if (x == nil) then
    x = 0
end
local prevX = x
x = (x + 1) % 120

setPixel(prevX, 2, 0, 255)
setPixel(x, 2, 255, 255)
AUL

Dieses Skript lässt einen leuchtenden Punkt in Zeile 2 von links nach rechts wandern.

Hardware

Die ursprüngliche Steuerungseinheit der Anzeige wurde durch einen ESP32 ersetzt, der über drei vorhandene LED-Platinen mit dem Display verbunden ist. Die Steuerung erfolgt über selbst entwickelte Firmware, die das Pixelflut-Protokoll implementiert.

Mehr Information zum Projekt ist auf GitHub verfügbar.