LED-Matrizes mit MicroPython steuern, Teil 2
Ein Infotext, ein paar animierte Grafiken oder eine Laufschrift auf einer LED-Matrix sind nicht nur praktisch, sondern machen auch optisch was her.
- Akos Fodor
Mit dem Pimoroni Interstate 75 habe ich bereits gezeigt, wie man HUB75-Matrizes mit MicroPython ansteuert und einfache geometrische Formen sowie eine Laufschrift erstellt. Mit dem kleinen Mikrocontroller-Board sind aber auch grafisch aufwendigere Projekte möglich. Ob für Spiele oder praktische Anwendungen wie eine dynamische Wetteranzeige – in diesem Artikel erkläre ich zwei Methoden, mit denen man Bilder auf der LED-Matrix darstellen kann. Begleitend dazu gibt es alle Programmcodes und Bilder im GitHub-Repository des Projekts zum Download.
Eine einsteigerfreundliche und schnelle Methode, um Bilder auf der LED-Matrix auszugeben, bietet die Bibliothek PNGdec, die in die Interstate75-Bibliothek integriert ist. Mit ihr lassen sich PNGs komplett oder ausschnittsweise darstellen. Man kann also eine Datei pro Bild verwenden oder mehrere Motive in einer Datei speichern und immer nur einen Teilbereich davon anzeigen. Hat das PNG-Bild transparente Bereiche, stellt die Bibliothek diese zudem auch auf der LED-Matrix transparent dar, sodass die dahinter liegende Grafik sichtbar ist und nicht etwa mit Schwarz ĂĽberdeckt wird.
Um eine PNG-Datei (etwa car.png aus dem GitHub-Repository des Projekts) auf dem Panel auszugeben, kopiert man sich zunächst die Grafik auf das Mikrocontroller-Board. Dazu verbindet man den Interstate 75 mit dem PC, öffnet Thonny und drückt einmal auf die Stopp-Taste in der Symbolleiste, um mögliche laufende Prozesse zu unterbrechen. Danach sucht man links oben im Thonny-Dateifenster auf seinem PC nach dem PNG-Bild, klickt mit der rechten Maustaste darauf und wählt "Upload to /" aus. Dieser Befehl kopiert das Bild in das Hauptverzeichnis des Interstate 75. Sollte das Dateifenster nicht sichtbar sein, lässt es sich über das Menü "View/Files" einblenden.
- PNG-Grafiken mit dem Interstate 75 auf einer HUB75-Matrix ausgeben
- Bilder in einfache Arrays umwandeln, einfärben und animieren
- Helligkeit der Matrix ĂĽber RGB-Werte mit einem Sensor steuern
Checkliste
Zeitaufwand: ab 2 Stunden
Kosten: 5 bis 10 Euro (zzgl. Kosten aus dem ersten Artikel)
Material
- HUB75-Matrix, Interstate 75 und Netzteil aus dem ersten Artikel
- LDR-Sensor
- Widerstand, 10 kΩ
- Kabel
Werkzeug
- Lötkolben und -zinn
- Schraubendreher
- Seitenschneider
Software
- Bildbearbeitungsprogramm
- Thonny
Als Nächstes erstellt man sich ein neues Dokument in Thonny und importiert die Interstate75-Bibliothek und die notwendigen Befehle, mit denen man die LED-Matrix initialisiert. Die PNGdec-Bibliothek bindet man mit folgendem Befehl in sein Programm ein:
from pngdec import PNG
Danach lässt sich die PNG-Datei mit nur vier Zeilen Code öffnen, dekodieren und auf der LED-Matrix ausgeben:
png = PNG(buffer)
png.open_file("car.png")
png.decode(0, 0)
matrix.update(buffer)
Die beiden Nullen im decode()-Befehl stehen fĂĽr die X- und Y-Position der linken oberen Ecke des Bildes. Ăśberdies gibt es fĂĽr decode() noch weitere Parameter:
- Möchte man sein Bild skalieren, kann man in der Klammer den Befehl
scale = (x, y)ergänzen und gibt für die X- und Y-Skalierung jeweils einen positiven Integer ein. - Mit
rotate = nlässt sich ein Bild auch in 90-Grad-Schritten drehen. - Und wenn man, wie eingangs beschrieben, nur einen Teilbereich der PNG zeigen will, kann man diesen mit
source = (x, y, b, h)festlegen, wobeibundhdie Breite und Höhe bestimmen.
Wenn man mehrere dieser Parameter verwendet, muss man allerdings die Reihenfolge (source, scale, rotate) beachten, mit denen die Bibliothek diese abarbeitet. Das kann dann etwa so aussehen:
png.decode(0,0,source = (8,0,8,8),
scale = (3, 3))
png.py
from pngdec import PNG
from interstate75 import (
Interstate75,
DISPLAY_INTERSTATE75_64X64)
matrix = Interstate75(display =
DISPLAY INTERSTATE75_64X64)
buffer = matrix.display
width = matrix.width
height = matrix.height
png = PNG(buffer)
png.open_file("car.png")
png.decode(0, 0)
matrix.update(buffer)
Wie das folgende Bild zeigt, lässt sich mit diesem Befehl ein 8 × 8 Pixel großer Ausschnitt aus einer längeren PNG-Datei (faces.png) auswählen und links oben auf der LED-Matrix mit scale in dreifacher Größe ausgeben.
Videos by heise