Neben dem Ansteuern von LEDs gehört die Taster-Abfrage zu den wichtigsten GPIO-Grundlagen. In dieser Anleitung schließen wir einen Taster an einen Eingangs-GPIO-Pin an und lesen den Tastendruck mit Python aus.

Hinweis

Was benötigen wir?

ProduktShop-Link
Raspberry PiKauf-Empfehlung
NetzteilKauf-Empfehlung
Breadboard + KabelKauf-Empfehlung
Taster-SetKauf-Empfehlung
Widerstandsset (optional)Kauf-Empfehlung
LED-Set (optional)Kauf-Empfehlung
Raspberry Pi Starter Set (Empfehlung)Kauf-Empfehlung

Benötigte Materialien (Affiliate-Links)

Ein Raspberry Pi Starter Set* enthält neben Tastern auch LEDs, Displays, Servos, Motoren, RFID-Kartenleser und vieles mehr.

Raspberry Pi Starter Set
Raspberry Pi Starter Set

Pull-Up und Pull-Down Widerstände

Pull-Up-Widerstände ziehen einen Pin auf logisch HIGH (1), Pull-Down-Widerstände auf logisch LOW (0). Sie verhindern undefinierte Zustände an offenen Eingängen.

Beim Raspberry Pi sind diese Widerstände intern in die GPIO-Pins integriert – sie müssen nicht extern aufgebaut werden. Die Konfiguration erfolgt direkt in der Software.

GPIO Zero installieren

GPIO Zero ist unter Raspberry Pi OS bereits vorinstalliert. Bei älteren Versionen:

bash
sudo apt install python3-gpiozero

Pin-Angabe für Taster

Mit der Button-Klasse aus GPIO Zero kann der Pin auf verschiedene Arten angegeben werden:

python
taster = Button(23)
taster = Button("GPIO23")
taster = Button("BCM23")
taster = Button("BOARD16")

Tipp

Beispiel 1: Text bei Tastendruck ausgeben

Aufbau

Taster an GND und GPIO Pin 23 anschließen – kein externer Widerstand nötig.

Taster an GPIO 23 und GND anschließen
Taster an GPIO 23 und GND anschließen

Code

python
from gpiozero import Button

taster = Button(23)

while True:
  if taster.is_pressed:
      print("Taster ist gedrückt!")
  else:
      print("Taster ist nicht gedrückt!")

Erklärung

Button(23) definiert den GPIO Pin 23 als Eingang und aktiviert automatisch den internen Pull-Up-Widerstand.

taster.is_pressed gibt True zurück, solange der Taster gedrückt ist. Die while True-Schleife fragt den Zustand kontinuierlich ab (Polling).

Ausgabe im Terminal bei Tastendruck
Ausgabe im Terminal bei Tastendruck

Beispiel 2: Auf Tastendruck warten

python
from gpiozero import Button

taster = Button(23)

print("Diese Zeilen werden beim Start ausgeführt")

taster.wait_for_press()

print("Diese Zeilen werden erst nach dem Tastendruck ausgeführt")

wait_for_press() hält das Programm an dieser Stelle an. Alle nachfolgenden Befehle werden erst nach dem Tastendruck ausgeführt.

Warten auf Tastendruck mit wait_for_press
Warten auf Tastendruck mit wait_for_press

Beispiel 3: Funktion per Tastendruck starten

Code: Funktion beim Drücken

python
from gpiozero import Button
from signal import pause

def meine_funktion():
  print("Hallo DigitaleWelt!")

taster = Button(23)

taster.when_pressed = meine_funktion

pause()

Code: Funktion beim Loslassen

python
from gpiozero import Button
from signal import pause

def meine_funktion():
  print("Bis später!")

taster = Button(23)

taster.when_released = meine_funktion

pause()

Code: Drücken und Loslassen kombiniert

python
from gpiozero import Button
from signal import pause

def hallo_funktion():
  print("Hallo DigitaleWelt!")

def tschau_funktion():
  print("Bis später!")

taster = Button(23)

taster.when_pressed = hallo_funktion
taster.when_released = tschau_funktion

pause()

when_pressed und when_released sind Event-Callbacks – deutlich effizienter als das kontinuierliche Abfragen per Polling in Beispiel 1. pause() hält das Programm am Laufen ohne CPU-Last.

Beispiel 3 mit when_pressed und when_released
Beispiel 3 mit when_pressed und when_released

Beispiel 4: LED mit Taster steuern

Aufbau

Zusätzlich zum Taster an GPIO 23 eine LED (mit 220-Ohm-Widerstand) an GPIO 17 anschließen. Wie die LED-Schaltung aufgebaut wird, ist im Artikel Raspberry Pi LED ansteuern beschrieben.

Aufbau mit Taster und LED
Taster (GPIO 23) und LED (GPIO 17) am Breadboard
LED leuchtet bei Tastendruck
LED leuchtet beim Drücken, erlischt beim Loslassen

Code

python
from gpiozero import LED, Button
from signal import pause

rote_led = LED(17)
taster = Button(23)

taster.when_pressed = rote_led.on
taster.when_released = rote_led.off

pause()

Alternative (noch kompakter)

python
from gpiozero import LED, Button
from signal import pause

rote_led = LED(17)
taster = Button(23)

rote_led.source = taster

pause()

Mit rote_led.source = taster wird die LED direkt mit dem Taster verbunden – GPIO Zero übernimmt die gesamte Logik automatisch.

Brauche ich externe Pull-Up-Widerstände für den Taster?
Nein. Der Raspberry Pi hat interne Pull-Up- und Pull-Down-Widerstände in den GPIO-Pins. GPIO Zero aktiviert den Pull-Up automatisch, wenn du Button() verwendest.
Was ist der Unterschied zwischen is_pressed und when_pressed?
is_pressed ist eine Eigenschaft, die in einer Schleife abgefragt wird (Polling). when_pressed ist ein Event-Callback, der automatisch aufgerufen wird – effizienter und ohne CPU-Belastung durch ständiges Abfragen.
Kann ich auch Schalter, Reed-Kontakte oder Magnetsensoren mit Button() abfragen?
Ja. Jeder digitale Eingang, der zwischen HIGH und LOW wechselt, kann mit Button() ausgelesen werden – also auch Schalter, Reed-Kontakte, Hallsensoren oder Endschalter.
Wie verhindere ich Prellen (Bouncing) beim Taster?
GPIO Zero hat einen eingebauten Entprellmechanismus. Du kannst den Wert mit Button(23, bounce_time=0.05) anpassen (hier: 50 ms). Der Standardwert ist ausreichend für die meisten Taster.
Kann ich mehrere Taster gleichzeitig verwenden?
Ja. Erstelle einfach mehrere Button-Instanzen mit verschiedenen GPIO-Pins und weise jedem eigene Callback-Funktionen zu.

Hat dir der Artikel gefallen? Teile ihn!