Matrix anschließen und programmieren

Mit der 8 x 8 LED-Matrix und dem max7219-Chip können wir insgesamt 64 LEDs ansteuern. Dank dem max7219-Chip auf der Matrix müssen wir dabei nicht jede LED einzeln ansprechen, sondern können uns nur mit diesem Chip unterhalten. Dieser übernimmt dann für uns das Ansprechen der einzelnen LEDs. Für die Kommunikation von Chip zum Raspberry Pi brauchen wir noch SPI. Wenn du das noch nicht aktiviert hast, solltest du das jetzt machen!

SPI für das Display
Für das Display muss SPI in der raspi-config aktiviert sein, wenn du das nicht getan hast, kannst du das schnell erledigen.

$ sudo raspi-config

In dem Menü wählen wir zuerst  Nr. 3 Interface Options aus. Jetzt wählst du Punkt P4 SPI aus. Auf die Frage, ob wir das SPI-Interface aktivieren wollen, antworten wir mit Yes/Ja und bestätigen das mit OK.

Mehr Infos gibt es auch auf cw42.de/spi.

Jetzt müssen wir noch die benötigten Bibliotheken dafür installieren. Das machen wir mit den folgenden Terminalbefehlen:

$ sudo apt install build-essential python3-dev python3-pip libfreetype6-dev libjpeg-dev libopenjp2-7 libtiff5

$ pip3 install --upgrade --ignore-installed pip setuptools

$ pip3 install --upgrade luma.core==2.4.0 luma.led_matrix==1.7.0 spidev

$ cd

Die Bibliothek ist installiert. Da diese aber sehr verschiedene Displays anbindet und anbietet, haben wir euch eine kleine Hilfe-Datei mit reingepackt. Diese muss immer im selben Verzeichnis sein wie eure Datei mit dem Programm. Mit dem cp (copy)-Befehl können wir die einfach kopieren.

$ cp matrix_max7219/examples/MyMax7219.py ./

Jetzt müssen wir uns nur noch darum kümmern, das Display an den Raspberry Pi anzuschließen.

Anschlüsse Raspberry PiAnschlüsse LED Matrix
5V1 – VCC
GND2 – GND
GPIO 10 (MOSI)3 – DIN
GPIO 8 (SPI CE0)4 – CS
GPIO 11 (SPI CLK)5 – CLK

Zum Testen kannst du das Beispiel-Programm ausführen, das bei der Bibliothek dabei ist.

$ sudo python3 maxtrix_max7219/examples/beispiel.py

Wenn du alles richtig angeschlossen hast, solltest du jetzt bei dir auf der Matrix einen sich bewegenden Text sehen. In diesem Beispiel werden die Funktionen gezeigt, welche die Matrix hat. Mit Str/Ctrl + c kannst du das Programm beenden. Doch natürlich wollen wir jetzt auch zu unserem ersten eigenen Programm kommen.

from MyMax7219 import MyMatrix
import time 

matrix = MyMatrix()

matrix.showMessage("MOIN MOIN")
matrix.letter("1")
time.sleep(5)

Wenn du das Programm ausführst, sollte bei dir zuerst der Text „Moin Moin“ und dann die „1“ ausgegeben werden. Doch erstmal das Programm erklärt: In Zeile 1 und 2 importieren wir die benötigten Bibliotheken. Damit die Benennung ein wenig schöner ist, importieren wir aus der Datei MyMax7219 die Funktion MyMatrix und in der zweiten Zeile importieren wir noch die Bibliothek für die Zeit.

In Zeile 4 legen wir dann die Grundlagen für das spätere Arbeiten und Speichern, in der Variablen matrix das Objekt zum Erstellen der Display-Daten. Objekte haben wir schon kurz behandelt. Objekte sind sehr vielseitig und haben bestimmte Funktionen, welche wir auf das Objekt ausführen.

In Zeile 6 rufen wir dann die Funktion .showMessage() auf. Mit dieser können wir einen Text auf der Matrix wiedergeben, welcher sich mit einer Laufschrift über den Bildschirm bewegt. Hier übergeben wir als ersten Parameter nur den Text, der dargestellt werden soll.

In Zeile 7 stellen wir auch wieder etwas dar, benutzen dafür aber die Funktion .letter(). Diese Funktion braucht als Parameter einen String. Ihr könnt jederzeit Zahlen in Texte umwandeln mit der str()-Funktion.

Hier mal eine Zusammenfassung aller relevanten Funktionen:

Funktion
.brightness()Mit dieser Funktion lässt sich die Helligkeit der LEDs regeln. Als Parameter kann ein Wert zwischen 0 und 15 übergeben werden.
.clear()Löscht die gesamten Eingaben, keine LED leuchtet mehr
.letter(string)Zeigt einen einzelnen String an
.showMessage(text)Lässt einen Text als Lauftext durchlaufen
.pixel(x, y, value )Schaltet eine einzelne LED. Parameter 1: X-Position; Parameter 2: Y-Position; Parameter 3: ob die LED leuchten soll (1 = leuchtet)

Diese Funktionen müssen immer auf das Matrix-Objekt aufgerufen werden. Also: matrixObjekt.funktion().