Wie lässt man eine LED am Raspberry Pi blinken?
Anders als beim Arduino, hat man beim Raspberry Pi keinen Zugriff auf die eingebauten LEDs. Diese zeigen lediglich Spannungsversorgung und Zugriff auf die µSD-Karte an.
Um eine LED blinken zu lassen, werden also eine externe LED mit einem passenden Vorwiderstand sowie Jumperkabel benötigt. Am sinnvollsten ist der Aufbau der Schaltung auf einem Breadboard mit einem T-Cobbler. Diese Art der Anordnung erleichtert auch spätere Versuche mit mehreren LEDs, Tastern und Sensoren. Die Programmierung erfolgt in der Programmiersprache Python.
Der Schaltplan (Blinkende LED am Raspberry Pi)
Was ist eigentlich eine LED?
LED steht für Light Emitting Diode. Das letzte Wort deutet auf die elektronischen Eigenschaften hin. Eine Diode ist ein Halbleiter, der den Strom nur in einer Richtung durchlässt, in der anderen Richtung sperrt. Die beiden „Beinchen“ heißen Anode und Kathode. Wenn man genau hinschaut, erkennt man, dass die Beinchen unterschiedlich lang sind. Am längeren Beinchen, der Anode, wird die positive Spannung angelegt; das kürzere, die Kathode, wird über einen Widerstand mit Ground verbunden. Der Widerstand ist wegen einer weiteren Eigenschaft von Dioden erforderlich. Zunächst einmal bedarf es einer Mindestspannung, damit überhaupt ein Strom fließen kann: Diese nennt man Flussspannung (engl. forward voltage). Bei höheren Spannungen wird die Diode voll leitend. Deshalb benötigt man einen Vorwiderstand, um die Stromstärke zu begrenzen, denn die Pins der Mikro Controller und auch des Raspberry Pi sollen maximal mit 15 bis 20 mA beaufschlagt werden. Wir verwenden Vorwiderstände im Bereich 100 bis 330 Ω (Ohm).
Die Programmiersprache Python kann, ähnlich wie. bei C/C++ mit den Bibliotheken (libraries), durch Programm-Module erweitert werden. Für unsere blinkende LED benötigen wir zwei dieser Module: erstens „time“, um die Blinkdauer festzulegen. Und zweitens ein Modul für den Zugriff auf die GPIOs (General Purpose Input/Output).
Wie steuere ich eine LED mit einem Raspberry Pi an?
Das Importieren der Module erfolgt zu Beginn des Python-Programms; dazu hat man mehrere Möglichkeiten. Beispiele:
Mit der folgenden Zeile wird das Modul time importiert:
import time
Bei Aufruf der Methode sleep muss der Modulname time mit Punkt vorangestellt werden:
time.sleep(1)
Im Gegensatz zu delay(), bei dem das Zeitintervall als Argument in Millisekunden angegeben wird, werden bei time.sleep() die Werte in Sekunden, ggf. mit Dezimalpunkt angegeben.
import RPi.GPIO as GPIO
Das vereinfacht die Aufrufe der Methoden im Programm, z.B.
GPIO.setmode(GPIO.BCM)
Drittes Beispiel für ein anderes Modul für den GPIO-Zugriff:
from gpiozero import LED
Aus dem Modul gpiozero wird nur die Klasse LED importiert. Bei dieser Import-Methode wird beim Aufruf der Methode/Funktion der Modulname nicht mehr vorangestellt.
Beispielprogramme zum Ansteuern einer LED mit einem Raspberry Pi Mikrocontroller
Erstes Beispiel mit dem Modul RPi.GPIO:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM) # Pinbezeichnung für Broadcomm-Prozessor
GPIO.setup(26,GPIO.OUT) # GPIO26 (=phys. Pin 37) wird Ausgang
while True: # Endlosschleife, mit Strg-C abbrechen
GPIO.output(26,1) # GPIO 26 wird HIGH geschaltet
time.sleep(1)
GPIO.output(26,0) # GPIO 26 wird LOW geschaltet
time.sleep(1)
Zweites Beispiel mit dem Modul gpiozero. Es werden nur LED und sleep importiert.
from gpiozero import LED
from time import sleep
redLED = LED(26) # redLED wird an GPIO 26 instanziiert
while True:
redLED.on() # redLED wird angeschaltet
sleep(1)
redLED.off() # redLED wird ausgeschaltet
sleep(1)
Challenge: Schaltung und Programm erweitern für einen Ampelzyklus, z.B. rot(3s), rot/gelb(1s), grün(3s), gelb(1s), Wiederbeginn mit rot.
Lösungsvorschlag siehe Nr. 02 Der Wechselblinker