Die Poxelbox ist ein Modulares 36-Boxen LED-System, welches über das WS2812B-Protokoll angesteuert und mittels eines Raspberry-Pi kontrolliert wird.
Mithilfe von eigenen Kontrollern kann man auf dieser LedWand verschiedene Retro-Spiele spielen.
Hier ist der einfachheitshalber eine listung aller Repositorys, welche aktuell zur Proxelbox gehören:
Name | Beschreibung |
---|---|
Dokumentation | Dieses Repository mit der Hauptdokumentation über das gesamte Projekt |
Controller-Adapter | Software für den Controller-Adapter |
Haupt-Software | Software, welche die Spiele/Animation etc. bereitstellt und sozusagen das Hirn ist. |
Java-Config-Tool | Java-application zur Konfiguration der Poxelbox |
Web-Config-Tool | Webapp zur Konfiguration der Poxelbox |
Der Poxelbox-Aufbau sieht so aus:
Im Normalfall ist das Poxelsystem 1
geschlossen zusammen angebracht und regengeschützt.
Mit Poxelboxen sind die einzellnen Boxen gemeint, welche zusammen als Poxelbox[] (2)
bzw. PoxelboxArray (2)
das "Display" darstellen.
Mehr zum Aufbau des Poxelbox[] (2)
findet man hier
Die Verkabelung der Boxen erfolgt mittels 3-Pin DMX-Kabel, welches auch genutzt wird um die Verbindung (4)
zum LED-Wand-Controller (3)
herzustellen. Über dieses DMX-Kabel läuft das WS2812B-Protokoll
Der LED-Wand-Controller (3)
besteht aus einem Raspberry-PI und ist das Hirn des Systems.
Er wird über die GPIO-Pins des Raspberry-Pi's an den Poxelbox[] (2)
angeschlossen und über das WS2812B-Protokoll gesteuert.
Hier wird die Hauptsoftware ausgeführt, welche den Poxelbox[]
ansteuert, spiele Bereitstellt und den Schnittstelle zur Konfiguration der Poxelbox.
In der Software-Section unterhalb wird diese genauer beschrieben.
Damit die Spieler über einen Controller auf die Poxelbox zugreifen können, wird der Controller-Adapter (5)
gebracht.
Der Controller-Adapter (5)
ist ein Arduino-Nano-Board, welcher über ein USB-Kabel am Debug-Port an einen der USB-Ports des LED-Wand-Controller (3)
gesteckt wird.
Wichtig: Damit der Controller-Adapter funktioniert, muss er das einzige USB-Gerät am LED-Wand-Controller (3)
sein, da er sonst nicht Identifiziert werden kann
Am Controller-Adapter (5)
ist über Jumper-Kabel außerdem noch mit einem RJ45-Stecker verbunden, welcher zum Game-Controller (7)
über ein LAN-Kabel (8)
verbunden wird. Dies wird nur genutzt um die Knöpfe des Game-Controllers (7)
abzufragen.
Der Erfahrung nach sollte das Kabel maximal 3 Meter länge haben, da längere Kabel zu größe Verluste in der Übertragung haben
Ein modifierter NES-Controller, welcher über ein Ethernet-Kabel (8)
(Aber nicht dem Ethernet-Protokoll) an den Controller-Adapter (5)
angeschlossen ist.
Grundlegend besteht die Poxelbox aus folgenden Software-Systemen, welche wie folgt miteinander Kommunizieren:
Für die Software-Produkte liegt im jeweiligen Git-Repo selber eine Anteilung zum Aufsetzen der Debug/Develop Umgebung, daher wird dies hier vernachlässigt!
Hier findet man das Github-Repo der Hauptsoftware.
Die Hauptsoftware ist in Python3 geschrieben und für folgendes zuständig:
Über die GPIO-Pins des Raspberry-Pi's wird über das WS2812B-Protokoll das "Display" angesteuert.
Folgende Pins werden hierbei genutzt:
- 5V: Logic-Level-Spannung
- GND: Ground
- D12: Datenübertragung
Über den Controller-Adapter, welcher mittels USB am Raspberry-Pi angeschlossen ist (Mehr dazu im Übersicht's-Teil), werden Befehle von den Controllern/Spielen angenommen
Die Hauptsoftware (3)
stellt verschiedene Spiele und Animationen bereit, welche über die Poxelbox (ab)gespielt werden können.
Zur externe Konfiguration ohne Bildschirm, Tastatur, etc. an den Pi anschließen zu müssen, stellt die Hauptsoftware (3)
auch eine Http-Config-Schnittstelle zur Verfügung, welche über ein Konfigurationstool angesprochen werden kann.
Aktuell gibt es verschiedene Konfigtools, welche mit dieser Http-Schnittstelle kommunizieren können.
Alle diese Tools werden auch hier im Software-teil separat erklärt.
Eine Liste der Konfigurationseinstellungen mit Erklärungen findet man in der unteren Sektion Konfiguration der Haupt-Software
.
Für mehr Infos hierzu bitte in die eigene Software-Sektion für das Web-Config-Tool schauen
Hier findet man das Github-Repo des Controller-Adapters
Über einen Rj45-Stecke (Nicht über Ethernet nur über diesen Stecker) ist der Controller-Adapter (7)
mit dem Game-Controller (8)
verbunden.
Und über USB mit der Haupt-Software (3)
des LED-Wand-Controller (2)
.
Wichtig: Damit der Controller-Adapter funktioniert, muss er das einzige USB-Gerät am LED-Wand-Controller (2)
sein, da er sonst nicht Identifiziert werden kann
Im NES-Game-Controller (8)
ist ein Shift-register verbaut, welches alle Knöpfe des Controllers einliest. Dieses wird über den RJ45-Stecke direkt an den Controller-Adapter gemapped, welcher es einließt, interpretiert und als Spielersignal an die Haupt-Software (3)
weitergibt.
Hier findet mand as Github-Repo des Web-Config-Tool's
Das Web-Config-Tool (4)
ist zwar eine separate Software und wird nicht als Teil der Haupt-Software (3)
gesehen. Jedoch wird ein Build von dieser immer über den Haupt-Software-Webserver, welcher auch die Config-Schnittstelle stellt, gehostet. Sprich sobald man Netzwerkzugriff zur Haupt-Software (3)
hat, wird man automatisch bei einem Webseitenaufruf (Http-Request) auf das Web-Config-Tool weitergeleitet.
Für Informationen zu Konfigurationsmöglichkeiten bitte in die Sektion Konfigurationen
schauen
Auch wenn das Web-Config-Tool nicht von der Haupt-Software (3)
abgerufen und separat gehostet wird, kann es auf die Config-Schnittstelle der Haupt-Software (3)
zugreifen.
Dazu muss nur der Advanced Mode
aktiviert werden und in der sich öffnenden Sektion der Endpunkt auf den Server mit der Haupt-Software (3)
geändert werden.
Hier findet mand as Github-Repo des Java-Config-Tool's
Im gegensatz zum Web-Config-Tool muss das Javatool selber installiert haben und die Schnittstelle der Haupt-Software (3)
angeben. Nach der Verbindung kann man dann die Einstellungen bearbeiten.
Wie oberhalb bereits beschrieben kann man über verschiedene Tools die Haupt-Software konfigurieren.
Nach jedem Speichern der Einstellungen im System, startet die Haupt-Software neu um alle Einstellungen korrekt zu übernehmen.
Heißt nach jedem Speichern muss man sich bei den Config-Tools neu mit dem System verbinden.
Im folgenden wird jede Einstellung erläutert.
Die Haupt-Software kann in zwei verschiedenen Modi laufen. In der Entwicklungsumgebung (Dev-Environment) wird das Hauptprogramm, die Spiele und Animationen nicht über die Poxelbox, sprich andere Hardware, angezeigt. Sondern über Py-Game als Fenster simuliert. Weiter erfolgen auch die Eingaben der Spieler nicht über einen externen Controller, sondern über Pygame.
Sprich ist diese Einstellung aktiviert, wird keine externe Hardware der Poxelbox gebraucht um die Software zu entwickeln.
Im Verbund mit der obrigen Einstellung wird hier festgelegt wie viele PyGame-Pixel einen Poxelbox-Pixel darstellen.
In der Produktionsumgebung, also mit der Poxelbox-hardware, kommuniziert der Controller-Adapter
mit der hier angegebenen BAUD-Rate.
Diese Eigenschaft heißt aufgrund von früheren Planungen Esp-Baud und nicht Controller-Adapter-Baud (Legacy)
Zum testen der Poxelbox und zur Fehlersuche gibt es diesen Modus. Er startet nicht das Hauptprogram mit den Spielen und Animationen, sondern läuft nur eine Animation durch, welche sich von unten nach oben aufbaut.
Dies wird genutzt um zu schauen, ob die Verkabelung der Box korrekt erfolgt ist.
Im Verbunde mit der obrigen Einstellung wird hier festgelegt welches der beiden Ansteuerungssysteme genutzt werden soll.
Der Nachteil des alten Systems ist, dass man die Poxelbox-Reihen immer abwechseln Umgedreht und Nicht-Umgedreht aufbauen musste. Dies kann beim neuen Vernachlässigt werden.
Diese beiden Einstellungen geben an wie viele von den Poxelboxen, nicht Pixeln, Boxen aufgebaut sind. X ist die Breite, Y ist die Höhe.
Für alle Spiele und Animationen kann man einstellen ob diese aktiviert sind oder nicht. Nicht aktivierte Spiele/Animationen werden im Hauptmenu der Software nicht angezeigt und können somit nicht geladen werden.
Hilfreich, wenn man die Poxelbox in einer größe aufbaut, welche von einem der Spiele/Animationen nicht unterstützt wird.