Benutzer-Werkzeuge

Webseiten-Werkzeuge


project:python_led

Dies ist eine alte Version des Dokuments!


Projekt: LED mit Python

☚ zurück

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

Aktiviere die Python-Environment

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 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

Der Aufbau und die verwendete Hardware wurden im vorherigen GPIO-Projekt beschrieben. Im Kurs wird die Hardware als Modul-Breakout zur Verfügung gestellt, sodass die Verdrahtung auf ein Minimum reduziert wird und der Raspberry Pi keinen Schaden nehmen kann.

Quellcode (Sourcecode)

Der Sourcecode besteht aus zwei 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()       # optional
 
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.1771442947.txt.gz · Zuletzt geändert: von torsten.roehl