Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Projekt: LED mit Python
In diesem Projekt wird das bisherige LED-Programm neu strukturiert und in mehrere Dateien aufgeteilt. Dabei wird die Hardware-Ansteuerung von der eigentlichen Programmlogik getrennt. Ziel ist es, mehrere LEDs gezielt und übersichtlich über die Konsole steuern zu können.
Programmstruktur
Die Programmierung erfolgt nun immer mit der gewählten Umgebung!
source ~/devel/projects/course_env/bin/activate
Die Aufteilung in mehrere Dateien sorgt für eine klare Trennung zwischen Programmlogik und Hardware-Ansteuerung. Dadurch bleibt der Code übersichtlich und besser nachvollziehbar.
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.

