Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

LED-Zauberei mit RP2040:bit – Meistere die 5×5 Matrix

Posted on 15. Januar 202414. Januar 2024 by Stefan Draeger

In diesem Beitrag möchte ich speziell auf die 5×5 LED Matrix des RP2040:bit eingehen und dir aufzeigen wie diese programmiert wird. Den Mikrocontroller RP2040:bit habe ich dir bereits im Beitrag Vorstellung RP2040:bit Board vorgestellt, hier möchte ich jedoch etwas tiefer eintauchen.

RP2040:bit - LED Matrix mit Micropython programmieren
Dieses Video auf YouTube ansehen.

Ein herzliches Dankeschön geht an meinen aufmerksamen Leser Felix F., der die Inspiration für diesen Beitrag zum RP2040:bit und der 5×5 LED Matrix geliefert hat! Eure Ideen und Anregungen sind mir immer willkommen.

Inhaltsverzeichnis

  • Aufbau der 5×5 LED Matrix des RP2040:bit
  • Programmieren des RP2040:bit
    • Was ist ein Array?
      • Zugriff auf ein Wert im Array
    • Funktion zum Ansteuern von XY Koordinaten in der LED Maxtrix am RP2040:bit
    • Alle Punkte in der LED-Matrix aufleuchten lassen
  • kleine Animationen erstellen
  • Probleme mit der 5×5 LED Matrix am RP2040:bit und eine Lösung
    • Beispiele
  • Download
  • Fazit

Aufbau der 5×5 LED Matrix des RP2040:bit

Schauen wir uns zunächst die LED Matrix genauer an. Es sind 5 LEDs pro Reihe und 5 pro Spalte, das ergibt eine Kombination aus 25 LEDs welche gesteuert werden können.

RP2040:bit
RP2040:bit

Die Schaltung hierfür ist folgendermaßen:

Schaltung der 5x5 LED-Matrix am RP2040:bit
Schaltung der 5×5 LED-Matrix am RP2040:bit

Diese Schaltung benötigen wir, um zu verstehen, wie die LED-Matrix funktioniert. Du musst quasi immer zwei Pins am Mikrocontroller manipulieren, damit eine LED aufleuchtet.

Um exemplarisch die LED5 (unten links in der Schaltung) zum Leuchten zu bringen, aktiviere Pin GP2 und deaktiviere Pin GP22. Das Problem dabei ist, dass die gesamte Zeile bereits aktiv ist. Wenn du eine LED in einer anderen Spalte aktivieren möchtest, wird auch die in derselben Zeile aktiviert. Doch dafür habe ich eine Lösung für dich.

Programmieren des RP2040:bit

Der Mikrocontroller RP2040:bit kann in unterschiedlichen Sprachen programmiert werden. Das macht der verbaute Chip RP2040 welcher vom Raspberry Pi Pico kommt möglich. Dir stehen somit sehr viele Möglichkeiten offen. Nachfolgend möchte ich dir zeigen, wie du diese Matrix in Micropython programmierst.

Die einzelnen LEDs kannst du in einem speziellen Muster ansprechen. Dabei nutzen wir in der Programmierung ein Array.

Was ist ein Array?

Zunächst möchte ich dir erläutern, was ein Array ist und wie du dieses behandeln / programmieren kannst. Ein Array ist eine Liste mit Werten. Dabei ist der erste Wert an der Position 0, du zählst also von 0 bis zum Ende. Die Werte in einem Array können bei Micropython beliebig sein, dieses ist nicht in allen Programmiersprachen so gelöst!

def main():
    array = [0,1,2,3,4]
    for wert in array:
        print(wert)
        
main()

Durch ein Array kannst du recht einfach mit einer ForEach-Schleife durchlaufen:

Ausgabe eines Arrays in Micropython
Ausgabe eines Arrays in Micropython

Zugriff auf ein Wert im Array

Du kannst auch einzelne Werte im Array manipulieren, dazu kannst du auf Werte zugreifen und diese beliebig ändern.

Den Zugriff auf die Werte erhältst du mit der eckigen Klammer hinter dem Namen des Arrays.

arrayName[index] = neuer Wert

Nachfolgend ein kleines Beispiel, in welchem ich den Wert an der zweiten Stelle im Array von 1 auf meinen Namen geändert habe.

def main():
    array = [0,1,2,3,4]
    array[1] = "Stefan"
    for wert in array:
        print(wert)
        
main()

Du siehst in dem Reiter Kommandozeile nun das der Wert im Array von 1 auf „Stefan“ geändert wurde.

Ausgabe eines Arrays mit veränderten Daten
Ausgabe eines Arrays mit veränderten Daten

Funktion zum Ansteuern von XY Koordinaten in der LED Maxtrix am RP2040:bit

Ich habe dir soeben erläutert, wie man mit Arrays umgeht und jetzt möchte ich dir zeigen, wie du mit diesem neuen Wissen eine LED an der XY Koordinate ansprechen kannst.

Wir benutzen hierzu ein Array mit 10 Werten. Die ersten 5 Stellen im Array sind die Spalten und die letzten 5 die Zeilen.

ledZeile = [1,0,0,0,0,1,1,0,1,1]

In diesem Fall habe ich die Zeile 3 ausgewählt (erkennbar an der 0) und die erste LED in der Zeile (erkennbar an der 1).

Das Ergebnis ist:

aktive LED auf der Matrix des RP2040:bit
aktive LED auf der Matrix des RP2040:bit

Jetzt können wir dieses in eine Funktion schreiben, damit wir über einen lesbaren Parameter auf die LEDs zugreifen können.

from machine import Pin
from time import sleep

led_Col=[2,3,4,5,25,7,8,9,21,22];

for ledPin in led_Col:
    Pin(ledPin, Pin.OUT)
    
ledMatrix = [0,0,0,0,0,1,1,1,1,1]

def setLED(zeile, spalte, status):
    #Da ein Array mit dem Index 0 beginnt,
    #ziehen wir von dem Wert Spalte einen ab.
    ledMatrix[spalte-1] = status
    #Der Index für die Zeilen beginnt nach den ersten
    #5 Stellen, zu diesem addieren wir den Index der
    #gewünschten Zeile.
    ledMatrix[4 + zeile] = 0 if status == 1 else 0
    #Um eine Zeile zu aktivieren muss statt eine 1
    #eine 0 geschrieben werden.

#Funktion zum schreiben der Daten auf die LED Matrix.
def updateLEDMatrix():
    #Zugriff auf die Variable ledMatrix welche außerhalb
    #der Funktion liegt.
    global ledMatrix
    #Zum Schluss muss nun das Array mit den geänderten
    #Daten geschrieben werden.
    
    #erstellen eines Zählers für den Index im Array mit den
    #Pins der LEDs.
    ledPin = 0
    
    #Starten der ForEach Schleife...
    for status in ledMatrix:
        #Wenn der Status 0 / also der Wert an der Arrayposition
        #gleich 0 ist, dann soll der Pin deaktiviert werden.
        if status == 0:
            Pin(led_Col[ledPin], Pin.OUT).low()
        else:
            #Wenn der Status 1 ist, dann soll der Pin aktiviert werden.
            Pin(led_Col[ledPin], Pin.OUT).high()
        #erhöhen des Zählers
        ledPin = ledPin + 1
        
#Zurücksetzen der LED Matrix
def resetLEDMatrix():
    #Zugriff auf die Variable ledMatrix welche
    #außerhalb der Funktion liegt.
    global ledMatrix
    #überschreiben der Matrix mit dem Standard (alles AUS)
    ledMatrix = [0,0,0,0,0,1,1,1,1,1]
    #aufrufen der Funktion zum schreiben der Daten
    updateLEDMatrix()

#Aufrufen der Funktion setLED
#erster Parameter ist die Zeile,
#zweiter Parameter ist die Spalte,
#dritter Parameter ist der Status der LED (1 == EIN, 0 == AUS)
setLED(5, 5, 1)
#Schreiben der Daten auf die Matrix
updateLEDMatrix()
#eine kleine Pause von 1 Sekunde
sleep(1)
#zurücksetzen der Matrix
resetLEDMatrix()
#Neue LED aktivieren
setLED(4, 5, 1)
#Schreiben der Daten auf die Matrix
updateLEDMatrix()
sleep(1)
resetLEDMatrix()

Wenn wir jetzt dieses kleine Programm ausführen, dann wird unten rechts (Zeile = 5 & Spalte = 5) die LED aufleuchten und danach die LED darüber (Zeile = 4 & Spalte = 5)

Alle Punkte in der LED-Matrix aufleuchten lassen

Mit einer einfachen Schleife können wir jetzt auch alle LEDs in der Matrix aufleuchten lassen.

Der Code manipuliert das Array in einer Schleife so, dass jede LED einmal kurz aufleuchtet, wenn dieses abgeschlossen ist, werden die LEDs Zeilenweise und Spaltenweise aktiviert.

while True:
    pause = 0.2
    #jede LED einmal aufleuchten lassen
    for zeile in range (1,6):
        for spalte in range (1,6):
            setLED(zeile, spalte, 1)
            updateLEDMatrix()
            sleep(pause)
            resetLEDMatrix()
    
    #alle Zeilen aufleuchten lassen
    for zeile in range (1,6):
        for spalte in range (1,6):
            setLED(zeile, spalte, 1)
        updateLEDMatrix()
        sleep(pause)
        resetLEDMatrix()
    
    #alle Spalten aufleuchten lassen
    for spalte in range (1,6):
        for zeile in range (1,6):
            setLED(zeile, spalte, 1)
        updateLEDMatrix()
        sleep(pause)
        resetLEDMatrix()

kleine Animationen erstellen

Mit dem Code kannst du auch kleine Animationen auf der Matrix erstellen.

In diesem Fall habe ich drei Frames erstellt, wo jeweils ein paar der LEDs aufleuchten.

while True:
    setLED(1, 1, 1)
    setLED(5, 5, 1)
    updateLEDMatrix()
    sleep(0.25)
    resetLEDMatrix()
    setLED(2, 2, 1)
    setLED(4, 4, 1)
    updateLEDMatrix()
    sleep(0.25)
    resetLEDMatrix()
    setLED(3, 3, 1)
    updateLEDMatrix()
    sleep(0.25)
    resetLEDMatrix()
    setLED(2, 2, 1)
    setLED(4, 4, 1)
    updateLEDMatrix()
    sleep(0.25)
    resetLEDMatrix()

Probleme mit der 5×5 LED Matrix am RP2040:bit und eine Lösung

Wenn du spezielle Muster wie ein Smiley oder ein einfaches X zeichnen möchtest, dann wird es am RP2040:bit etwas komplizierter, aber auch hierfür gibt es eine sehr einfache Lösung.

Es ist theoretisch ausgeschlossen, dass zwei LEDs gleichzeitig leuchten, es sei denn, sie befinden sich an verschiedenen Koordinaten. Dennoch können wir mehrere LEDs gleichzeitig aktivieren, indem wir die Trägheit des menschlichen Auges nutzen. Die LEDs leuchten einfach sehr schnell nacheinander auf, sodass es für uns so aussieht, als ob alle entsprechenden LEDs gleichzeitig leuchten würden. Dabei wird das Programm jedoch extrem schnell ausgeführt.

Beispiele

Hier nun ein paar Beispiele:

#ein X
while True:
    setLED(1, 1, 1)
    setLED(5, 5, 1)
    updateLEDMatrix()
    sleep(0.001)
    resetLEDMatrix()
    setLED(2, 2, 1)
    setLED(4, 4, 1)
    updateLEDMatrix()
    sleep(0.001)
    resetLEDMatrix()
    setLED(3, 3, 1)
    updateLEDMatrix()
    sleep(0.001)
    resetLEDMatrix()
    setLED(2, 2, 1)
    setLED(4, 4, 1)
    updateLEDMatrix()
    sleep(0.001)
    resetLEDMatrix()
ein Kreuz auf der LED Matrix des RP2040:bit
ein Kreuz auf der LED Matrix des RP2040:bit
#ein lachender Smiley
while True:
    setLED(2, 2, 1)
    updateLEDMatrix()
    sleep(0.01)
    resetLEDMatrix()
    setLED(2, 4, 1)
    updateLEDMatrix()
    sleep(0.001)
    resetLEDMatrix()
    setLED(4, 1, 1)
    updateLEDMatrix()
    sleep(0.001)
    resetLEDMatrix()
    setLED(5, 2, 1)
    updateLEDMatrix()
    sleep(0.001)
    resetLEDMatrix()
    setLED(5, 3, 1)
    updateLEDMatrix()
    sleep(0.001)
    resetLEDMatrix()
    setLED(5, 4, 1)
    updateLEDMatrix()
    sleep(0.001)
    resetLEDMatrix()
    setLED(4, 5, 1)
    updateLEDMatrix()
    sleep(0.001)
    resetLEDMatrix()
ein Smiley auf der 5x5 LED Matrix des RP2040:bit
ein Smiley auf der 5×5 LED Matrix des RP2040:bit

Download

Hier die Programme zum download.

Programm – Anzeigen eines Smileys auf der 5×5 LED Matrix des RP2040:bitHerunterladen
Programm – erstellen einer einfachen Animation auf der 5×5 LED Matrix des RP2040:bitHerunterladen

Fazit

Der RP2040:bit ist ein cooler Mikrocontroller. Jedoch gibt es derzeit noch keine richtige Dokumentation zu diesem, ich hoffe hiermit konnte hier die Lücke etwas schließen, indem ich aufgezeigt habe, wie die LED Matrix in Micropython programmiert wird.

Solltest du Fragen haben oder Probleme mit anderen Mikrocontrollern so kannst du mir gerne eine Mail an info@draeger-it.blog senden.

1 thought on “LED-Zauberei mit RP2040:bit – Meistere die 5×5 Matrix”

  1. Roland Hirsch sagt:
    3. Juli 2024 um 13:42 Uhr

    Hallo Herr Dräger,
    ich beschäftige mich schon seit längerer Zeit mit dem MicroBit und habe mir spaßeshalber mal den RP2040 aus China für ca. 5 € bestellt. Allerdings funktioniert es nur begrenzt mit den bisherigen Editoren für den MicroBit. Das Display habe ich jetzt mal mit Hilfe Ihrer Anleitung angesteuert. Man kann tatsächlich die LEDs spaltenweise auf einen Schlag ansteuern, indem man den Spaltenpin z.B. Pin 2 auf 1 setzt und dann gleichezeitig die Pin 7,8,9,21,22 auf 1 (aus) bzw. 0 (an). Ich habe das mal mit MicroBlocks fun probiert und da muss man die Pausenzeit des angeschalteten Pins 2,3,4,5,25 auf jeweils 3-5 Millisekunden einstellen, dann ergibt es ein flackerfreies Bild.
    Merkwürdigerweise funktioniert bei meinem Chip aber die letzte Spalte mit Pin25 nicht, man muss da in MicroBlocks fun die Funktion „setze Nutzer LED“ einsetzen (warum, ich weiß es nicht)
    Gruß Roland Hirsch

    Antworten

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}