ESP32 S3 - Taster - Entprellen

Mechanische Taster sind scheinbar einfache Bauteile, haben aber eine Eigenheit, die Ihre ESP32 S3 Projekte durcheinanderbringen kann: das Prellen. Dieses Tutorial erklärt, was Prellen ist, warum es wichtig ist und wie Sie es sowohl mit reinem Arduino-Code als auch mit der ezButton-Bibliothek beseitigen.

Was Sie bauen werden:

  1. Einen Test-Sketch, der das Prellen eines Tasters ohne Entprellung zeigt
  2. Einen Sketch mit entprelltem Taster, der manuelles Timing mit millis() nutzt
  3. Ein Beispiel zur Entprellung eines einzelnen Tasters mit der ezButton-Bibliothek
  4. Ein Beispiel zur Entprellung mehrerer Taster, das drei Taster gleichzeitig verarbeitet
ESP32 S3 - Taster - Entprellen

Wenn Sie einen Taster drücken, wechselt sein Zustand dann nur einmal von LOW auf HIGH (oder von HIGH auf LOW)? Nicht ganz! In der Praxis führt ein einziger Tastendruck dazu, dass der Zustand mehrmals sehr schnell zwischen LOW und HIGH hin- und herspringt. Das ist eine physikalische Eigenschaft mechanischer Taster und wird Prellen genannt. Durch das Prellen liest Ihr ESP32 S3 mehrere Tastendrücke, obwohl Sie nur einmal gedrückt haben, was zu Fehlern in Ihren Projekten führt. Die Lösung für dieses Problem heißt Tasterentprellung.

ESP32 S3 Prellphänomen

Dieses Tutorial behandelt:

Erforderliche Hardware

1×ESP32 S3 WROOM N16R8
1×(Alternativ) ESP32 S3 SuperMini Dev Module
1×(Alternativ) ESP32 S3 Uno-form Board
1×(Alternativ) ESP32 S3 Camera Board
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×Breadboard-Taster mit Kappe
1×Breadboard-Taster-Kit
1×Panel-Drucktaster
1×Taster-Modul
1×Breadboard
1×Verbindungskabel
1×(Optional) DC-Stromanschluss
1×(Empfohlen) Screw Terminal Expansion Board for ESP32 S3
1×(Empfohlen) Breakout Expansion Board for ESP32 S3
1×(Empfohlen) Power Splitter for ESP32 S3

Oder Sie können die folgenden Kits kaufen:

1×DIYables ESP32 S3 Starter-Kit (ESP32 S3 enthalten)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Überblick über Button

Taster sind grundlegende Eingabegeräte, die erkennen, wann sie gedrückt oder losgelassen werden. Zu verstehen, wie sie sich elektrisch verhalten – einschließlich ihrer Neigung zum Prellen –, ist entscheidend für zuverlässige ESP32 S3 Projekte.

Wir haben ein eigenes Tutorial, das alles über Taster am ESP32 S3 behandelt:

Wichtige Spezifikationen

Das Taster-Tutorial enthält vollständige Angaben zur Pinbelegung, zur elektrischen Funktionsweise von Tastern, eine Schritt-für-Schritt-Verdrahtung, Beispielcode und Tipps zur Behebung häufiger Probleme.

Mehr erfahren: Tutorial ESP32 S3 - Taster

Verdrahtungsdiagramm

Schließen Sie einen einzelnen Taster an Ihren ESP32 S3 an, indem Sie einen Pin mit GPIO7 und den anderen Pin mit GND verbinden. Den Rest übernimmt der interne Pull-up-Widerstand des ESP32 S3, sodass kein externer Widerstand erforderlich ist.

Schaltplan ESP32 S3 Taster

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Sicherheitshinweise

Schließen Sie den Taster immer zwischen einem GPIO-Pin und GND an und nicht direkt an 3,3V, da der Code auf die interne Pull-up-Konfiguration angewiesen ist. Vermeiden Sie es, während der Entwicklung Taster an GPIO0 anzuschließen, da dieser Pin beim ESP32 S3 vom Bootloader verwendet wird.

Taster-Pin ESP32 S3 Pin
Ein Pin GPIO7
Anderer Pin GND

Um den Unterschied deutlich zu sehen, führen wir zuerst ESP32 S3 Code OHNE Entprellung und dann MIT Entprellung aus und vergleichen die Ergebnisse.

Taster ohne Entprellung auslesen

Schnelle Schritte

  1. Neu beim ESP32 S3? Arbeiten Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3 durch.
  2. Verdrahten Sie die Komponenten: Folgen Sie dem obigen Schaltplan, um den Taster mit Pin GPIO7 zu verbinden.
  3. Verbinden Sie das Board: Schließen Sie Ihren ESP32 S3 über ein USB-Typ-C-Kabel an Ihren Computer an.
  4. Öffnen Sie die Arduino IDE: Starten Sie die Arduino IDE auf Ihrem Computer.
  5. Wählen Sie Ihr Board: Wählen Sie im Menü Tools „ESP32S3 Dev Module“ und den richtigen COM-Port.
  6. Laden Sie den Code hoch: Kopieren Sie den folgenden Code und laden Sie ihn auf Ihr ESP32 S3 Board hoch.
  7. Öffnen Sie den Seriellen Monitor: Klicken Sie auf das Symbol des Seriellen Monitors, um die Ausgabe zu sehen.
  8. Testen Sie den Taster: Drücken Sie den Taster einmal, halten Sie ihn einige Sekunden gedrückt und lassen Sie ihn dann los.
  9. Beobachten Sie die Ergebnisse: Sehen Sie sich die Ausgabe im Seriellen Monitor an, die mehrere Drück-/Loslass-Ereignisse zeigt.
  10. Profi-Tipp: Wenn Sie das Prellen nicht sofort sehen, drücken Sie den Taster mehrmals – es handelt sich um ein zufälliges Phänomen, das nur zeitweise auftritt.
/* * Dieser ESP32 S3 Code wurde von newbiely.de entwickelt * Dieser ESP32 S3 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32-s3/esp32-s3-button-debounce */ #define BUTTON_PIN 21 // The ESP32 S3 pin GPIO21 pin connected to button int prev_state = LOW; // The previous state from the input pin int button_state; // The current reading from the input pin void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(115200); // initialize the button pin as an pull-up input (HIGH when the switch is open and LOW when the switch is closed) pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); if (prev_state == HIGH && button_state == LOW) Serial.println("The button is pressed"); else if (prev_state == LOW && button_state == HIGH) Serial.println("The button is released"); // save the the last state prev_state = button_state; }
Code in der Arduino IDE hochladen
Wie man den Seriellen Monitor in der Arduino IDE öffnet

Ausgabe des Seriellen Monitors:

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32S3 Dev Module' on 'COM15')
New Line
9600 baud
[2026-06-16 10:23:41] The button is pressed [2026-06-16 10:23:41] The button is pressed [2026-06-16 10:23:41] The button is pressed [2026-06-16 10:23:41] The button is pressed [2026-06-16 10:23:44] The button is released [2026-06-16 10:23:44] The button is released [2026-06-16 10:23:44] The button is released
Ln 11, Col 1
ESP32S3 Dev Module on COM15
2

⇒ Wie Sie sehen, haben Sie den Taster nur einmal gedrückt und einmal losgelassen, aber der ESP32 S3 hat aufgrund des Prellens mehrere Drück- und Loslassvorgänge erkannt.

※ Notiz:

Das Prellen tritt nicht immer auf. Wenn es nicht auftritt, wiederholen Sie den obigen Test bitte mehrmals, um es zu beobachten.

Taster mit Entprellung auslesen

Dieser Sketch beseitigt das Prellen, indem er auf Ihrem ESP32 S3 eine Tasterentprellung umsetzt. Er speichert den Zeitstempel, wenn sich der Tasterzustand zum ersten Mal ändert, und wartet dann eine kurze, einstellbare Zeit, bevor er den neuen Zustand bestätigt – schnelle Schwankungen in diesem Zeitfenster werden verworfen. Dadurch werden nur stabile, beabsichtigte Tastendrücke und Loslassvorgänge an Ihre Anwendung gemeldet.

Schnelle Schritte

  1. Neu beim ESP32 S3? Arbeiten Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3 durch.
  2. Kopieren Sie den Code: Kopieren Sie den folgenden Entprell-Code in die Arduino IDE.
  3. Laden Sie den Code hoch: Klicken Sie auf die Schaltfläche Upload, um Ihren ESP32 S3 zu programmieren.
  4. Öffnen Sie den Seriellen Monitor: Klicken Sie auf das Symbol des Seriellen Monitors, um die Ausgabe zu sehen.
  5. Testen Sie den Taster: Drücken Sie den Taster, halten Sie ihn einige Sekunden gedrückt und lassen Sie ihn dann los.
  6. Beobachten Sie die Ergebnisse: Sie sehen jetzt nur noch ein Drück- und ein Loslass-Ereignis.
  7. Profi-Tipp: Wenn weiterhin Prellen auftritt, erhöhen Sie den Wert DEBOUNCE_TIME von 50 auf 100 Millisekunden.
/* * Dieser ESP32 S3 Code wurde von newbiely.de entwickelt * Dieser ESP32 S3 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32-s3/esp32-s3-button-debounce */ #define BUTTON_PIN 21 // The ESP32 S3 pin GPIO21 pin connected to button #define DEBOUNCE_TIME 50 // The debounce time in millisecond, increase this time if it still chatters int prev_state_steady = LOW; // The previous steady state from the input pin int prev_state_flick = LOW; // The previous flickerable state from the input pin int button_state; // The current reading from the input pin unsigned long last_debounce_time = 0; // The last time the output pin was toggled void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(115200); // initialize the button pin as an pull-up input (HIGH when the switch is open and LOW when the switch is closed) pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); // check to see if you just pressed the button // (i.e. the input went from LOW to HIGH), and you've waited long enough // since the last press to ignore any noise: // If the switch/button changed, due to noise or pressing: if (button_state != prev_state_flick) { // reset the debouncing timer last_debounce_time = millis(); // save the the last flickerable state prev_state_flick = button_state; } if ((millis() - last_debounce_time) > DEBOUNCE_TIME) { // whatever the reading is at, it's been there for longer than the debounce // delay, so take it as the actual current state: // if the button state has changed: if(prev_state_steady == HIGH && button_state == LOW) Serial.println("The button is pressed"); else if(prev_state_steady == LOW && button_state == HIGH) Serial.println("The button is released"); // save the the last steady state prev_state_steady = button_state; } }

Ausgabe des Seriellen Monitors:

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32S3 Dev Module' on 'COM15')
New Line
9600 baud
[2026-06-16 10:25:10] The button is pressed [2026-06-16 10:25:13] The button is released
Ln 11, Col 1
ESP32S3 Dev Module on COM15
2

⇒ Perfekt! Sie haben einmal gedrückt und einmal losgelassen, und der ESP32 S3 hat korrekt einen Druck und ein Loslassen erkannt. Das Prellen wurde durch eine ordentliche Tasterentprellung beseitigt.

Wir haben es vereinfacht - ESP32 S3 Code zur Tasterentprellung mit Bibliothek

Wir haben die ezButton-Bibliothek entwickelt, um das Entprellen von Tastern deutlich zu vereinfachen, besonders wenn Sie mit mehreren Tastern an Ihrem ESP32 S3 arbeiten. Anstatt Timing-Variablen manuell zu verwalten, übernimmt die Bibliothek die gesamte Entprelllogik intern und sorgt für sauberen, gut lesbaren Code – egal wie viele Taster Sie verwenden.

Mehr erfahren: Dokumentation der ezButton-Bibliothek

ESP32 S3 Code zur Entprellung eines einzelnen Tasters

Der folgende Sketch zeigt, wie Sie einen einzelnen Taster mit der ezButton-Bibliothek am ESP32 S3 entprellen. Nachdem Sie die Bibliothek eingebunden und die Entprellzeit festgelegt haben, erkennen Sie ein Drücken oder Loslassen ganz einfach, indem Sie isPressed() oder isReleased() in der Hauptschleife aufrufen.

/* * Dieser ESP32 S3 Code wurde von newbiely.de entwickelt * Dieser ESP32 S3 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32-s3/esp32-s3-button-debounce */ #include <ezButton.h> #define DEBOUNCE_TIME 50 // the debounce time in millisecond, increase this time if it still chatters ezButton button(D7); // create ezButton object for pin GPIO7 void setup() { Serial.begin(115200); button.setDebounceTime(DEBOUNCE_TIME); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first if (button.isPressed()) Serial.println("The button is pressed"); if (button.isReleased()) Serial.println("The button is released"); }

ESP32 S3 Code zur Entprellung mehrerer Taster

Dieser Sketch zeigt, wie Sie mit der ezButton-Bibliothek drei Taster gleichzeitig an Ihrem ESP32 S3 entprellen. Jeder Taster erhält ein eigenes ezButton-Objekt, und durch den Aufruf von .loop() für alle drei in der Hauptschleife wird der Entprellzustand jedes Tasters unabhängig aktuell gehalten.

Der Schaltplan

Schließen Sie drei Taster wie unten gezeigt an Ihren ESP32 S3 an.

Schaltplan ESP32 S3 Taster-Bibliothek

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Taster ESP32 S3 Pin
Taster 1 D5 und GND
Taster 2 D6 und GND
Taster 3 D7 und GND
/* * Dieser ESP32 S3 Code wurde von newbiely.de entwickelt * Dieser ESP32 S3 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32-s3/esp32-s3-button-debounce */ #include <ezButton.h> #define DEBOUNCE_TIME 50 // the debounce time in millisecond, increase this time if it still chatters ezButton button1(D5); // create ezButton object for pin D5 ezButton button2(D6); // create ezButton object for pin D6 ezButton button3(D7); // create ezButton object for pin D7 void setup() { Serial.begin(115200); button1.setDebounceTime(DEBOUNCE_TIME); // set debounce time to 50 milliseconds button2.setDebounceTime(DEBOUNCE_TIME); // set debounce time to 50 milliseconds button3.setDebounceTime(DEBOUNCE_TIME); // set debounce time to 50 milliseconds } void loop() { button1.loop(); // MUST call the loop() function first button2.loop(); // MUST call the loop() function first button3.loop(); // MUST call the loop() function first if (button1.isPressed()) Serial.println("The button 1 is pressed"); if (button1.isReleased()) Serial.println("The button 1 is released"); if (button2.isPressed()) Serial.println("The button 2 is pressed"); if (button2.isReleased()) Serial.println("The button 2 is released"); if (button3.isPressed()) Serial.println("The button 3 is pressed"); if (button3.isReleased()) Serial.println("The button 3 is released"); }

Ausgabe des Seriellen Monitors:

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32S3 Dev Module' on 'COM15')
New Line
9600 baud
[2026-06-16 10:27:05] The button 1 is pressed [2026-06-16 10:27:06] The button 2 is pressed [2026-06-16 10:27:07] The button 1 is released [2026-06-16 10:27:08] The button 3 is pressed [2026-06-16 10:27:09] The button 2 is released [2026-06-16 10:27:10] The button 3 is released
Ln 11, Col 1
ESP32S3 Dev Module on COM15
2

Anwendungsideen

Die Tasterentprellung ist eine grundlegende Technik, die eine zuverlässige Eingabeverarbeitung in vielen ESP32 S3 Projekten ermöglicht. Hier einige praktische Anwendungen, bei denen eine genaue Erkennung von Tastendrücken entscheidend ist:

  1. Türschlosssysteme: Tastenfeld-Zugangssysteme, bei denen jeder Tastendruck genau einmal registriert werden muss.
  2. Gamecontroller: Reaktionsschnelle Tastereingaben für selbstgebaute Spielgeräte auf Basis des ESP32 S3.
  3. Fernbedienungen für die Hausautomation: Zuverlässige Steuerung von Licht, Ventilatoren oder Geräten über eigene Bedienfelder.
  4. Menünavigation: Navigation mit mehreren Tastern in OLED- oder TFT-Menüs auf ESP32 S3 Geräten.
  5. Ereigniszähler: Zählschaltungen, die pro physischem Druck genau einmal hochzählen.
  6. Sicherheits-Tastenfelder: Alarm- oder Zugangskontrollsysteme, die eine zuverlässige Eingabeerkennung erfordern.

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

Sehen Sie sich unten die Schritt-für-Schritt-Videoanleitung für dieses ESP32 S3 Projekt an.

Fordern Sie sich heraus

Das Üben der Entprellung mit zunehmend komplexeren Szenarien ist der beste Weg, Sicherheit im Umgang mit Eingaben am ESP32 S3 zu gewinnen. Probieren Sie diese Herausforderungen aus, um Ihr Verständnis zu vertiefen:

  1. Einsteiger: Ändern Sie den Wert DEBOUNCE_TIME auf 20 ms, 50 ms und 100 ms und beobachten Sie, wie sich jeder Wert auf die Tasterreaktion Ihres ESP32 S3 auswirkt.
  2. Fortgeschritten: Fügen Sie eine LED hinzu, die bei jedem entprellten Tastendruck ein- und ausschaltet, und zeigen Sie so eine saubere Zustandsverwaltung.
  3. Fortgeschritten: Bauen Sie einen Zähler, der pro Tastendruck nur einmal hochzählt und die laufende Summe im Seriellen Monitor anzeigt.
  4. Experte: Implementieren Sie ein Menüsystem mit 4 Tastern, bei dem jeder entprellte Taster eine eigene Aktion auf dem ESP32 S3 ausführt.
  5. Experte: Fügen Sie eine Erkennung für langes Drücken hinzu, sodass ein kurzer Druck und ein Gedrückthalten mit einem einzigen Taster unterschiedliche Aktionen auslösen.

Zusätzliches Wissen

Wichtige Tipps zur Entprellung am ESP32 S3:

  • Der Wert DEBOUNCE_TIME hängt von Ihrer konkreten Taster-Hardware ab
  • Verschiedene Taster können unterschiedliche Entprellzeiten erfordern (typischerweise 20-100 ms)
  • Beginnen Sie mit 50 ms und passen Sie den Wert an, wenn weiterhin Prellen auftritt
  • Entprelltechniken funktionieren auch für Schalter, Endschalter, Reedschalter und Berührungssensoren
  • Hardware-Entprellung (mit Kondensatoren) kann bei kritischen Anwendungen die Software-Entprellung ergänzen

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!