Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekt:python_projekt_gpio

Dies ist eine alte Version des Dokuments!


GPIO Projekte

☚ zurück

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.

Überblick

  • Hardware ansteuern
  • Programmstruktur anlegen
  • Projekt: LED mit Python
  • Projekt: Temperatursensor mit Python

Details

Hardware ansteuern

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.

ACHTUNG: Der Raspberry Pi kann Schaden nehmen!

Anfänger sollten sehr vorsichtig sein! Tatsächlich ist ein Arduino für erste Experimente (wegen des geringeren Preises) häufig die bessere Wahl.

Bitte alle Anweisungen beachten und im Zweifel den Tutor fragen.

Gerade Anfängern passiert es leider immer wieder, dass sie versehentlich genau das Falsche tun.

Hardware-Regeln
  1. Hardware-Anpassungen nicht durchführen, während der Raspberry Pi mit Strom versorgt ist.
  2. Vor der Inbetriebnahme die Hardware vom Tutor kontrollieren lassen.
  3. Niemals GPIO-Pins direkt mit 5 V verbinden.
  4. Keine Kurzschlüsse zwischen Pins verursachen (also keine zwei Pins direkt mit einem Kabel verbinden).

Beim Raspberry Pi gelten für die GPIO-Pins grob folgende elektrische Grenzen:

  • max. ca. 16 mA pro GPIO-Pin
  • max. ca. 50 mA insgesamt über alle GPIOs zusammen
Raspberry Pi Layout und Orientierung.

Nur die GPIO, GND und VCC werden benutzt.

  • GND
  • VCC
  • GPIO 17, GPIO 27, GPIO 22, GPIO 23, GPIO 24

In diesem Kurs werden die oben aufgelisteten Pins verwendet!

Verwendete Hardware

  • Hardware-Anbindung LED-Ampel-Modul (R/G/Y + GND)

Dieses LED-Modul besitzt vier Anschlüsse:

Wir verwenden folgende GPIO-Nummern. Falls andere gewählt werden muss der Quellcode entsprechend angepasst werden.

Modul Raspberry Pi GPIO
GND beliebigen GND
R → rote LED GPIO17
G → grüne LED GPIO27
Y → gelbe LED GPIO22

Technisches Prinzip

Minimal Programm

#!/usr/bin/env python3
# LED Steuerung (Anfänger-Version mit main)
 
import RPi.GPIO as GPIO
 
PIN = 17
command = "status"   # "on" | "off" | "status"
 
def main():
 
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(PIN, GPIO.OUT)
 
    if command == "on":
        GPIO.output(PIN, GPIO.HIGH)
 
    elif command == "off":
        GPIO.output(PIN, GPIO.LOW)
 
    elif command == "status":
        state = GPIO.input(PIN)
 
        if state == 1:
            print("an")
        else:
            print("aus")
 
    GPIO.cleanup()
 
if __name__ == "__main__":
    main()

Programmstruktur anlegen

Programmstruktur

Folgende Programmstruktur wird verwendet.

  • gpio_led – Projektordner im Verzeichnis ~/devel/projects/
  • course_env – Python-Environment im Verzeichnis ~/devel/projects/
  • src – Ordner für den Quellcode (engl. source)
  • core – Unterordner in src
gpio_led/
├── 
└── src
    ├── core
    │   ├── hardware.py
    │   ├── logic.py
    │   └── __init__.py
    └── ledcontrol.py

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:

touch __init__.py
Bevor weitergearbeitet werden kann, sollte die Programmstruktur überprüft werden.

Environment anlegen

Aufgabe: Anlegen einer Python-Environment

Lege eine Umgebung

  • ~/devel/projects/refexio_advanced/refexio_advanced_env an.

Hierfür muss der Ordner ~/devel/projects/refexio_advanced bereits vorhanden sein.

Das Anlegen und Managen einer Umgebung ist hier Python ENV ausführlich beschrieben.
Wechsle in die Environment Die Programmierung erfolgt nun immer mit der gewählten Umgebung!
source ~/devel/projects/gpio_led/gpio_env/bin/activate

Pakete & Bibliotheken installieren

Systemweit GPIO-Unterstützung über apt zur Verfügung stellen:

sudo apt install python3-rpi.gpio

Jetzt die ENV aktivieren (falls noch nicht geschehen) und dann erst RPi.GPIO installieren:

source ~/devel/gpio_led/gpio_env/bin/activate
pip install RPi.GPIO

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

gpio_hw.py
import RPi.GPIO as GPIO
 
PIN_Y = 17
 
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN_Y, GPIO.OUT)
 
def setLED(pin,value)
    if value == 1:
       GPIO.output(pin, GPIO.HIGH)
    else
       GPIO.output(pin, GPIO.LOW)
 
 
def on():
    GPIO.output(PIN, GPIO.HIGH)
 
def off():
    GPIO.output(PIN, GPIO.LOW)
 
def status():
    return GPIO.input(PIN)
 
def cleanup():
    GPIO.cleanup()

logic.py

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"

ledcontrol.py

ledcontrol.py
#!/usr/bin/env python3
 
from core import logic
from core import gpio_hw
 
def main():
    print("GPIO CLI gestartet (CTRL+C beendet)")
 
    try:
        while True:
            cmd = input("on / off / status > ").strip()
 
            if cmd == "on":
                print(logic.turn_on())
            elif cmd == "off":
                print(logic.turn_off())
            elif cmd == "status":
                print(logic.get_status())
 
    except KeyboardInterrupt:
        pass
 
    finally:
        gpio_hw.cleanup()
 
if __name__ == "__main__":
    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:

cd ~/devel/gpio_led/src
./ledcontrol.py

Bei erfolgreichem Start erscheint die Eingabeaufforderung von ledcontrol.py:

on / off / status >

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.

Falls beim Start des Programms die Fehlermeldung

ModuleNotFoundError: No module named 'RPi.GPIO'

erscheint, wurde der Abschnitt „Pakete & Bibliotheken installieren“ vermutlich nicht vollständig beachtet. Bitte diesen Abschnitt erneut sorgfältig durchgehen.

projekt/python_projekt_gpio.1771351576.txt.gz · Zuletzt geändert: von torsten.roehl