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.

vorlesen Druckansicht
,
Lesezeit: 19 Min.
Von
  • Akos Fodor
Inhaltsverzeichnis

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.

Mehr Make-Projekte

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.

Kurzinfo
  • 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

Mehr zum Thema

Mit PNGdec kann man auch kleine Fotos auf einer LED-Matrix anzeigen.

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 = n lä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, wobei b und h die 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.

Mit dem Parameter source kann man auch nur einen Bereich einer PNG ausgeben.

Videos by heise