Der Raspberry Pi ist ein günstiger, kleiner Mini-Computer, der wegen des geringeren Stromverbrauchs praktisch als kleiner Smart-Home Server (zum Beispiel mit FHEM) ist – aber er ist auch für Bastler interessant: Auf der Oberseite der Platine befinden sich zahlreiche Ports, GPIO genannt.
Hier lassen sich LEDs anschließen und leuchten oder blinken – oder zahlreiche Sensoren: Zum Beispiel Bewegungsmelder, Temperatursensoren oder eine Infrarotschnittstelle. In diesem Beispiel Zeigen wir eine einfach Schaltung für den Anschluss einer LED und ein Programm, mit dem man die LED ansprechen kann: So könnte man die LED an- und ausschalten, oder auch blinken lassen.
Hardware: LED an den Raspberry anschließen
Wichtig zum Anschluss der LED: Zwischen den Raspberry und die LED muss unbedingt ein Widerstand gesetzt werden, um LED und Computer nicht zu zerstören. Außerdem sollten die Kabel nur dann an die Ports des Raspberry angeschlossen werden, wenn dieser aus ist – dazu sollte man ihn vorher mit “sudo halt” oder “sudo shutdown -h” herunterfahren.
Vor dem Programmieren der LED kann man sie aber einmal testen, indem man sie einfach mit dem Pin 1 (+3.3V) und auf der anderen Seite mit dem Widerstand und dann Pin 6 (0V / GND) verbindet. Wie das aussieht, zeigt das Foto oben. LEDs haben normalerweise einen etwas längeren (oben schräg angeschlossen!) und einen etwas kürzeren Fuss: Der längere Fuss muss an Plus-Pol angeschlossen werden, damit die LED leuchtet: Wenn nichts passiert, kann man sie zum Testen einfach umdrehen, das schadet der LED nicht – im schlimmsten Fall leuchtet sie nur nicht.
» Tipp: Das sind die Pin-Belegungen der GPIO Ports
Software: LED ansprechen und steuern
Um die LED mit dem Raspberry Pi ansteuern zu können, muss sie statt mit Pin 1 mit einem der GPIO Daten-Pins verbunden werden. Die andere Seite der LED mit dem Widerstand bleibt weiterhin mit PIN 6 (GND) verbunden. Per Programm lässt sich dann die der Daten-Port anschalten und die LED leuchtet wieder. Das erste Kabel wird also nicht mehr mit Pin 1, sondern Pin 11 (GPIO0 – der sechste Pin auf der linken Seite) verbunden – diesen sprechen wir dann später auch über seine Adresse “17” an. Vor dem Umstecken der Kabel sollte der Raspberry allerdings wieder mit “sudo halt” heruntergefahren und ausgeschaltet werden, damit man nicht versehentlich einen Kurzschluss auslöst.
Zum Kontrollieren der LED nehmen wir die Programmiersprache Python – als Grundlage setzen wir hier einen Raspberry Pi mit installiertem Linux-System voraus: Wie man das installiert, zeigen wir hier.
Python-Program schreiben
Zunächst öffnen wir den nano Editor mit dem Namen der zu erstellenden Datei:
nano LED3Sek.py
Hier geben wir den folgenden Programm-Code ein:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17,GPIO.OUT)
GPIO.output(17,GPIO.HIGH)
time.sleep(3)
GPIO.output(17,GPIO.LOW)
Das Programm kann mit STRG + O gespeichert werden, anschließend beendet man den Editor mit STRG + X. Um das Programm jetzt zu starten, gibt man diesen Code ein:
sudo python LED3Sek.py
Das Programm lässt die LED jetzt für drei Sekunden leuchten und schaltet sie danach wieder aus. Soll die LED länger leuchten, muss man den Wert zwischen den Klammern bei “time.sleep(3)” editieren. Soll die LED gar nicht mehr ausgeschaltet werden, kann man die letzten beiden Zeilen einfach weglassen.
LED am Raspberry Pi blinken lassen
Um die LED jetzt blinken zu lassen, setzen wir den Befehl zum Ein- und Ausschalten der LED in eine Schleife, die fünfmal wiederholt wird – außerdem verkürzen wir die Sleep-Zeit auf eine Sekunde. Wichtig bei der Programmiersprache Python ist, dass der Inhalt einer For-Schleife eingerückt sein muss: Alles, was in der Schleife wiederholt ausgeführt werden soll, muss mit einem Druck auf die “Tab-Taste” jeweils einmal eingerückt werden, sonst erhält man die Fehlermeldung “IndentationError: expected an indented block”.
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17,GPIO.OUT)
for x in range(0, 5):
GPIO.output(17,GPIO.HIGH)
time.sleep(1)
GPIO.output(17,GPIO.LOW)
time.sleep(1)