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/09 10:34] – [Programm testen] torsten.roehlprojekt:python_projekt_gpio [2026/09/16 07:06] (aktuell) – [Hardware ansteuern] 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?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 50: 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|
  
  
  
-===== Programmstruktur anlegen =====+<note important> Im Kurs wird nicht mit einem Steckbrett gearbeitet, sondern mit einem eigens entwickelten kleinen Modul.
  
-=== Programmstruktur === +Diese Platine ermöglicht es, auch ohne Hardwarekenntnisse sicher zu arbeiten und sich dadurch schnell auf die Software zu konzentrieren. 
-Folgende Programmstruktur wird verwendet.+{{ :raspberry_pi:board_3d.png?400 |}} 
 +☛ http://wiki.softure.de/doku.php?id=0x0020 
 +</note> 
 +==== Verwendete Hardware  ==== 
  
-  * ''gpio_led'' – Projektordner im Verzeichnis ''~/devel'' +  * Hardware-Anbindung LED-Ampel-Modul (R/G/Y + GND)
-  * ''gpio_env'' – Python-Environment +
-  * ''src''      – Ordner für den Quellcode (engl. source) +
-  * ''core''     – Unterordner in ''src''+
  
-<code bash> +Dieses LED-Modul besitzt vier Anschlüsse:
-gpio_led/ +
-├── gpio_env +
-└── src +
-    ├── core +
-    │   ├── gpio_hw.py +
-    │   ├── logic.py +
-    │   └── __init__.py +
-    └── ledcontrol.py +
-</code>+
  
 +Wir verwenden folgende GPIO-Nummern. Falls andere gewählt werden muss der Quellcode entsprechend angepasst werden.
  
-Lege alle Verzeichnisse so an, wie oben dargestellt.   +^ Modul ^ Raspberry Pi GPIO ^ 
-Alle Dateien – bis auf ''%%__init__.py%%'' – kommen später dazu.+| GND   | beliebigen GND  | 
 +| **<color #ed1c24>R</color>**  → rote LED   | **GPIO17**  | 
 +| **<color #22b14c>G</color>**  → grüne LED  | **GPIO27**  | 
 +| **<color #fff200>Y</color>**  → gelbe LED  | **GPIO22**  |
  
-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 === +++++ Technisches Prinzip |
-Systemweit GPIO-Unterstützung über ''apt'' zur Verfügung stellen:+
  
-<code bash> +Auf dem Modul sind bereits Vorwiderstände (Kennzeichnung „331“ = 330 Ohm) verbaut.   
-sudo apt install python3-rpi.gpio +Es ist daher **kein zusätzlicher Widerstand erforderlich**.
-</code>+
  
-Jetzt die **ENV** aktivieren und ''RPi.GPIO'' installieren:+  * **ON**  GPIO-Pin wird auf **HIGH (3,3 V)** gesetzt, um die jeweilige LED einzuschalten 
 +  * **OFF** GPIO-Pin wird auf **LOW  (0)** gesetzt, um die jeweilige LED auszuschalten.  
  
-<code bash> +<note>
-source ~/devel/gpio_led/gpio_env/bin/activate +
-pip install RPi.GPIO +
-</code>+
  
 +Strom bei 3,3 V:
  
-===== Projekt: LED mit Python ===== +  (3,3 V − ca. 2,0 V LED) / 330 Ω ≈ 4 mA 
-==== Hardware ==== +   
-==== Quellcode (Sourcecode) ==== +Dies ist für den Raspberry Pi unkritisch. 
-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. +</note>
-=== gpio_hw.py ===+
  
-<code python gpio_hw.py> +++++ 
-import RPi.GPIO as GPIO+=====  Environment anlegen ===== 
 +<WRAP center round box 80%> 
 +**Aufgabe: Anlegen einer Python-Environment**
  
-PIN = 17+Lege eine Umgebung 
 +  * ''~/devel/projects/course_env'' an.  
 +Hierfür muss der Ordner ''~/devel/projects'' bereits vorhanden sein.
  
-GPIO.setmode(GPIO.BCM) +</WRAP>
-GPIO.setup(PIN, GPIO.OUT)+
  
-def on(): +<note tip> 
-    GPIO.output(PIN, GPIO.HIGH)+Das Anlegen und Managen einer Umgebung ist hier 
 +[[python_python-umgebung_env_einrichten_vorbereitungen_fuer_projekte_schaffen|Python ENV]] 
 +ausführlich beschrieben. 
 +</note>
  
-def off(): +<note important> 
-    GPIO.output(PIN, GPIO.LOW)+**Wechsle in die Environment** 
 +Die Programmierung erfolgt nun immer mit der gewählten Umgebung! 
 +<code> 
 +source ~/devel/projects/course_env/bin/activate 
 +</code> 
 +  * Für alle **Python-Projekte** im Kurs verwenden wir diese eine Umgebung: **course_env**! 
 +</note> 
 +==== Pakete & Bibliotheken installieren ====
  
-def status(): 
-    return GPIO.input(PIN) 
  
-def cleanup(): 
-    GPIO.cleanup() 
-</code> 
  
-=== logic.py ===+Systemweit GPIO-Unterstützung über ''apt'' zur Verfügung stellen:
  
-<code python logic.py> +<code bash> 
-from core import gpio_hw+sudo apt install python3-rpi.gpio 
 +</code>
  
-def turn_on(): +Jetzt die **ENV** aktivieren (falls noch nicht geschehen) und dann erst ''RPi.GPIO'' installieren:
-    gpio_hw.on() +
-    return "on"+
  
-def turn_off(): +<code bash> 
-    gpio_hw.off() +source ~/devel/projects/course_env/bin/activate 
-    return "off" +pip install RPi.GPIO
- +
-def get_status(): +
-    return "on" if gpio_hw.status() else "off"+
 </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.
  
  
-=== ledcontrol.py ===+<code python  led_simple.py>
  
-<code python ledcontrol.py> 
 #!/usr/bin/env python3 #!/usr/bin/env python3
  
-from core import logic +import RPi.GPIO as GPIO 
-from core import gpio_hw+ 
 +# START ADJUST AREA 
 +PIN = 17                       # PIN wählen 
 +VALUE = GPIO.HIGH              # HIGH / LOW  (anschalten/ausschalten) 
 +# END ADJUST AREA
  
 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 188: Zeile 185:
 </code> </code>
  
-==== Testen des Programms ==== +=== Programm ausführen ===
- +
- +
- +
-===== Programm testen ===== +
- +
-Bevor mit dem Projekt weitergearbeitet wird, testen wir, ob das LED-Programm korrekt gestartet werden kann und wie es sich bei Eingaben verhält. +
- +
-Stelle sicher, dass: +
- +
-  * die Python-Environment aktiviert ist, +
-  * die Programmstruktur korrekt angelegt wurde, +
-  * der Abschnitt **„Pakete & Bibliotheken installieren“** berücksichtigt wurde. +
- +
-Wechsle in den Quellcode-Ordner: +
 <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.
  
-Du solltest nun die Eingabeaufforderung sehen: +===== Projekt: LED mit Python ===== 
- +  * [[project:python_led| Projekt: LED mit Python ]]
-on / off / status > +
- +
-=== Verhalten bei Eingaben testen === +
- +
-  * **on** → LED wird eingeschaltet und „on“ ausgegeben. +
-  * **off** → LED wird ausgeschaltet und „off“ ausgegeben. +
-  * **status** → aktueller Zustand wird angezeigt. +
-  * unbekannte Eingabe → Programm bleibt aktiv und fordert erneut zur Eingabe auf. +
- +
-Wenn das Verhalten wie beschrieben ist, läuft das Programm korrekt und alles wurde richtig gemacht. +
- +
- +
-<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.1770633272.txt.gz · Zuletzt geändert: von torsten.roehl