ESP32 S3 - Mehrere Taster

Dieses Tutorial zeigt Ihnen, wie Sie einen ESP32 S3 so programmieren, dass er mehrere Taster gleichzeitig nutzt, ohne auf die Funktion delay() angewiesen zu sein. Am Ende dieses Tutorials kennen Sie zwei bewährte Ansätze, um mehrere Taster auf der ESP32 S3 Plattform sauber und effizient auszulesen.

Was Sie bauen werden:

  1. Eine Schaltung mit mehreren Tastern, die über ein Breadboard mit dem ESP32 S3 verbunden ist
  2. Code, der Drück- und Loslassereignisse für jeden Taster unabhängig erkennt
  3. Eine entprellte Version, die fehlerhafte Tastermesswerte eliminiert
  4. Eine Array-basierte Version, die sich sauber auf beliebig viele Taster erweitern lässt

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-mount Button
1×Taster-Modul
1×Breadboard
1×Verbindungskabel
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

Der ESP32 S3 verarbeitet digitale Eingaben von Tastern über seine GPIO-Pins mit integrierten Pull-up-Widerständen, was die Verdrahtung unkompliziert macht. Wir haben spezielle Tutorials zu Tastern, die ausführliche Informationen und Schritt-für-Schritt-Anleitungen zu Pinbelegung, Funktionsprinzip, Verdrahtung mit dem ESP32 S3 und ESP32 S3 Code enthalten. Mehr dazu erfahren Sie unter den folgenden Links:

Wichtige Spezifikationen

Die in diesem Tutorial verwendeten Taster sind handelsübliche, breadboardtaugliche Kurzhubtaster. Sie arbeiten mit 3,3-V-Logikpegeln, was der GPIO-Spannung des ESP32 S3 entspricht, und ziehen bei Verwendung der integrierten Pull-up-Widerstände einen vernachlässigbaren Strom.

Verdrahtungsdiagramm

Verbinden Sie jeden Taster auf Ihrem Breadboard zwischen einem GPIO-Pin und GND und nutzen Sie die internen Pull-up-Widerstände des ESP32 S3, um den Pin auf HIGH zu halten, solange der Taster nicht gedrückt ist.

Sicherheitshinweise

Verbinden Sie Taster immer mit GND und aktivieren Sie die internen Pull-ups im Code, anstatt sie direkt mit 3,3 V zu verbinden – so vermeiden Sie versehentliche Kurzschlüsse. Überprüfen Sie, dass alle Taster auf dem Breadboard eine gemeinsame GND-Schiene nutzen, bevor Sie den ESP32 S3 einschalten.

ESP32 S3 mehrere Taster Schaltplan

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

ESP32 S3 Code - Mehrere Taster mit Entprellung

Beim Umgang mit mehreren Tastern kann es in bestimmten Situationen komplex werden, etwa wenn gleichzeitiges Drücken, Prellrauschen oder die Erkennung von Zustandswechseln berücksichtigt werden müssen. Der folgende Code verwendet die ezButton-Bibliothek, die Entprellung und Tasterereignisse intern verarbeitet, sodass Sie Zeitstempel und Zustandsvariablen nicht für jeden Taster manuell verwalten müssen.

/* * 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-multiple-button */ /* * This ESP32-S3 code is created by esp32io.com * * This ESP32-S3 code is released in the public domain * * For more detail (instruction and wiring diagram), visit https://esp32io.com/tutorials/esp32-s3-multiple-button */ #include <ezButton.h> #define BUTTON_PIN_1 4 // The ESP32-S3 pin GPIO4 connected to the button 1 #define BUTTON_PIN_2 5 // The ESP32-S3 pin GPIO5 connected to the button 2 #define BUTTON_PIN_3 6 // The ESP32-S3 pin GPIO6 connected to the button 3 #define BUTTON_PIN_4 7 // The ESP32-S3 pin GPIO7 connected to the button 4 ezButton button1(BUTTON_PIN_1); // create ezButton object for button 1 ezButton button2(BUTTON_PIN_2); // create ezButton object for button 2 ezButton button3(BUTTON_PIN_3); // create ezButton object for button 3 ezButton button4(BUTTON_PIN_4); // create ezButton object for button 4 void setup() { Serial.begin(9600); button1.setDebounceTime(100); // set debounce time to 100 milliseconds button2.setDebounceTime(100); // set debounce time to 100 milliseconds button3.setDebounceTime(100); // set debounce time to 100 milliseconds button4.setDebounceTime(100); // set debounce time to 100 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 button4.loop(); // MUST call the loop() function first // get button state after debounce int button1_state = button1.getState(); // the state after debounce int button2_state = button2.getState(); // the state after debounce int button3_state = button3.getState(); // the state after debounce int button4_state = button4.getState(); // the state after debounce /* Serial.print("The button 1 state: "); Serial.println(button1_state); Serial.print("The button 2 state: "); Serial.println(button2_state); Serial.print("The button 3 state: "); Serial.println(button3_state); Serial.print("The button 4 state: "); Serial.println(button4_state); */ 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"); if (button4.isPressed()) Serial.println("The button 4 is pressed"); if (button4.isReleased()) Serial.println("The button 4 is released"); }

Schnelle Schritte

  1. Neu beim ESP32 S3? Arbeiten Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3 durch.
  2. Führen Sie die Verdrahtung wie im obigen Diagramm gezeigt durch.
  3. Verbinden Sie das ESP32 S3 Board über ein USB-Type-C-Kabel mit Ihrem PC.
  4. Öffnen Sie die Arduino IDE auf Ihrem PC.
  5. Wählen Sie das richtige ESP32 S3 Board und den richtigen COM-Port aus.
  6. Klicken Sie auf das Symbol Libraries in der linken Leiste der Arduino IDE.
  7. Suchen Sie nach "ezButton" und finden Sie die Taster-Bibliothek von ArduinoGetStarted.
  8. Klicken Sie auf die Schaltfläche Install, um die ezButton-Bibliothek zu installieren.
  • Search for ezButton created by ArduinoGetStarted.com and click the Install button.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Library Manager
Type:
All
Topic:
All
ezButton by ArduinoGetStarted.com
Button library supports debounce, pressed/released events and the press counting. It is easy to use with multiple buttons. The library can be used for push-button, momentary switches, toggle switch, magnetic contact switch (door sensor)... It is designed for not only beginners but also experienced users. More info
1.0.6
INSTALL
Newbiely.ino
···
1 void setup() {
Output
Serial Monitor
Ln 1, Col 1
ESP32S3 Dev Module on COM15
1
  1. Kopieren Sie den obigen Code und fügen Sie ihn in die Arduino IDE ein.
  2. Kompilieren Sie den Code und laden Sie ihn auf das ESP32 S3 Board hoch, indem Sie in der Arduino IDE auf die Schaltfläche Upload klicken.
Wie man ESP32 S3 Code in der Arduino IDE hochlädt
  1. Öffnen Sie den Seriellen Monitor in der Arduino IDE.
  2. Drücken Sie jeden Taster nacheinander und lassen Sie ihn wieder los, um die Ausgabe zu beobachten.
∞
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-01-01 10:00:01] The button 1 is pressed [2026-01-01 10:00:01] The button 1 is released [2026-01-01 10:00:03] The button 2 is pressed [2026-01-01 10:00:03] The button 2 is released [2026-01-01 10:00:05] The button 3 is pressed [2026-01-01 10:00:05] The button 3 is released [2026-01-01 10:00:07] The button 4 is pressed [2026-01-01 10:00:07] The button 4 is released
Ln 11, Col 1
ESP32S3 Dev Module on COM15
2

Profi-Tipp: Wenn ein Taster bei einem einzigen Klick mehrere Betätigungen registriert, erhöhen Sie die Entprellzeit in den ezButton-Einstellungen, um das mechanische Prellen Ihrer Taster herauszufiltern.

ESP32 S3 Code - Mehrere Taster mit einem Array

Wir können den bereitgestellten Code verbessern, indem wir ein Array von Tastern verwenden. Dadurch wird das Hinzufügen oder Entfernen von Tastern so einfach wie das Ändern einer einzigen Konstante. Der folgende Code zeigt, wie dieses Array die Taster-Objekte verwaltet und sie bei jedem Durchlauf einheitlich durchläuft.

/* * 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-multiple-button */ /* * This ESP32-S3 code is created by esp32io.com * * This ESP32-S3 code is released in the public domain * * For more detail (instruction and wiring diagram), visit https://esp32io.com/tutorials/esp32-s3-multiple-button */ #include <ezButton.h> #define BUTTON_NUM 4 // the number of buttons #define BUTTON_PIN_1 4 // The ESP32-S3 pin GPIO4 connected to the button 1 #define BUTTON_PIN_2 5 // The ESP32-S3 pin GPIO5 connected to the button 2 #define BUTTON_PIN_3 6 // The ESP32-S3 pin GPIO6 connected to the button 3 #define BUTTON_PIN_4 7 // The ESP32-S3 pin GPIO7 connected to the button 4 ezButton buttonArray[] = { ezButton(BUTTON_PIN_1), ezButton(BUTTON_PIN_2), ezButton(BUTTON_PIN_3), ezButton(BUTTON_PIN_4) }; void setup() { Serial.begin(9600); for (byte i = 0; i < BUTTON_NUM; i++) { buttonArray[i].setDebounceTime(100); // set debounce time to 100 milliseconds } } void loop() { for (byte i = 0; i < BUTTON_NUM; i++) buttonArray[i].loop(); // MUST call the loop() function first for (byte i = 0; i < BUTTON_NUM; i++) { // get button state after debounce int button_state = buttonArray[i].getState(); // the state after debounce /* Serial.print("The button "); Serial.print(i + 1); Serial.print(": "); Serial.println(button_state); */ if (buttonArray[i].isPressed()) { Serial.print("The button "); Serial.print(i + 1); Serial.println(" is pressed"); } if (buttonArray[i].isReleased()) { Serial.print("The button "); Serial.print(i + 1); Serial.println(" is released"); } } }

Anwendungen

Die gleichzeitige Verwaltung mehrerer Taster am ESP32 S3 eröffnet eine breite Palette praktischer Anwendungsfälle, von einfachen Bedienelementen bis hin zu komplexen Menünavigationssystemen. Hier sind einige typische Anwendungen:

  1. Menünavigation: Verwenden Sie vier Taster für Auf, Ab, Auswählen und Zurück in einem OLED-Display-Menü.
  2. Spielcontroller: Ordnen Sie Taster Richtungs- oder Aktionseingaben für einfache eingebettete Spiele zu.
  3. Tastenfeld-Ersatz: Ersetzen Sie ein Hardware-Tastenfeld durch einzelne Taster für individuelle Bedienfeld-Layouts.
  4. Modusauswahl: Wechseln Sie mit eigenen Modustastern zwischen den Betriebsmodi eines Geräts.
  5. Not-Aus: Verdrahten Sie mehrere Not-Aus-Taster an einer Maschine für eine redundante Abschaltung.

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.

Herausforderungen

Über das grundlegende Tutorial hinaus zu experimentieren ist der beste Weg, Ihr Verständnis für die Verarbeitung mehrerer Taster am ESP32 S3 zu vertiefen. Probieren Sie diese Herausforderungen aus, um Sicherheit mit fortgeschritteneren Techniken zu gewinnen:

  1. Einsteiger: Ändern Sie den Code so, dass vier einzelne LEDs gesteuert werden, die jeweils mit einem eigenen Taster umgeschaltet werden.
  2. Fortgeschritten: Implementieren Sie ein Zahlenschloss, das sich nur öffnet, wenn die Taster in einer bestimmten Reihenfolge gedrückt werden.
  3. Experte: Erstellen Sie eine Bedienoberfläche im Stil eines Drehgebers mit zwei Tastern zum Erhöhen und Verringern, mit Erkennung langer Tastendrücke zur Beschleunigung.

※ 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!