Tetris Display mit Handy-Steuerung – Unterbau

Folker hat im ersten Beitrag schon gezeigt, was man aus LED Matrizen und einem passenden LED Controller realisieren kann. Im folgenden Beitrag geht es um den Unterbau, von dem das Display letztendlich angesteuert wird.

Die Idee hinter dem Projekt war ein System, welches ein paar Spiele (Tetris primär) bietet und die LED-Matrix als Display verwenden kann. Bei der LED-Hardware und Ansteuerung war das ganze von Anfang an klar, bei der Ansteuerung des Ganzen haben wir uns dann für einen Raspberry Pi entschieden. Die Boards sind günstig und einfach zu beschaffen. Zudem gibt es eine riesige Community und guten Software Support. Das Ganze war ein Freizeitprojekt, daher gibt es an vielen Stellen sicherlich noch Ver­bes­se­rungs­po­ten­zi­al.

Hardware

Entwickelt und getestet wurde mit einem Raspberry Pi B. Die beiden USB Ports haben gerade gereicht um ein USB-WLAN Modul und den Diamex Matrix-Player anzuschließen.
Als WLAN Modul wurde TP-WN725N verwendet, welches auf dem rtl8188eu Chip basiert, und nach dem Start den RPi in ein Access Point mit dem Netz „GAMES“ verwandelt. Da hier ein sehr minimalistisches Linux System verwendet wird, reicht auch eine kleine SD Karte aus. Im Prinzip könnte alles auf eine 512 MB Karte passen.

Software

Als Betriebssystem kommt Linux zum Einsatz und zwar ein minimalistisches, zugeschnitten auf eigene Bedürfnisse. Buildroot passt für diesen Zweck sehr gut. Zusätzliche Anpassungen wurden dann an der Konfiguration gemacht, damit das WLAN aufgespannt wird und die „Game engine“ nach dem Boot automatisch gestartet wird. Dabei gibt es auch ein paar Hürden: der eingesetzte rtl8188eu Chip funktioniert nicht auf Anhieb mit dem Standard Linux hostapd Deamon im Access Point Modus, daher musste dafür eine angepasste Version von hostapd gebaut werden. Bei anderen Chips, entfällt dieser Schritt und hostapd.conf muss dann entsprechend angepasst werden.

Als Software für die Spiele und die Display Ansteuerung wurde ein C++ Programm geschrieben. Nach der Erfahrung mit der Poco Bibliothek bei der Portierung von hyperion  für OpenWRT habe ich mich gleich dafür entschieden. Die Spiele sollten nicht fest kodiert werden und nach Möglichkeit erweiterbar, daher fiel die Wahl auf LUA – eine Programmiersprache, die oft im Embedded Bereich verwendet wird, eine C Anbindung, keine komplexe Abhängigkeiten hat und je nach Konfiguration auch klein ist. Ich habe versucht, die Software modular umzusetzen, sodass künftige Erweiterungen möglich sind. Erweiterung der LED-Ansteuerung um ein neues Protokoll sollte mit wenig Aufwand möglich sein – in der Hinsicht habe ich mich ebenfalls an hyperion gehalten. Hart kodiert ist aktuell die Displaygröße von 16×32 Pixel, das muss auf jeden Fall flexibler gemacht werden.

control

Die Hintergrundfarbe wird grün, wenn eine Verbindung mit der Engine besteht.

Die Spiele-Steuerung ist aktuell nach der Anmeldung im WLAN über die lokale Adresse des Systems (192.168.0.1) im Browser möglich. Ein auf dem RPi laufender HTTP-Server stellt eine kleine Seite zur Verfügung, die über WebSockets mit der Spiele-Engine kommuniziert und die Button-Klicks an das LUA Spiel weiterleitet. Auf diese Weise kann man die Spiele mit eigenem Handy als Gamepad ausprobieren, ohne Zugang zum Aufbau zu haben und ohne zusätzliche Software installieren zu müssen, wie es bei Bluetooth z.B. der Fall wäre. Aktuell bin ich noch an der Unterstützung der USB-Gamepads dran.

Kompilieren

Die ganzen Projektdateien habe ich auf GitHub abgelegt: led-matrix-games

Zum Kompilieren wurde eine Debian Jessie x64 Installation verwendet. GCC Compiler und andere build tools wie git müssen evtl. über apt-get nachinstalliert werden.

git clone https://github.com/Gamadril/led-matrix-games.git
cd led-matrix-games
./build.sh

Der Buildprozess dauert sehr lange und generiert dabei einen Cross-Compiler, den Linux Kernel und das Root Dateisystem.

sudo ./create-image.sh

generiert dann einen SD Karten Image, welches mit den üblichen Tools auf die SD Karte installiert werden kann. Unter Linux wäre es dd if=build/sdcard.img of=/dev/sdX . sdX muss durch den richtigen Gerätenamen des SD Kartenlesers ersetzt werden. Das ist sehr wichtig, da man ansonsten auch die eigene Festplatte oder andere Datenträger wie z.B. USB Sticks überschreiben kann.

Ein Gedanke zu „Tetris Display mit Handy-Steuerung – Unterbau

  1. Hallo

    Würde mir gerne so ein Tetris bauen kannst Du mir mal erklären wie ich die Software für das Tetris anwenden muss das es funktioniert? Kenn mich da nicht aus!!

Schreibe einen Kommentar