project:python_led
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| project:python_led [2026/02/18 09:27] – torsten.roehl | project:python_led [2026/02/20 09:56] (aktuell) – torsten.roehl | ||
|---|---|---|---|
| Zeile 2: | Zeile 2: | ||
| [[projekt: | [[projekt: | ||
| + | |||
| + | // | ||
| + | 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! | ||
| + | < | ||
| + | source ~/ | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | 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. | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | <code bash> | ||
| + | gpio_led/ | ||
| + | └── src | ||
| + | ├── core | ||
| + | │ | ||
| + | │ | ||
| + | └── ledcontrol.py | ||
| + | </ | ||
| + | |||
| + | |||
| + | Lege alle Verzeichnisse so an, wie oben dargestellt. | ||
| + | Alle Dateien – bis auf '' | ||
| + | |||
| + | Die '' | ||
| + | |||
| + | <code bash> | ||
| + | cd ~/ | ||
| + | touch __init__.py | ||
| + | </ | ||
| + | |||
| + | <note tip> | ||
| + | {{ : | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Hardware ===== | ||
| + | |||
| + | < | ||
| + | Der Aufbau und die verwendete Hardware wurden im vorherigen [[projekt: | ||
| + | </ | ||
| + | ===== Quellcode (Sourcecode) ===== | ||
| + | Der **Sourcecode** besteht aus zwei Dateien: das eigentliche Programm **%%ledcontrol.py%%** sowie die Dateien im Hintergrund (im Verzeichnis **%%core%%**), | ||
| + | === 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.setup(PIN_Y, | ||
| + | GPIO.setup(PIN_G, | ||
| + | |||
| + | |||
| + | def setLED(pin, value): | ||
| + | if value == 1: | ||
| + | GPIO.output(pin, | ||
| + | else: | ||
| + | GPIO.output(pin, | ||
| + | |||
| + | def setYellowLED(value): | ||
| + | setLED(PIN_Y, | ||
| + | |||
| + | def setRedLED(value): | ||
| + | setLED(PIN_R, | ||
| + | |||
| + | def setGreenLED(value): | ||
| + | setLED(PIN_G, | ||
| + | |||
| + | 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 === | ||
| + | |||
| + | <code python ledcontrol.py> | ||
| + | # | ||
| + | |||
| + | from core import hardware | ||
| + | |||
| + | def main(): | ||
| + | print(" | ||
| + | |||
| + | try: | ||
| + | while True: | ||
| + | cmd = input(" | ||
| + | |||
| + | if cmd in (" | ||
| + | mode = input(" | ||
| + | value = 1 if mode == " | ||
| + | |||
| + | if cmd == " | ||
| + | hardware.setRedLED(value) | ||
| + | elif cmd == " | ||
| + | hardware.setYellowLED(value) | ||
| + | elif cmd == " | ||
| + | hardware.setGreenLED(value) | ||
| + | |||
| + | elif cmd == " | ||
| + | break | ||
| + | |||
| + | except KeyboardInterrupt: | ||
| + | pass | ||
| + | finally: | ||
| + | print(" | ||
| + | hardware.cleanup() | ||
| + | |||
| + | if __name__ == " | ||
| + | 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: | ||
| + | |||
| + | <code bash> | ||
| + | cd ~/ | ||
| + | ./ | ||
| + | </ | ||
| + | |||
| + | Bei erfolgreichem Start erscheint die Eingabeaufforderung von '' | ||
| + | |||
| + | < | ||
| + | |||
| + | === 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 # | ||
| + | |||
| + | erscheint, wurde der Abschnitt **„Pakete & Bibliotheken installieren“** vermutlich nicht vollständig beachtet. Bitte diesen Abschnitt erneut sorgfältig durchgehen. | ||
| + | </ | ||
| + | |||
| + | |||
project/python_led.1771406834.txt.gz · Zuletzt geändert: von torsten.roehl
