Benutzer-Werkzeuge

Webseiten-Werkzeuge


project:python_led

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
project:python_led [2026/02/18 08:40] – angelegt torsten.roehlproject:python_led [2026/02/23 11:55] (aktuell) torsten.roehl
Zeile 1: Zeile 1:
-====== Überschrift ======+====== Projekt: LED mit Python  ====== 
 + 
 +[[projekt:python_projekt_gpio| ☚ 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 ===== 
 + 
 +<note important> 
 +**Aktiviere die Python-Environment** 
 + 
 +Die Programmierung erfolgt nun immer mit der gewählten Umgebung! 
 +<code> 
 +source ~/devel/projects/course_env/bin/activate 
 +</code> 
 + 
 +</note> 
 + 
 +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. 
 + 
 +  * ''course_led_advanced'' – Projektordner im Verzeichnis ''~/devel/projects/'' 
 +      * ''src''      – Ordner für den Quellcode (engl. source) 
 +          * ''core''     – Unterordner in ''src'' 
 + 
 +<code bash> 
 +course_led_advanced/ 
 +└── src 
 +    ├── core 
 +    │   ├── hardware.py     
 +    │   └── __init__.py 
 +    └── led_advanced.py 
 +</code> 
 + 
 + 
 +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: 
 + 
 +<code bash> 
 +cd ~/devel/projects/course_led_advanced/src/core 
 +touch __init__.py 
 +</code> 
 + 
 +<note tip>**Bevor weitergearbeitet werden kann, sollte die Programmstruktur überprüft werden.** 
 +{{ :raspberry_pi:led_structure.png?600 |}} 
 +</note> 
 + 
 + 
 + 
 + 
 +===== Hardware ===== 
 + 
 +<note> 
 +Der Aufbau und die verwendete Hardware wurden im vorherigen [[projekt:python_projekt_gpio|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. 
 +</note> 
 +===== Quellcode (Sourcecode) ===== 
 +Der **Sourcecode** besteht aus zwei Dateien: das eigentliche Programm **%%led_advanced.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 === 
 + 
 +<code python hardware.py> 
 +import RPi.GPIO as GPIO 
 + 
 +# ----------------------------- 
 +# API-Funktionen GPIO LED Ampel 
 +# ----------------------------- 
 + 
 +# 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() 
 + 
 +</code> 
 + 
 + 
 +=== led_advanced.py === 
 + 
 +<code python led_advanced.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() 
 +                  
 +</code> 
 + 
 + 
 +==== 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: 
 + 
 +<code bash> 
 +cd ~/devel/projects/course_led_advanced/src 
 +./led_advanced.py 
 +</code> 
 + 
 +Bei erfolgreichem Start erscheint die Eingabeaufforderung von ''led_advanced.py'': 
 + 
 +<code>[R]ed  [Y]ellow  [G]reen  [x] Exit > </code> 
 + 
 +=== 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. 
 + 
 + 
 +<note tip> 
 +Falls beim Start des Programms die Fehlermeldung 
 + 
 +<color #ff7f27>ModuleNotFoundError: No module named 'RPi.GPIO'</color> 
 + 
 +erscheint, wurde der Abschnitt **„Pakete & Bibliotheken installieren“** vermutlich nicht vollständig beachtet. Bitte diesen Abschnitt erneut sorgfältig durchgehen. 
 +</note>
  
  
  
-[[python| ☚ zurück]] 
project/python_led.1771404015.txt.gz · Zuletzt geändert: von torsten.roehl