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/16 17:47] – [Verwendete Hardware] torsten.roehlprojekt:python_projekt_gpio [2026/02/24 07:40] (aktuell) torsten.roehl
Zeile 6: Zeile 6:
 Ein Raspberry Pi kann LEDs, Sensoren, Taster oder Displays direkt über seine GPIO-Pins ansteuern. Diese Pins sind jedoch empfindlich, da sie direkt mit dem Prozessor verbunden sind. Deshalb muss beim Aufbau der Hardware sorgfältig gearbeitet werden: richtige Spannungen verwenden, Bauteile korrekt anschließen und Änderungen nur im ausgeschalteten Zustand vornehmen. Ziel ist es, einfache Schaltungen sicher aufzubauen und die Grundlagen für spätere Projekte mit Elektronik zu erlernen. Ein Raspberry Pi kann LEDs, Sensoren, Taster oder Displays direkt über seine GPIO-Pins ansteuern. Diese Pins sind jedoch empfindlich, da sie direkt mit dem Prozessor verbunden sind. Deshalb muss beim Aufbau der Hardware sorgfältig gearbeitet werden: richtige Spannungen verwenden, Bauteile korrekt anschließen und Änderungen nur im ausgeschalteten Zustand vornehmen. Ziel ist es, einfache Schaltungen sicher aufzubauen und die Grundlagen für spätere Projekte mit Elektronik zu erlernen.
  
-{{ :raspberry_pi:ampel_led.jpg?350 |}}+{{ :raspberry_pi:ampel_led.jpg?300 |}}
  
 ====== Ü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 65: Zeile 73:
 Dieses LED-Modul besitzt vier Anschlüsse: Dieses LED-Modul besitzt vier Anschlüsse:
  
-Wir verwenden folgende GPIO-Nummern. Falls andere gewählt werden muss der Quellecode entsprechend angepasst werden.+Wir verwenden folgende GPIO-Nummern. Falls andere gewählt werden muss der Quellcode entsprechend angepasst werden.
  
 ^ Modul ^ Raspberry Pi GPIO ^ ^ Modul ^ Raspberry Pi GPIO ^
 | GND   | beliebigen GND  | | GND   | beliebigen GND  |
-| **<color #ed1c24>R</color>**  → rote LED   z.B. **GPIO17** +| **<color #ed1c24>R</color>**  → rote LED   | **GPIO17** 
-| **<color #22b14c>G</color>**  → grüne LED  | z.B. **GPIO27** +| **<color #22b14c>G</color>**  → grüne LED  | **GPIO27** 
-| **<color #fff200>Y</color>**  → gelbe LED  | z.B. **GPIO22**  |+| **<color #fff200>Y</color>**  → gelbe LED  | **GPIO22**  |
  
  
Zeile 94: Zeile 102:
  
 ++++ ++++
- 
- 
- 
- 
- 
- 
- 
- 
-===== Programmstruktur anlegen ===== 
 =====  Environment anlegen ===== =====  Environment anlegen =====
 <WRAP center round box 80%> <WRAP center round box 80%>
Zeile 108: Zeile 107:
  
 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 119: Zeile 118:
 </note> </note>
  
-Wechsle anschließend in die Umgebung, um das Example zu bearbeiten! +<note important> 
-=== Programmstruktur === +**Wechsle in die Environment** 
-Folgende Programmstruktur wird verwendet. +Die Programmierung erfolgt nun immer mit der gewählten Umgebung! 
- +<code> 
-  * ''gpio_led'' – Projektordner im Verzeichnis ''~/devel'' +source ~/devel/projects/course_env/bin/activate
-  * ''gpio_env'' – Python-Environment +
-  ''src''      – Ordner für den Quellcode (engl. source) +
-  ''core''     – Unterordner in ''src'' +
- +
-<code bash+
-gpio_led/ +
-├── gpio_env +
-└── src +
-    ├── core +
-    │   ├── gpio_hw.py +
-    │   ├── logic.py +
-    │   └── __init__.py +
-    └── ledcontrol.py+
 </code> </code>
 +  * Für alle **Python-Projekte** im Kurs verwenden wir diese eine Umgebung: **course_env**!
 +</note>
 +==== Pakete & Bibliotheken installieren ====
  
  
-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> 
  
-=== Pakete & Bibliotheken installieren === 
 Systemweit GPIO-Unterstützung über ''apt'' zur Verfügung stellen: Systemweit GPIO-Unterstützung über ''apt'' zur Verfügung stellen:
  
Zeile 160: Zeile 136:
 </code> </code>
  
-Jetzt die **ENV** aktivieren und ''RPi.GPIO'' installieren:+Jetzt die **ENV** aktivieren (falls noch nicht geschehen) und dann erst ''RPi.GPIO'' installieren:
  
 <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 246: 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.1771264033.txt.gz · Zuletzt geändert: von torsten.roehl