Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Projekt: LED mit Python
Hauptprogramm
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.
Programmstruktur
Folgende Programmstruktur wird verwendet.
gpio_led– Projektordner im Verzeichnis~/devel/projects/course_env– Python-Environment im Verzeichnis~/devel/projects/src– Ordner für den Quellcode (engl. source)core– Unterordner insrc
gpio_led/
├──
└── src
├── core
│ ├── hardware.py
│ ├── logic.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:
touch __init__.py
Projekt: LED mit Python
Hardware
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.
gpio_hw.py
- gpio_hw.py
import RPi.GPIO as GPIO PIN_Y = 17 GPIO.setmode(GPIO.BCM) GPIO.setup(PIN_Y, GPIO.OUT) def setLED(pin,value) if value == 1: GPIO.output(pin, GPIO.HIGH) else GPIO.output(pin, GPIO.LOW) def on(): GPIO.output(PIN, GPIO.HIGH) def off(): GPIO.output(PIN, GPIO.LOW) def status(): return GPIO.input(PIN) def cleanup(): GPIO.cleanup()
logic.py
- logic.py
from core import gpio_hw def turn_on(): gpio_hw.on() return "on" def turn_off(): gpio_hw.off() return "off" def get_status(): return "on" if gpio_hw.status() else "off"
ledcontrol.py
- ledcontrol.py
#!/usr/bin/env python3 from core import logic from core import gpio_hw def main(): print("GPIO CLI gestartet (CTRL+C beendet)") try: while True: cmd = input("on / off / status > ").strip() if cmd == "on": print(logic.turn_on()) elif cmd == "off": print(logic.turn_off()) elif cmd == "status": print(logic.get_status()) except KeyboardInterrupt: pass finally: gpio_hw.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/gpio_led/src ./ledcontrol.py
Bei erfolgreichem Start erscheint die Eingabeaufforderung von ledcontrol.py:
on / off / status >
Verhalten bei Eingaben testen
- on → die LED wird eingeschaltet und „on“ ausgegeben.
- off → die LED wird ausgeschaltet und „off“ ausgegeben.
- status → der aktuelle Zustand wird angezeigt.
- unbekannte Eingabe → das Programm bleibt aktiv und fordert erneut zur Eingabe auf.
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.

