Ausgabe über die GPIO
Wir wollen in diesem Abschnitt versuchen, eine LED, die an den RasPi angeschlossen ist, zum Leuchten zu bringen. Gesteuert wird das Ganze dann über ein Python-Programm.
Kurze LED-Kunde
Bei der LED ist wichtig, dass man die Kathode(-) und die Anode(+) unterscheiden kann.
Das ist relativ leicht, wenn man folgendes weiß:
Die Seite der LED, auf der die Kathode ist, hat das kürzere "Beinchen". Auf dieser Seite ist auch das LED-Gehäuse abgeflacht und im Gegenlicht erkennst du ein "Fähnchen" innerhalb der LED.
Die Kathode muss an den Minus-Pol, also an die Erdung (GND) angeschlossen werden. Die Anode muss an den Plus-Pol angeschlossen werden. Vertauschst du die Anschlüsse der LED, kann folgendes passieren: Wenn du Glück hast, leuchtet sie einfach nicht. Wenn du Pech hast und die Spannung zu hoch war, ist sie zerstört.
Erster Schritt: Die LED zum Leuchten bringen
Zunächst wollen wir versuchen, die LED einfach nur zum Leuchten zu bringen. Dazu benötigst du neben der LED noch einen 330Ω-Widerstand.
Jetzt sollte die LED dauerhaft leuchten.
Zweiter Schritt: Die LED über den RasPi an- und ausschalten
Nun nehmen wir an unserer Schaltung nur eine kleine Änderung vor: Die Anode wird nicht mehr mit dem dauerhaften Plus-Pol verbunden, sondern mit Pin 15, dessen Ausgangswert wir steuern können.
Jetzt müssen wir dem RasPi mitteilen, dass der Pin 15, also die GPIO-Schnittstelle 22, mit dem Ausgangssignal "True" versehen wird. Das erledigen wir über ein Python-Programm. Wichtig ist, dass du dein Programm als superuser ausführst. In einer shell gibst du also ein: sudo idle
Dein Python-Programm könnte dann wie folgt aussehen:
import RPi.GPIO as GPIO ## Importieren der GPIO Bibliothek
GPIO.setmode(GPIO.BOARD) ## Verwende die Nummerierung der Pins
GPIO.setup(15, GPIO.OUT) ## Setze GPIO Pin 15 auf Ausgangssignal
GPIO.output(15,True) ## Setze GPIO Pin 15 auf "True"
Führe nun dein Python-Programm aus. Die LED sollte leuchten.
Hinweis: Alternativ kannst du in der zweiten Zeile folgendes schreiben:
GPIO.setmode(GPIO.BCM)
Hiermit teilst du dem System mit, dass du dich auf die Nummerierung der Pins nach dem "Broadcom SOC channel" beziehst. Das heißt, du müsstest bei der Verwendung des gleichen Pins in der dritten und vierten Zeile statt der 15 die 22 verwenden. Wir werden im Folgenden, so wie im Quelltext oben, die "BOARD"-Nummerierung verwenden.
Immer schön aufräumen
So wie im Quelltext oben sollte man es eigentlich nicht machen. Man kann das Programm nur mit Strg+C beenden und danach ist aber die GPIO in einem nicht definierten Zustand. Es ist sinnvoll, am Ende jedes Programms abschließend wieder aufzuräumen, in dem man folgende Methode aufruft:
GPIO.cleanup()
Wenn du darauf verzichtest und startest das obige Programm ein weiteres Mal, dann kommt es in der Regel zu einer Fehlermeldung. Der folgende Quellcode sollte also die Grundlage für die weiteren Übungen sein:
import RPi.GPIO as GPIO ## Importieren der GPIO Bibliothek
GPIO.setmode(GPIO.BOARD) ## Verwende die Nummerierung der Pins
GPIO.setup(15, GPIO.OUT) ## Setze GPIO Pin 15 auf Ausgangssignal
try: ## Ausnahmebehandlung
while True: ## Endlosschleife bis Strg+C
GPIO.output(15,True) ## Setze GPIO Pin 15 auf "True"
finally: ## Dieser Block wird auf jeden Fall ausgeführt
GPIO.cleanup() ## Immer schön hinter dir aufräumen!
Übungen
Aufgabe 1
Lasse nun die LED blinken. Die folgenden Code-Schnipsel sollten dir dabei helfen:
Aufgabe 2
Ergänze deine Schaltung um zwei weitere LEDs, die an anderen Pins angschlossen sind und simuliere eine Verkehrsampel.
Aufgabe 3 (für Experten)
Frage den Benutzer nach einer Nachricht und "sende" diese Nachricht als Morse-Code über die LED.
Quellen
- [1]: led - Urheber: JOM - Lizenz: inf-schule.de
- [2]: led-gesteuert - Urheber: Fritzing - Lizenz: Creative Commons BY-SA 3.0 International