Das Ansteuern von LEDs ist der Klassiker jeder elektrischen Schaltung. Nicht nur weil eine LED kostengünstig ist, sondern diese Steuerung auch als Grundlage von zahlreichen weiteren Projekten dient.
In dieser Anleitung werde ich nur die Codezeilen einfügen und anhand von Beispielen erklären. Das Erstellen und Ausführen eines Phyton Skriptes habe ich bereits in einer anderen Anleitung ausführlich erklärt. Python Skript erstellen und ausführen.
Inhaltsverzeichnis
Was benötigen wir?
Für die Ansteuerung einer Leuchtdiode mit unserem Raspberry Pi, benötigen wir nicht nur einfach eine LED. Ihr benötigt auch noch am besten ein Entwicklerboard* für den Aufbau der Schaltung und einen Vorwiderstand.
Wer gerade mit seinen ersten Schaltungen startet, kauft sich am besten so wie ich ein Raspberry Pi Starter Set*. In diesem findet ihr neben wichitgen Bauteilen für eine LED-Schaltung auch zahlreiche weitere Komponeten wie Servos, Motoren, RFID-Kartenleser, Reed-Kontakte etc.
Vorwiderstand für LED
Eine LED sollte man nie direkt an die GPIO Pins des Raspberry Pis anschließen. Man sollte auf jeden Fall einen Vorwiderstand um den Strom durch die Diode zu begrenzen.
Für diesen Widerstand gibt es keine pauschale Größe, da der benötigte Vorwiderstand von mehreren Faktoren abhängt. Dazu gehören zum einen die Betriebsspannung, aber auch die Farbe und Type der LED gehören zu den beeinflussenden Faktoren.
Der Vorwiderstand lässt sich jedoch sehr einfach berechnen, in dem wir das Ohm’sche Gesetz U=R*I anwenden.
Vorwiderstand berechnen
Für die Berechnung des Vorwiderstandes benötigen wir als erstes die Vorwärtsspannung (VF oder UF; Englisch: Forward Voltage) und den Vorwärtsstrom (IF; Englisch: Forward Current) der LED:
Die Informationen finden wir im Datenblatt der LED. Das Datenblatt könnt ihr in den meisten Fällen direkt im Shop, wo ihr die LED kauft, herunterladen.
Im Datenblatt oben (Beispiel 1) sehen wir, dass unsere LED eine Spannung von 1,9 – 2,2V und einen max. Vorwärtsstrom von 20mA verträgt. Jedoch sollte man den Widerstand nicht auf den max. Strom berechnen. Wie ihr seht ist die Empfehlung im Datenblatt auch 10mA.
Mit folgender Formel können wir jetzt unseren Vorwiderstand berechnen:
Vorwiderstand = (GPIO Spannung 3,3V – Spannung LED 2,0V) / Strom LED 0,010A
R = (3,3V – 2,0V) / 0,010A = 130,00Ohm
Wir würden uns daher für einen 150 oder 220 Ohm Vorwiderstand entscheiden.
Toleranzen: Wenn ihr mit der Formel etwas experimentiert, werdet ihr schnell merken, dass je nach LED Farbe und Spannung sich der Widerstand sehr stark verändert.
Alternativer Widerstand
Leider habe ich bei meinem Set keinen 150 Ohm Widerstand im Lieferumfang. Daher werden wir uns jetzt einmal ansehen, ob wir den 220 Ohm Widerstand trotzdem verwenden können, und rechnen uns den Strom bei einem 220 Ohm Widerstand aus.
Dazu drehen wir die Formel einfach einmal um.
Strom LED = (GPIO Spannung 3,3V – Spannung LED 2,0V) / Vorwiderstand
I = (3,3V – 2,0V) / 220Ohm = 0,0059A (~6mA)
Wie wir sehen, ist mit diesem Vorwiderstand der Strom deutlich unter dem im Datenblatt empfohlenen Strom für die rote LED. In der Praxis werdet ihr jedoch merken, dass eure LED auch mit einem 220 Ohm Widerstand ausreichend Hell leuchtet.
Da ihr öfter verschiedene Vorwiderstände benötigen werdet, empfehle ich euch ein kleines günstiges Widerstand-Set* zu kaufen. Mit dieser großen Auswahl könnt ihr dann den optimalen Vorwiderstand in eurer Schaltung verbauen.
Vorwiderstand: Solltet ihr kein Datenblatt haben, oder euch bei der Dimensionierung unsicher sein, solltet ihr immer zur Sicherheit einen etwas größeren Widerstand auswählen. Ist der Widerstand zu hoch leuchtet eure LED nicht mit voller Leuchtkraft. Wählt ihr einen zu kleinen Widerstand brennt euch die LED durch und ihr müsst euch eine neue kaufen.
GPIO Zero
Als Bibliothek für Schaltungen mit GPIO Pins empfehle ich euch GPIO Zero. Diese ist mittlerweile auch bereits standardmäßig unter Raspberry Pi OS vorinstalliert.
Falls ihr noch eine ältere OS Version verwendet, könnt ihr die Bibliothek mit folgenden Befehl installieren.
sudo apt install python3-gpiozero
Falls ihr ein anderes Betriebssystem auf eurem Raspberry Pi laufen habt, müsst ihr die Bibliothek gegebenenfalls mit folgenden Befehl installieren.
sudo pip3 install gpiozero
sudo apt install python3-gpiozero
Raspberry Pi GPIO Pins (Belegung)
Wenn wir mit GPIO Zero arbeiten, haben wir mehrere Möglichkeiten die GPIO Pins unseres Raspberry Pis anzugeben.
roteled = LED(17) roteled = LED("GPIO17") roteled = LED("BCM17") roteled = LED("BOARD11") roteled = LED("WPI0") roteled = LED("J8:11")
Auch wenn man als Anfänger sich oft an den Board Pins orientiert, ist es üblich mit den GPIO Pin Nummern zu arbeiten.
Raspberry Pi Pinbelegung (Pinout)
LED ansteuern
Als erstes werden wir uns ansehen, wie wir eine einzelne LED zum Leuchten bringen können.
Dazu benötigen wir neben einer Leuchtdiode noch einen 220 Ohm Widerstand (siehe Kapitel: Vorwiderstand für LED).
Aufbau
Wenn ihr etwas anschließt, solltet ihr euren Raspberry Pi immer von der 5V Stromversorgung trennen!
- LED Kathode (kürzerer Draht) mit Ground des Pis verbinden.
- LED Anode (längerer Draht) mit dem 220 Ohm Widerstand verbinden.
- 220 Ohm Widerstand mit GPIO Pin 17 des Pis verbinden.
Achtung: Der GPIO Pin 17 ist der Board Pin 11.
Code
Als Programmiersprache verwenden wir Python. Wie ihr so einen Code auf eurem Raspberry Pi ausführt, könnt ihr in meinem Artikel Raspberry Pi Python Skript erstellen und ausführen nachlesen.
from gpiozero import LED roteled = LED(17) roteled.on()
Code Erklärung
Zuerst müssen wir die LED Funktion aus der GPIO-Zero Bibliothek importieren.
from gpiozero import LED
Mit der nächsten Codezeile wird festgelegt, dass am GPIO Pin eine LED angeschlossen ist. Damit wird dieser Pin automatisch als Ausgang geschaltet, und wir müssen keine weiteren Einstellungen vornehmen.
Vor dem = Zeichen können wir einen Wunschnamen für unsere LED vergeben. Über diesen Namen steueren wir unsere LED später an.
roteled = LED(17)
Mit der letzten Zeile schalten wir die LED ein.
roteled.on()
Wenn wir den Python Code jetzt ausführen, sollte unsere LED leuchten.
LED blinken lassen
Um jetzt die LED blinken zu lassen, müssen wir den Code etwas anpassen.
Code
from gpiozero import LED from time import sleep roteled = LED(17) while True: roteled.on() sleep(1) roteled.off() sleep(1)
Code Erklärung
Mit der Funktion sleep aus der time Bibliothek können wir den Code für eine bestimmte Zeit lang anhalten.
from time import sleep
Hierbei handelt es sich um eine Endlos-Schleife. Alles in der Schleife wird immer und immer wieder ausgeführt.
while True: Code
Bei diesen vier Zeilen wird die rote LED eingeschaltet, danach wird der Code für eine Sekunde angehalten und anschließend wird die LED wieder ausgeschaltet. Damit durch die Schleife die LED nicht sofot wieder eingeschaltet wird, muss auch nach dem ausschalten, der Code wieder 1 Sekunde angehalten werden.
roteled.on() sleep(1) roteled.off() sleep(1)
Mit den sleep-Werten könnt ihr die Blinkfrequenz anpassen.
Alternative
Für das einfache Blinken einer LED können wir alternativ auch die blink Funktion verwenden.
from gpiozero import LED from signal import pause roteled = LED(17) red.blink() pause()
Mehrere LEDs ansteuern
Als nächstes sehen wir uns an, wie wir mehre LED ansteuern können.
Aufbau
Dazu schalten wir unseren Pi zuerst aus (trennen ihn vom Strom), und schließen anschließend 5 LEDs an unserem Raspberry Pi an. Auch hier benötigen wir wieder für jede LED einen 220 Ohm Widerstand.
Als Ausgang verwenden wir die GPIO-Pins 5, 6, 13, 19 und 26.
Code
from gpiozero import LEDBoard from time import sleep leds = LEDBoard(5, 6, 13, 19, 26) while True: leds.on() sleep(1) leds.off() sleep(1)
Einzelnen LEDs ansteuern
Mit der LEDBoard Funktion können wir nicht nur alle LEDs gleichzeitg ansteuern, sondern auch über .value und 1 für ein und 0 für aus eizelnen LEDs ein- bzw. ausschalten.
leds.value = (1, 0, 1, 0, 1)
Diese Methode kann man natürlich dann auch mit den normalen on und off Befehlen mischen.
from gpiozero import LEDBoard from time import sleep leds = LEDBoard(5, 6, 13, 19, 26) while True: leds.on() sleep(1) leds.off() sleep(1) leds.value = (1, 0, 1, 0, 1) leds.off()
LEDs blinken lassen
Und auch hier gibt es wieder eine fertige Blinken-Funktion.
from gpiozero import LEDBoard from signal import pause leds = LEDBoard(5, 6, 13, 19, 26) leds.blink() pause()
Zusammenfassung
Mit der GPIO Zero Bibliothek ist die Ansteuerung von LEDs mit unserem Raspberry Pi sehr einfach umsetzbar. Mit den oben angeführten Code können wir bereits die meisten einfach LED Ansteuerungen umsetzten. Wie wir die GPIO Pins als Eingang für Taster, Schalter und Sensoren verwenden, sehen wir uns in einem der nächsten Artikel an.
Mich würde auch noch interessieren, welche Projekte ihr mit der GPIO Biliothek umsetzen möchtet. Schreibt es gerne unten in die Kommentare.
Unterstütze diesen Blog, damit er nicht endet wie eine schlechte Netflix-Serie – unvollständig und enttäuschend!
Einfach genial, wie du zeigst, dass man mit dem Raspberry Pi nicht nur technisch basteln, sondern auch richtig cool mit LEDs spielen kann! Deine Anleitung ist klar und verständlich – ein tolles Projekt für Einsteiger und Tech-Enthusiasten gleichermaßen.
LG,
Florian