Raspberry Pi: Taster abfragen (GPIO Eingang)

Neben dem Ansteuern von LEDs gehört die Taster- oder Schalter-Abfrage mit dem Raspberry Pi zu den klassischen Grundlagen. In dieser Anleitung werden wir daher einen Taster an einen der Eingangs GPIO Pins anschließen, und anschließend den Tastendruck auslesen. 

In dieser Anleitung werde ich nur die Codezeilen einfügen und diese anhand von Beispielen erklären. Das Erstellen und Ausführen eines Python Skriptes habe ich bereits in einer anderen Anleitung ausführlich erklärt. Python Skript erstellen und ausführen.

Letzten Artikel versäumt? Lerne wir wie du einen LED mit deinem Raspberry Pi ansteuern kannst.

Was benötigen wir?

ProdukteShop Link
Raspberry PiKauf Empfehlung
Netzteil (für den Pi)Kauf Empfehlung
Breadboard (Steckplatine) + KabelKauf Empfehlung
Taster-SetKauf Empfehlung
Widerstandsset (Optional)Kauf Empfehlung
LED-Set (Optional)Kauf Empfehlung
Raspberry Pi Starter Set (Empfehlung)Kauf Empfehlung
Bei den angegebenen Links kann es sich um Affiliate Links handeln.

Wenn du gerade erst mit deinen ersten Schaltungen beginnst, ist es am besten, ein Raspberry Pi Starter Set* zu kaufen.

Raspberry Pi Taster abfragen - Pi SetPin
Raspberry Pi Taster abfragen – Pi Set

Darin findest du nicht nur wichtige Bauteile für diese Schaltung, sondern auch eine Vielzahl weiterer Komponenten wie LEDs, Displays, Servos, Motoren, RFID-Kartenleser, Reed-Kontakte und vieles mehr.

Pull-Up und Pull-Down Widerstände

Pull-Up- und Pull-Down-Widerstände sind in der Elektronik wichtige Bauelemente, um den Zustand eines Pins sicherzustellen, insbesondere in Mikrocontroller-Anwendungen. Ein Pull-Up-Widerstand zieht den angeschlossenen Pin auf logisch „1“ (HIGH), während ein Pull-Down-Widerstand den Pin auf logisch „0“ (LOW) zieht. Diese Widerstände werden eingesetzt, um Störungen zu minimieren, ungewollte Pegeländerungen zu verhindern und klare Logikpegel zu gewährleisten.

Beim unserem Raspberry Pi, sind Pull-Up- und Pull-Down-Widerstände normalerweise nicht erforderlich. Das liegt daran, dass die GPIO (General Purpose Input/Output)-Pins des Raspberry Pi bereits über interne Pull-Up- und Pull-Down-Widerstände verfügen. Das bedeutet, dass wir die Widerstandskonfiguration direkt in der Software festlegen können, ohne zusätzliche externe Widerstände verwenden zu müssen.

GPIO Zero

Ich empfehle euch, GPIO Zero als Bibliothek für die Steuerung von GPIO-Pins zu verwenden. Diese Bibliothek ist inzwischen standardmäßig in Raspberry Pi OS vorinstalliert. Wenn ihr jedoch eine ältere Version des Betriebssystems verwendet, könnt ihr die Bibliothek mit folgendem Befehl installieren:

sudo apt install python3-gpiozero

Falls ihr ein anderes Betriebssystem auf eurem Raspberry Pi verwendet, ist es möglich, dass ihr die Bibliothek mit folgendem Befehl installieren müsst:

sudo pip3 install gpiozero
sudo apt install python3-gpiozero

Raspberry Pi GPIO Pins (Belegung)

Als Erstes müssen wir einen GPIO-Pin als Eingang für unseren Taster definieren. Hier haben wir mit der GPIO Zero Bibliothek einige Möglichkeiten zur Auswahl. 

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

Den Namen taster könnt ihr durch einen beliebigen Namen ersetzten. Vorallem wenn ihr mehrere Taster für eure Schaltung verwendet, ist es sinnvoll einen anderen Namen als nur Taster zu verwenden. (z.B. taster_led_rot; taster_weiter; enter; zurück… etc.)

Beispiel 1: Text mit Taster ausgeben

In diesem Beispiel werden wir durch drücken des Tasters einen Text im Serial Monitor anzeigen lassen. Am einfachsten geht das wenn ihr euren Raspberry Pi mit einem Monitor verwendet. Anschließend könnt ihr mit einer Python IDE (Programm zum Programmieren) wie zum Beispiel Thonny das Programm direkt auf eurem Raspberry Pi ausführen und auch das Ergebnis bzw. den Text direkt in der IDE anzeigen lassen. Wie ihr einen Code mit Hilfe einer Python IDE auf eurem Raspberry Pi ausführt, erfahrt ihr in meinem Artikel Raspberry Pi: Python Skript erstellen und ausführen.

Aufbau (Setup)

Der Aufbau ist für diese Schaltung sehr einfach. Wir müssen nur einen Taster an GND und GPIO Pin 23 anschließen.

Raspberry Pi Taster abfragen - Taster verbindenPin
Raspberry Pi Taster abfragen – Taster verbinden

Code (Python)

Folgenden Code fügen wir jetzt in unsere Programmiertool ein. 

from gpiozero import Button

taster = Button(23)

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

Code Erklärung

Zuerst müssen wir die Button Funktion aus der GPIO-Zero Bibliothek importieren.

from gpiozero import Button

Mit der nächsten Codezeile wird festgelegt, dass am GPIO Pin 23 eine Taster angeschlossen ist.

taster = Button(23)

Mit dem Befehl Button() wird der GPIO Pin automatisch als Eingang definiert. Auch der Pull-Up Widerstand wird für uns aktiviert.

Vor dem = Zeichen können wir einen Wunschnamen für unseren Taster vergeben. Über diesen Namen fragen wir später den Status unseres Tasters ab. while True:

Als letzten Punkt generieren wir eine while Schleife

Was ist eine while-Schleife?: Eine „while“-Schleife ist eine grundlegende Kontrollstruktur in der Programmierung, die verwendet wird, um eine bestimmte Anweisung oder einen Block von Anweisungen so lange auszuführen, wie eine bestimmte Bedingung wahr ist. Die Schleife beginnt, indem die Bedingung überprüft wird. Wenn die Bedingung wahr ist, wird der Code innerhalb der Schleife ausgeführt. Nach der Ausführung kehrt die Schleife zur Bedingungsprüfung zurück. Solange die Bedingung wahr bleibt, wird der Code wiederholt ausgeführt.

„while true“ ist eine spezielle Form einer „while“-Schleife, bei der die Bedingung immer als wahr interpretiert wird. Das bedeutet, dass der darin enthaltene Code endlos wiederholt wird, ohne eine natürliche Beendigungsbedingung. Solche Schleifen werden oft als Endlosschleifen bezeichnet und dienen dazu, bestimmte Aufgaben kontinuierlich auszuführen, bis sie manuell oder durch externe Faktoren unterbrochen werden.

In dieser Schleifen fragen wir unterbrochen den Zustand unseres Tasters ab. Halten wir den Taster gedrückt ist die Abfrage if button.is_pressed wahr, und uns wird der Text „Taster ist gedrückt“ mit dem pirint() Befehl ausgegeben.

print("Taster ist gedrückt!")

Ansonsten (wenn wir den Taster nicht drücken) wird der Text „Taster nicht gedrückt“ ausgegeben.

print("Taster ist nicht gedrückt!")
Raspberry Pi Taster abfragen - Beispiel 01Pin
Raspberry Pi Taster abfragen – Beispiel 01

Beispiel 2: Auf Tastendruck warten

Bei diesem Beispiel wird durch die Codezeile taster.wait_for_press() das Programm an dieser Stelle angehalten. Alle Befehle etc. die sich nach dieser Zeile befinden werden erst nach drücken des Tasters ausgelöst. 

from gpiozero import Button

taster = Button(23)

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

taster.wait_for_press()

print("Diese Codezeilen werden erst nach dem drücken des Tasters ausgeführt")
Raspberry Pi Taster abfragen - Beispiel 02Pin
Raspberry Pi Taster abfragen – Beispiel 02

Beispiel 3: Funktion mit Tastendruck starten

Wir können mit unseren Taster auch eine Funktion starten. In unserem Beispiel besteht die Funktion wieder aus einer einfachen Textausgaben. Ihr könnt natürlich in dieser Funktion alle möglichen Dinge auslösen. 

Was ist eine Funktion?: In der Programmierung ist eine Funktion eine selbstständige, wiederverwendbare Einheit von Code, die eine spezifische Aufgabe oder Operation ausführt. Funktionen werden erstellt, um Code zu organisieren, zu strukturieren und zu modularisieren, was die Lesbarkeit und Wartbarkeit des Codes verbessert.

Code (Python)

Funktion wird beim drücken des Tasters mit dem Code gestartet. Ob dieser gedrückt wurde, überwachen wir mit taster.when_pressed.

from gpiozero import Button 
from signal import pause 

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

taster = Button(23) 

taster.when_pressed = meine_funktion 

pause()

Code (Python)

Funktion wird beim loslassen des Tasters gestartet. Das Loslassen fragen wir mit dem Code taster.when_released ab.

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 (Python)

Natürlich können wir diese zwei Abfragen auch kombinieren.

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()
Raspberry Pi Taster abfragen - Beispiel 03Pin
Raspberry Pi Taster abfragen – Beispiel 03

Beispiel 4: LED mit Taster steuern

In diesem nächsten Beispiel werden wir durch drücken unseres Tasters eine LED einschalten, und beim Loslassen wieder ausschalten. 

Aufbau (Setup)

Zusätzlich zu unserem Taster müssen wir für dieses Beispiel noch eine LED an unserem Raspberry Pi anschließen. Wie ihr den richten Vorwiderstand für eure LED berechnet, und wir ihr eine LED mit eurem Pi ansteuern könnt, könnt ihr in meinem letzten Artikel nachlesen.

Raspberry Pi Taster abfragen - Taster und LEDPin
Raspberry Pi Taster abfragen – Taster und LED

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()

Code Alternative (Python)

from gpiozero import LED, Button
from signal import pause 

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

rote_led.source = taster 

pause()
Raspberry Pi Taster abfragen - Beispiel 04Pin
Raspberry Pi Taster abfragen – Beispiel 04

Zusammenfassung

Wie ihr seht ist das auslesen von Taster und Schalter mit der gpio-zero Bibliothek sehr einfach. Mit den oben angeführten Code könnt ihr natürlich alle möglichen Taster, Reedkontakte, Magentschalter etc. auslesen und mit eurem Raspberry Pi verschiedenstes Aktionen auslesen.

Schreibt gerne unten in die Kommentare welche Projekte ihr mit den GPIO Pins eures Raspberry Pis vor habt, und welches Tutorial noch bei eurem Projekt weiterhelfen würde. 

Unterstütze diesen Blog, damit er nicht endet wie eine schlechte Netflix-Serie – unvollständig und enttäuschend!

1 Gedanke zu „Raspberry Pi: Taster abfragen (GPIO Eingang)“

  1. Unter
    „Code (Python)
    Folgenden Code fügen wir jetzt in unsere Programmiertool ein.“
    muss im Kasten stehen:

    „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!“)“

    oder „button = Button(23)“.

    Antworten

Schreibe einen Kommentar