projekt:python_projekt_gpio
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| projekt:python_projekt_gpio [2026/02/18 08:24] – [Environment anlegen] torsten.roehl | projekt:python_projekt_gpio [2026/02/24 07:40] (aktuell) – torsten.roehl | ||
|---|---|---|---|
| Zeile 10: | Zeile 10: | ||
| ====== Überblick ====== | ====== Überblick ====== | ||
| * Hardware ansteuern | * Hardware ansteuern | ||
| - | * Programmstruktur | + | * Environment |
| - | * Projekt: LED mit Python | + | * Minimalprogramm |
| - | * Projekt: | + | * [[project: |
| ---- | ---- | ||
| Zeile 51: | Zeile 52: | ||
| | Raspberry Pi Layout und Orientierung. | | | Raspberry Pi Layout und Orientierung. | | ||
| |{{ : | |{{ : | ||
| - | |< | + | |< |
| - | * **GND** | + | * <color # |
| - | * <color # | + | * Masse: |
| - | * <color # | + | |
| + | * <color # | ||
| + | * Versorgungsspannung: | ||
| + | * Masse: **GND** | ||
| + | | ||
| - | In diesem Kurs werden die oben aufgelisteten Pins verwendet! | ||
| </ | </ | ||
| + | |{{ : | ||
| + | |Adapterplatine zur Nutzung auf einem Steckbrett.| | ||
| + | |{{ : | ||
| + | |Alle Bauteile LED-Ampel und Temperatursensor die im Kurs verwendet werden sind angeschlossen| | ||
| ==== Verwendete Hardware | ==== Verwendete Hardware | ||
| Zeile 94: | Zeile 102: | ||
| ++++ | ++++ | ||
| + | ===== Environment anlegen ===== | ||
| + | <WRAP center round box 80%> | ||
| + | **Aufgabe: Anlegen einer Python-Environment** | ||
| + | Lege eine Umgebung | ||
| + | * '' | ||
| + | Hierfür muss der Ordner '' | ||
| + | </ | ||
| - | ===== Minimal Programm ===== | + | <note tip> |
| - | Dieses Programm schaltet eine einzelne LED am **Raspberry Pi**. | + | Das Anlegen |
| - | Pin und Befehl werden im **ADJUST AREA** angepasst. | + | [[python_python-umgebung_env_einrichten_vorbereitungen_fuer_projekte_schaffen|Python ENV]] |
| - | '' | + | ausführlich beschrieben. |
| + | </ | ||
| - | + | <note important> | |
| - | < | + | **Wechsle in die Environment** |
| - | + | Die Programmierung erfolgt nun immer mit der gewählten Umgebung! | |
| - | #!/usr/bin/env python3 | + | < |
| - | + | source ~/devel/projects/course_env/bin/activate | |
| - | import RPi.GPIO as GPIO | + | |
| - | + | ||
| - | PIN = 17 # PIN wählen | + | |
| - | VALUE = GPIO.HIGH | + | |
| - | + | ||
| - | def main(): | + | |
| - | + | ||
| - | GPIO.setmode(GPIO.BCM) | + | |
| - | GPIO.setup(PIN, | + | |
| - | + | ||
| - | GPIO.output(PIN, | + | |
| - | + | ||
| - | state = GPIO.input(PIN) | + | |
| - | print(" | + | |
| - | + | ||
| - | GPIO.cleanup() | + | |
| - | + | ||
| - | if __name__ == " | + | |
| - | main() | + | |
| </ | </ | ||
| - | + | * Für alle **Python-Projekte** im Kurs verwenden wir diese eine Umgebung: **course_env**! | |
| - | + | ||
| - | ===== Hauptprogramm ===== | + | |
| - | + | ||
| - | 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. | + | |
| - | ==== Programmstruktur ==== | + | |
| - | 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> | + | |
| - | touch __init__.py | + | |
| - | </ | + | |
| - | + | ||
| - | <note tip>**Bevor weitergearbeitet werden kann, sollte die Programmstruktur überprüft werden.** | + | |
| - | {{ : | + | |
| </ | </ | ||
| - | |||
| ==== Pakete & Bibliotheken installieren ==== | ==== Pakete & Bibliotheken installieren ==== | ||
| Zeile 181: | Zeile 139: | ||
| <code bash> | <code bash> | ||
| - | source ~/devel/gpio_led/gpio_env/ | + | source ~/devel/projects/course_env/ |
| pip install RPi.GPIO | pip install RPi.GPIO | ||
| </ | </ | ||
| + | ===== Minimal Programm ===== | ||
| + | Dieses Programm ('' | ||
| + | Pin und Befehl werden im **ADJUST AREA** angepasst. | ||
| + | '' | ||
| - | ===== Projekt: LED mit Python ===== | ||
| - | ==== Hardware ==== | ||
| - | ==== Quellcode (Sourcecode) ==== | ||
| - | Der **Sourcecode** besteht aus drei Dateien: das eigentliche Programm **%%ledcontrol.py%%** sowie die Dateien im Hintergrund (im Verzeichnis **%%core%%**), | ||
| - | === gpio_hw.py === | ||
| - | <code python | + | <code python |
| - | import RPi.GPIO as GPIO | + | |
| - | PIN_Y = 17 | + | # |
| - | GPIO.setmode(GPIO.BCM) | + | import RPi.GPIO as GPIO |
| - | GPIO.setup(PIN_Y, | + | |
| - | + | ||
| - | def setLED(pin, | + | |
| - | if value == 1: | + | |
| - | | + | |
| - | else | + | |
| - | | + | |
| - | + | ||
| - | + | ||
| - | def on(): | + | |
| - | GPIO.output(PIN, | + | |
| - | + | ||
| - | def off(): | + | |
| - | GPIO.output(PIN, | + | |
| - | + | ||
| - | def status(): | + | |
| - | return GPIO.input(PIN) | + | |
| - | + | ||
| - | def cleanup(): | + | |
| - | GPIO.cleanup() | + | |
| - | </ | + | |
| - | + | ||
| - | === logic.py === | + | |
| - | + | ||
| - | <code python logic.py> | + | |
| - | from core import gpio_hw | + | |
| - | + | ||
| - | def turn_on(): | + | |
| - | gpio_hw.on() | + | |
| - | return " | + | |
| - | + | ||
| - | def turn_off(): | + | |
| - | gpio_hw.off() | + | |
| - | return " | + | |
| - | + | ||
| - | def get_status(): | + | |
| - | return " | + | |
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | === ledcontrol.py === | + | |
| - | + | ||
| - | <code python ledcontrol.py> | + | |
| - | # | + | |
| - | from core import logic | + | # START ADJUST AREA |
| - | from core import gpio_hw | + | PIN = 17 # PIN wählen |
| + | VALUE = GPIO.HIGH | ||
| + | # END ADJUST AREA | ||
| def main(): | def main(): | ||
| - | print(" | ||
| - | | + | |
| - | while True: | + | |
| - | cmd = input("on / off / status > ").strip() | + | GPIO.setup(PIN, GPIO.OUT) # Als Ausgabe PIN festlegen |
| - | if cmd == " | + | GPIO.output(PIN, VALUE) # Output setzen! |
| - | print(logic.turn_on()) | + | |
| - | elif cmd == " | + | |
| - | print(logic.turn_off()) | + | |
| - | elif cmd == " | + | |
| - | print(logic.get_status()) | + | |
| - | | + | |
| - | pass | + | |
| - | | + | |
| - | gpio_hw.cleanup() | + | |
| if __name__ == " | if __name__ == " | ||
| Zeile 271: | Zeile 177: | ||
| </ | </ | ||
| - | + | === Programm ausführen | |
| - | ==== 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> | <code bash> | ||
| - | cd ~/ | + | chmod 775 led_simple.py |
| - | ./ledcontrol.py | + | ./led_simple.py # Script ausführen! |
| </ | </ | ||
| + | Hierfür muss das Programm ausführbar gemacht werden ('' | ||
| - | Bei erfolgreichem Start erscheint die Eingabeaufforderung von '' | + | ===== Projekt: LED mit Python |
| - | + | * [[project: | |
| - | < | + | |
| - | + | ||
| - | === Verhalten bei Eingaben testen | + | |
| - | + | ||
| - | * **on** → die LED wird eingeschaltet und „on“ ausgegeben. | + | |
| - | * **off** → die LED wird ausgeschaltet und „off“ ausgegeben. | + | |
| - | * **status** → der aktuelle Zustand wird angezeigt. | + | |
| - | * unbekannte Eingabe → das Programm bleibt aktiv und fordert erneut zur Eingabe auf. | + | |
| - | + | ||
| - | 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. | + | |
| - | </ | + | |
| - | + | ||
projekt/python_projekt_gpio.1771403079.txt.gz · Zuletzt geändert: von torsten.roehl
