Benutzer-Werkzeuge

Webseiten-Werkzeuge


project:python_led

Dies ist eine alte Version des Dokuments!


Projekt: LED mit Python

Programmstruktur

Aktiviere die Python-Environment

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 in src
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
Bevor weitergearbeitet werden kann, sollte die Programmstruktur überprüft werden.

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.

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

  1. LED wählen (R/Y/G)
  2. nun (1/0) entweder anschalten oder ausschalten
  3. x beendet das Programm

Wenn das Verhalten wie beschrieben ist, läuft das Programm korrekt und die Einrichtung war erfolgreich.

Falls beim Start des Programms die Fehlermeldung

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.

project/python_led.1771435185.txt.gz · Zuletzt geändert: von torsten.roehl