Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekt:python_projekt_gpio

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
projekt:python_projekt_gpio [2026/02/17 15:35] – [Programmstruktur] torsten.roehlprojekt:python_projekt_gpio [2026/02/24 07:40] (aktuell) torsten.roehl
Zeile 10: Zeile 10:
 ====== Überblick ====== ====== Überblick ======
   * Hardware ansteuern   * Hardware ansteuern
-  * Programmstruktur anlegen +  * Environment anlegen 
-  * Projekt: LED mit Python  +  * Minimalprogramm 
-  * Projekt: Temperatursensor mit Python +  * [[project:python_led| Projekt: LED mit Python ]] 
  
 ---- ----
Zeile 51: Zeile 52:
 | Raspberry Pi Layout und Orientierung. | | Raspberry Pi Layout und Orientierung. |
 |{{ :raspberry_pi:raspi-layout4.png?300 |}}| |{{ :raspberry_pi:raspi-layout4.png?300 |}}|
-|<WRAP>Nur die **<color #22b14c>GPIO</color>**, **GND** und **<color #ed1c24>VCC</color>** werden benutzt. +|<WRAP>Nur die **<color #22b14c>GPIO</color>**, **GND** und **<color #ed1c24>VCC (3,3V)</color>** werden benutzt. 
-  * **GND** +  * <color #7092be>LED-Ampel</color>: 
-  * <color #ed1c24>**VCC**</color> +          *  Masse: **GND** 
-  * <color #22b14c>**GPIO 17, GPIO 27, GPIO 22, GPIO 23, GPIO 24**</color>+           R/Y/G: <color #22b14c>**GPIO 17, GPIO 27, GPIO 22**</color> 
 +  * <color #7092be>Temperatursensor</color> 
 +      * Versorgungsspannung: <color #ed1c24>**VCC 3,3**</color> 
 +      * Masse: **GND** 
 +      Data: <color #22b14c>**GPIO 4**</color>
  
-In diesem Kurs werden die oben aufgelisteten Pins verwendet! 
 </WRAP>| </WRAP>|
 +|{{ :raspberry_pi:pi_adapter_1.jpg?400 |}}|
 +|Adapterplatine zur Nutzung auf einem Steckbrett.|
 +|{{ :raspberry_pi:pi_adapter_2.png?400 |}}|
 +|Alle Bauteile LED-Ampel und Temperatursensor die im Kurs verwendet werden sind angeschlossen|
  
 ==== Verwendete Hardware  ====  ==== Verwendete Hardware  ==== 
Zeile 94: Zeile 102:
  
 ++++ ++++
- +=====  Environment anlegen =====
- +
- +
- +
- +
- +
- +
- +
-===== Programmstruktur anlegen ===== +
- +
-==== Programmstruktur ==== +
-Folgende Programmstruktur wird verwendet. +
- +
-  * ''gpio_led'' – Projektordner im Verzeichnis ''~/devel/projects/'' +
-  * ''gpio_led_env'' – Python-Environment +
-  * ''src''      – Ordner für den Quellcode (engl. source) +
-  * ''core''     – Unterordner in ''src'' +
- +
-<code bash> +
-gpio_led/ +
-├── gpio_led_env +
-└── src +
-    ├── core +
-    │   ├── hardware.py +
-    │   ├── logic.py +
-    │   └── __init__.py +
-    └── ledcontrol.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> +
-touch __init__.py +
-</code> +
- +
-<note tip>**Bevor weitergearbeitet werden kann, sollte die Programmstruktur überprüft werden.** +
-{{ :raspberry_pi:led_structure.png?600 |}} +
-</note> +
-====  Environment anlegen ====+
 <WRAP center round box 80%> <WRAP center round box 80%>
 **Aufgabe: Anlegen einer Python-Environment** **Aufgabe: Anlegen einer Python-Environment**
  
 Lege eine Umgebung Lege eine Umgebung
-  * ''~/devel/projects/refexio_advanced/refexio_advanced_env'' an.  +  * ''~/devel/projects/course_env'' an.  
-Hierfür muss der Ordner ''~/devel/projects/refexio_advanced'' bereits vorhanden sein.+Hierfür muss der Ordner ''~/devel/projects'' bereits vorhanden sein.
  
 </WRAP> </WRAP>
Zeile 156: Zeile 122:
 Die Programmierung erfolgt nun immer mit der gewählten Umgebung! Die Programmierung erfolgt nun immer mit der gewählten Umgebung!
 <code> <code>
-source ~/devel/projects/gpio_led/gpio_env/bin/activate+source ~/devel/projects/course_env/bin/activate
 </code> </code>
 +  * Für alle **Python-Projekte** im Kurs verwenden wir diese eine Umgebung: **course_env**!
 </note> </note>
 ==== Pakete & Bibliotheken installieren ==== ==== Pakete & Bibliotheken installieren ====
Zeile 173: Zeile 139:
  
 <code bash> <code bash>
-source ~/devel/gpio_led/gpio_env/bin/activate+source ~/devel/projects/course_env/bin/activate
 pip install RPi.GPIO pip install RPi.GPIO
 </code> </code>
  
 +===== Minimal Programm =====
 +Dieses Programm (''led_simple.py'') schaltet eine einzelne LED am **Raspberry Pi**.
 +Pin und Befehl werden im **ADJUST AREA** angepasst.
 +''GPIO.cleanup()'' setzt am Ende alle verwendeten GPIO-Pins wieder zurück.
  
-===== 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%%**), 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. 
-=== gpio_hw.py === 
  
-<code python gpio_hw.py> +<code python  led_simple.py>
-import RPi.GPIO as GPIO+
  
-PIN = 17+#!/usr/bin/env python3
  
-GPIO.setmode(GPIO.BCM) +import RPi.GPIO as GPIO
-GPIO.setup(PIN, GPIO.OUT)+
  
-def on(): +# START ADJUST AREA 
-    GPIO.output(PINGPIO.HIGH+PIN = 17                       # PIN wählen 
- +VALUE = GPIO.HIGH              # HIGH / LOW  (anschalten/ausschalten
-def off(): +END ADJUST AREA
-    GPIO.output(PIN, GPIO.LOW+
- +
-def status(): +
-    return GPIO.input(PIN) +
- +
-def cleanup(): +
-    GPIO.cleanup() +
-</code> +
- +
-=== logic.py === +
- +
-<code python logic.py> +
-from core import gpio_hw +
- +
-def turn_on()+
-    gpio_hw.on() +
-    return "on" +
- +
-def turn_off(): +
-    gpio_hw.off() +
-    return "off" +
- +
-def get_status(): +
-    return "on" if gpio_hw.status() else "off" +
-</code> +
- +
- +
- +
-=== ledcontrol.py === +
- +
-<code python ledcontrol.py> +
-#!/usr/bin/env python3 +
- +
-from core import logic +
-from core import gpio_hw+
  
 def main(): def main():
-    print("GPIO CLI gestartet (CTRL+C beendet)") 
  
-    try: +    GPIO.setmode(GPIO.BCM)     # Broadcom-GPIO-Nummern 
-        while True: +    GPIO.setwarnings(False   # Warning OFF 
-            cmd = input("on / off / status > ").strip()+    GPIO.setup(PIN, GPIO.OUT # Als Ausgabe PIN festlegen
  
-            if cmd == "on": +    GPIO.output(PIN, VALUE   # Output setzen!
-                print(logic.turn_on()+
-            elif cmd == "off": +
-                print(logic.turn_off()) +
-            elif cmd == "status": +
-                print(logic.get_status())+
  
-    except KeyboardInterrupt: +    state = GPIO.input(PIN) 
-        pass+    print("Status: ", bool(state))
  
-    finally: +    # GPIO.cleanup()            # Pin freigeben (LOW INPUT)
-        gpio_hw.cleanup()+
  
 if __name__ == "__main__": if __name__ == "__main__":
Zeile 256: Zeile 177:
 </code> </code>
  
- +=== 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 ~/devel/gpio_led/src +chmod 775 led_simple.py  # einmalig ausführbar machen! 
-./ledcontrol.py+./led_simple.py          # Script ausführen!
 </code> </code>
 +Hierfür muss das Programm ausführbar gemacht werden (''chmod'') und man sich im Verzeichnis des auszuführenden Programms befinden.
  
-Bei erfolgreichem Start erscheint die Eingabeaufforderung von ''ledcontrol.py'': +===== ProjektLED mit Python ===== 
- +  * [[project:python_led| Projekt: LED mit Python ]]
-<code>on / off / status ></code> +
- +
-=== 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 #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> +
- +
  
projekt/python_projekt_gpio.1771342508.txt.gz · Zuletzt geändert: von torsten.roehl