Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Projekt: LED mit Python
☚ zurück GPIO (General Purpose Input/Output) bezeichnet frei programmierbare Ein- und Ausgänge des Raspberry Pi. In diesem Projekt werden mehrere LEDs (Rot, Gelb, Grün) über Python und die Bibliothek `RPi.GPIO` angesteuert. Ziel ist es, eine saubere und modulare Programmstruktur zu entwickeln, mit der die LEDs flexibel geschaltet werden können.
Programmstruktur
Die Programmierung erfolgt nun immer mit der gewählten Umgebung!
source ~/devel/projects/course_env/bin/activate
Für das eigentliche Projekt wird der Code nun strukturiert aufgebaut. Ziel ist es, mehrere LEDs (R, G, Y) flexibel ansteuern zu können, ohne bei jeder Änderung den Quellcode neu anpassen oder Hardcodierungen verändern zu müssen.
Die Umstrukturierung sorgt außerdem für eine bessere Übersichtlichkeit. Einzelne Komponenten können dadurch unabhängig voneinander erweitert oder in anderen Projekten weiterverwendet werden, wie später im Projekt mit FastAPI und Apache2 gezeigt wird.
Folgende Programmstruktur wird verwendet.
gpio_led– Projektordner im Verzeichnis~/devel/projects/src– Ordner für den Quellcode (engl. source)core– Unterordner insrc
gpio_led/
└── src
├── core
│ ├── hardware.py
│ └── __init__.py
└── ledcontrol.py
Lege alle Verzeichnisse so an, wie oben dargestellt.
Alle Dateien – bis auf __init__.py – kommen später dazu.
Die __init__.py muss lediglich vorhanden sein, damit Python dieses Verzeichnis als Modulverzeichnis erkennt. Dies kann mit dem folgenden Befehl erledigt werden:
cd ~/devel/projects/gpio_led/src/core touch __init__.py
Hardware
TODO FEHLT NOCH
Quellcode (Sourcecode)
Der Sourcecode besteht aus drei Dateien: das eigentliche Programm ledcontrol.py sowie die Dateien im Hintergrund (im Verzeichnis core), die für die Programmlogik und die Hardware-Ansteuerung benötigt werden. Im Kurs wird das Programm ausführlich erklärt. Diese Dateien enthalten noch keinen Header – dies sollte geändert werden.
hardware.py
- hardware.py
import RPi.GPIO as GPIO # ADJUST AREA START PIN_R = 17 PIN_Y = 27 PIN_G = 22 # ADJUST AREA END GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(PIN_R, GPIO.OUT) GPIO.setup(PIN_Y, GPIO.OUT) GPIO.setup(PIN_G, GPIO.OUT) def setLED(pin, value): if value == 1: GPIO.output(pin, GPIO.HIGH) else: GPIO.output(pin, GPIO.LOW) def setYellowLED(value): setLED(PIN_Y, value) def setRedLED(value): setLED(PIN_R, value) def setGreenLED(value): setLED(PIN_G, value) def status(): r = GPIO.input(PIN_R) g = GPIO.input(PIN_G) y = GPIO.input(PIN_Y) return r, g, y def cleanup(): GPIO.cleanup()
ledcontrol.py
- ledcontrol.py
#!/usr/bin/env python3 from core import hardware def main(): print("This is LED CONTROL ('x' beendet)") try: while True: cmd = input("[R]ed [Y]ellow [G]reen [x] Exit > ").strip().lower() if cmd in ("r", "y", "g"): mode = input("[1] ON [0] OFF > ").strip() value = 1 if mode == "1" else 0 if cmd == "r": hardware.setRedLED(value) elif cmd == "y": hardware.setYellowLED(value) elif cmd == "g": hardware.setGreenLED(value) elif cmd == "x": break except KeyboardInterrupt: pass finally: print("\rGood Bye :-)") hardware.cleanup() # if __name__ == "__main__": main()
Testen des Programms
Bevor mit dem Projekt weitergearbeitet wird, muss überprüft werden, ob das LED-Programm korrekt gestartet werden kann.
Dazu müssen folgende Voraussetzungen erfüllt sein:
- die Python-Environment ist aktiviert,
- die Programmstruktur wurde korrekt angelegt,
- der Abschnitt „Pakete & Bibliotheken installieren“ wurde vollständig gelesen und umgesetzt.
Anschließend wird in den Quellcode-Ordner gewechselt und das Programm gestartet:
cd ~/devel/projects/gpio_led/src ./ledcontrol.py
Bei erfolgreichem Start erscheint die Eingabeaufforderung von ledcontrol.py:
[R]ed [Y]ellow [G]reen [x] Exit >
Verhalten bei Eingaben testen
- LED wählen (R/Y/G)
- nun (1/0) entweder anschalten oder ausschalten
- x beendet das Programm
Wenn das Verhalten wie beschrieben ist, läuft das Programm korrekt und die Einrichtung war erfolgreich.
ModuleNotFoundError: No module named 'RPi.GPIO'
erscheint, wurde der Abschnitt „Pakete & Bibliotheken installieren“ vermutlich nicht vollständig beachtet. Bitte diesen Abschnitt erneut sorgfältig durchgehen.

