Raspberry Pi: Taster-Zustand auswerten und anzeigen (mit Python und GPIO Zero)

Ein Taster kann zwei Zustände haben: „gedrückt“ und „nicht gedrückt“. Entsprechend für „Ein“ und „Aus“. Die folgenden Programmbeispiele berücksichtigen verschiedene Szenarien in denen ein Taster gedrückt oder auch wieder losgelassen wird. Es geht also darum den Taster-Zustand auszuwerten.

Zu allem Überfluss macht es einen Unterschied, ob man einen Taster nach Ground (GND) oder nach +3,3V (VCC) schaltet. Beim Experimentieren ist es eigentlich egal und macht nur im Programmcode beim Initialisieren des GPIOs einen Unterschied. In der praktischen Anwendung muss man dann sehen, was sinnvoller ist, um einen stabilen und fehlerfreien Betrieb zu gewährleisten.

Aufbau und Bauteile: Taster nach GND schalten

Aufbau und Bauteile: Taster nach GND schalten

  • Verbinde die eine Seite des Tasters mit Ground (GND).
  • Verbinde die andere Seite des Tasters mit einem GPIO-Pin.

Aufbau und Bauteile: Taster nach VCC schalten

Aufbau und Bauteile: Taster nach VCC schalten

  • Verbinde die eine Seite des Tasters mit 3V3 (VCC).
  • Verbinde die andere Seite des Tasters mit einem GPIO-Pin.
  • Wichtig: Setze beim Initialisieren des GPIOs den Parameter „pull_up“ auf „False“.

Programmcode für Taster nach GND schalten

GPIO Zero kennt mehrere Möglichkeiten die Betätigung eines Tasters auszuwerten, der nach Ground (GND) geschaltet wird.

Das folgende Programm wird angehalten und läuft erst dann weiter, wenn der Taster gedrückt wird. Nachdem der Text ausgegeben wurde, wird das Programm beendet.

# Bibliotheken laden
from gpiozero import Button

# Initialisierung von GPIO27 als Button (Eingang)
button = Button(27)

# Warten auf Druck auf Button
button.wait_for_press()

# Text-Ausgabe
print("Taster wurde gedrückt")

Im folgenden Programm wird der Druck auf den Taster immer wieder erneut geprüft. Der Nachteil davon ist, dass die Betätigung mehrmals erkannt wird, auch wenn man nur einmal drückt. Das macht natürlich nur Sinn, wenn man wissen will, wenn der Taster nicht nur gedrückt wurde, sondern auch gehalten wird.

# Bibliotheken laden
from gpiozero import Button

# Initialisierung von GPIO27 als Button (Eingang)
button = Button(27)

# Wiederholung einleiten
while True:
    # Wenn Button gedrückt wurde
    if button.is_pressed:
        # Text-Ausgabe
        print("Taster wurde gedrückt")

Im folgenden Programm wird die Auswertung des Tasters im Programmablauf global definiert. Das heißt, immer dann, wenn der Taster gedrückt wird, wird der Text ausgegeben. Das Programm wird nicht automatisch beendet.

# Bibliotheken laden
from gpiozero import Button

# Definition einer Funktion
def pressed():
    # Text-Ausgabe
    print("Taster wurde gedrückt")

# Initialisierung von GPIO27 als Button (Eingang)
button = Button(27)

# Wenn der Button gedrückt wird
button.when_pressed = pressed

Im folgenden Programm wird die Auswertung des Tasters zusätzlich um das Loslassen im Programmablauf global definiert. Das heißt, immer dann, wenn der Taster gedrückt und losgelassen wird, wird ein Text ausgegeben. Das Programm wird nicht automatisch beendet.

# Bibliotheken laden
from gpiozero import Button

# Definition einer Funktion
def pressed():
    # Text-Ausgabe
    print("Gedrückt")

# Definition einer Funktion
def released():
    # Textausgabe
    print("Losgelassen")

# Initialisierung von GPIO27 als Button (Eingang)
button = Button(27)

# Wenn der Button gedrückt wird
button.when_pressed = pressed

# Wenn der Button losgelassen wird
button.when_released = released

Programmcode für Taster nach VCC schalten

GPIO Zero kennt mehrere Möglichkeiten die Betätigung eines Tasters auszuwerten, der nach +3,3V (VCC) geschaltet wird.

Das folgende Programm wird angehalten und läuft erst dann weiter, wenn der Taster gedrückt wird. Nachdem der Text ausgegeben wurde, wird das Programm beendet.

# Bibliotheken laden
from gpiozero import Button

# Initialisierung von GPIO27 als Button (Eingang) mit umgekehrter Logik
button = Button(27, False) # Warten auf Druck auf Button button.wait_for_press() # Text-Ausgabe print("Taster wurde gedrückt")

Im folgenden Programm wird der Druck auf den Taster immer wieder erneut geprüft. Der Nachteil davon ist, dass die Betätigung mehrmals erkannt wird, auch wenn man nur einmal drückt. Das macht natürlich nur Sinn, wenn man wissen will, wenn der Taster nicht nur gedrückt wurde, sondern auch gehalten wird.

# Bibliotheken laden
from gpiozero import Button

# Initialisierung von GPIO27 als Button (Eingang) mit umgekehrter Logik
button = Button(27, False) # Wiederholung einleiten while True: # Wenn Button gedrückt wurde if button.is_pressed: # Text-Ausgabe print("Taster wurde gedrückt")

Im folgenden Programm wird die Auswertung des Tasters im Programmablauf global definiert. Das heißt, immer dann, wenn der Taster gedrückt wird, wird der Text ausgegeben. Das Programm wird nicht automatisch beendet.

# Bibliotheken laden
from gpiozero import Button

# Definition einer Funktion
def pressed():
    # Text-Ausgabe
    print("Taster wurde gedrückt")

# Initialisierung von GPIO27 als Button (Eingang) mit umgekehrter Logik
button = Button(27, False) # Wenn der Button gedrückt wird button.when_pressed = pressed

Im folgenden Programm wird die Auswertung des Tasters zusätzlich um das Loslassen im Programmablauf global definiert. Das heißt, immer dann, wenn der Taster gedrückt und losgelassen wird, wird ein Text ausgegeben. Das Programm wird nicht automatisch beendet.

# Bibliotheken laden
from gpiozero import Button

# Definition einer Funktion
def pressed():
    # Text-Ausgabe
    print("Gedrückt")

# Definition einer Funktion
def released():
    # Textausgabe
    print("Losgelassen")

# Initialisierung von GPIO27 als Button (Eingang) mit umgekehrter Logik
button = Button(27, False) # Wenn der Button gedrückt wird button.when_pressed = pressed # Wenn der Button losgelassen wird button.when_released = released

Darf es ein bisschen mehr sein?

Wir wissen jetzt, wie wir es hinbekommen, dass bei einem Druck auf einen Taster etwas ausgelöst wird. Wir sollten das mit einem Beispiel konkretisieren. Wie wäre es, dass eine Leuchtdiode leuchtet, wenn ein Taster gedrückt wird.

Highlights: Elektronik mit dem Raspberry Pi

Alternative: Elektronik mit dem Raspberry Pi Pico

Raspberry Pi Pico ist ein Mikrocontroller. Er ermöglicht Dank vieler analoger und digitaler Eingänge und Ausgänge vielfältige Anwendung im Bereich der Steuerung von elektronischen Bauteilen, Sensorik, Robotik und Automation.

Weitere verwandte Themen:

Hardware-nahes Programmieren mit dem Raspberry Pi, Python und GPIO Zero

Elektronik-Set Raspberry Pi Edition

Das "Elektronik-Set Raspberry Pi Edition" ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit Python und GPIO Zero.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Verschiedene Zustände auswerten und anzeigen lassen
  • LED mit Taster einschalten und ausschalten
  • Relais-Board steuern
  • LED, Relais-Board und Motor über ULN2003A steuern
  • Ampel- und Lauflicht-Steuerung
  • Herunterfahren per Taster
  • Reaktionsspiel mit Tastern und LEDs
  • Eigene Steuerungen programmieren

Mehr Informationen Elektronik-Set jetzt bestellen

Teilen:

Elektronik-Set Raspberry Pi Edition
Elektronik-Set Raspberry Pi Edition

Elektronik erleben mit dem Raspberry Pi mit Python und GPIO Zero

  • leichter Einstieg ins Hardware-nahe Programmieren mit Python und GPIO Zero
  • Experimentieren und Programmieren ohne Vorkenntnisse
  • sofort Loslegen mit All-in-one-Set

Mehr Informationen Elektronik-Set jetzt bestellen

Programmieren mit dem Raspberry Pi Pico
Online-Workshop

Programmieren mit dem Raspberry Pi Pico

Online-Workshop mit einer Einführung ins Physical Computing mit Leuchtdioden, Taster und Temperatursensor.

  • Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython ohne Vorkenntnisse
  • Optimaler Einstieg, um eigene Ideen zu verwirklichen und Steuerungen zu programmieren
  • Inklusive Elektronik-Set mit einem Raspberry Pi Pico, Zubehör und elektronischen Bauteilen

Mehr Informationen Am Online-Workshop teilnehmen