ESP32 - Taster - Entprellung

Wenn Sie einen Taster an einen ESP32 anschließen, kann es manchmal so aussehen, als ob der Taster mehrmals gedrückt wurde, obwohl Sie ihn nur einmal gedrückt haben. Das liegt daran, dass der Taster schnell zwischen gedrückt und nicht gedrückt wechseln kann. Dies nennt man Prellen (engl. bouncing), auch bekannt als Kontaktprellen (engl. chattering). Prellen kann Probleme in Ihrem Programm verursachen.

Diese Anleitung zeigt Ihnen, wie Sie dieses Problem beim ESP32 mit einer Technik namens Entprellung (engl. debouncing) mit MicroPython beheben. Die Entprellung hilft dem ESP32, einen einzelnen Tastendruck auch als genau einen Druck zu erkennen.

ESP32 MicroPython Prellphänomen

Wir lernen dies in den folgenden Schritten:

Überblick über Button

Wenn Sie mit Tastern noch nicht vertraut sind (einschließlich Pinbelegung, Funktionsweise, Anschluss an den ESP32 und dem Schreiben von MicroPython-Code für den ESP32), finden Sie weitere Informationen unter:

Verdrahtungsdiagramm

  • So verbinden Sie ESP32 und Taster mit einem Steckbrett
ESP32 MicroPython Taster Schaltplan

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

ESP32 MicroPython zweipoliger Drucktaster Schaltplan

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

Vergleichen wir den ESP32 MicroPython-Code ohne und mit Entprellung, um zu sehen, wie sich die Entprellung auf das Verhalten auswirkt.

ESP32 - Taster ohne Entprellung

Schauen wir uns zunächst den MicroPython-Code für den ESP32 ohne Entprellung an, um sein Verhalten zu verstehen.

/* * Dieser ESP32 MicroPython Code wurde von newbiely.de entwickelt * Dieser ESP32 MicroPython 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-micropython/esp32-micropython-button-debounce */ from machine import Pin import time BUTTON_PIN = 21 # The ESP32 pin GPIO21 connected to the button # Setup the button pin. The Pin.PULL_UP enables the internal pull-up resistor. button = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP) # Initialize the previous state of the button prev_button_state = 1 # Assuming the button is unpressed initially while True: # Read the current state of the button button_state = button.value() # Check if button was released if prev_button_state == 0 and button_state == 1: print("The button is released") # Check if button was pressed if prev_button_state == 1 and button_state == 0: print("The button is pressed") # Save the current state as the previous state for the next loop iteration prev_button_state = button_state

Schnelle Schritte

So richten Sie Ihren MicroPython-Code auf dem ESP32 mit der Thonny IDE ein und führen ihn aus:

  • Stellen Sie sicher, dass die Thonny IDE auf Ihrem Computer installiert ist.
  • Vergewissern Sie sich, dass die MicroPython-Firmware auf Ihrem ESP32-Board installiert ist.
  • Wenn Sie zum ersten Mal einen ESP32 mit MicroPython verwenden, lesen Sie die Anleitung ESP32 MicroPython Erste Schritte für eine Schritt-für-Schritt-Anleitung.
  • Schließen Sie den Taster wie im Schaltplan gezeigt an den ESP32 an.
  • Verbinden Sie das ESP32-Board über ein USB-Kabel mit Ihrem Computer.
  • Öffnen Sie die Thonny IDE auf Ihrem Computer.
  • Gehen Sie in der Thonny IDE zu Tools Options.
  • Wählen Sie im Reiter Interpreter die Option MicroPython (ESP32) aus dem Dropdown-Menü.
  • Stellen Sie sicher, dass der richtige Port ausgewählt ist. Die Thonny IDE erkennt ihn normalerweise automatisch, aber eventuell müssen Sie ihn manuell auswählen (z. B. COM12 unter Windows oder /dev/ttyACM0 unter Linux).
  • Kopieren Sie den bereitgestellten MicroPython-Code und fügen Sie ihn in den Editor von Thonny ein.
  • Speichern Sie den Code auf Ihrem ESP32:
    • Klicken Sie auf die Schaltfläche Save oder drücken Sie Ctrl+S.
    • Wählen Sie im Speicherdialog MicroPython device.
    • Benennen Sie die Datei main.py.
  • Klicken Sie auf die grüne Schaltfläche Run (oder drücken Sie F5), um das Skript auszuführen.
  • Halten Sie den Taster einige Sekunden gedrückt und lassen Sie ihn dann los.
  • Sehen Sie sich die Meldung in der Shell unten in der Thonny IDE an.
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot The button is pressed The button is pressed The button is pressed The button is released The button is released
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡

Wie Sie im Protokoll sehen, haben Sie den Taster nur einmal gedrückt, aber der ESP32 hat mehrere Tastendrücke erkannt.

ESP32 Entprellung für einen Taster

/* * Dieser ESP32 MicroPython Code wurde von newbiely.de entwickelt * Dieser ESP32 MicroPython 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-micropython/esp32-micropython-button-debounce */ from DIYables_MicroPython_Button import Button import time # Initialize buttons connected to GPIO pins GPIO21 button = Button(21) button.set_debounce_time(100) # Set debounce time to 100 milliseconds while True: button.loop() if button.is_pressed(): print("The button is pressed") if button.is_released(): print("The button is released")
Schnelle Schritte
  • Navigieren Sie in der Thonny IDE zu Tools Manage packages.
  • Suchen Sie nach “DIYables-MicroPython-Button” und finden Sie die Button-Bibliothek von DIYables.
  • Klicken Sie auf DIYables-MicroPython-Button und dann auf die Schaltfläche Install, um die Button-Bibliothek zu installieren.
ESP32 MicroPython Button-Bibliothek
  • Kopieren Sie den angegebenen Code und fügen Sie ihn in den Editor der Thonny IDE ein.
  • Speichern Sie das Skript auf Ihrem ESP32-Board.
  • Klicken Sie auf die grüne Schaltfläche Run (oder drücken Sie F5), um das Skript zu starten. Das Skript wird ausgeführt.
  • Drücken Sie den Taster.
  • Sehen Sie sich die Meldung in der Shell unten in der Thonny IDE an.
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot The button is pressed The button is released
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡

Sie haben den Taster einmal gedrückt, und der ESP32 hat dies korrekt als einzelnes Drücken und Loslassen erkannt, ohne zusätzliche Störungen.

※ Notiz:

Verschiedene Anwendungen verwenden unterschiedliche DEBOUNCE_TIME-Einstellungen. Jede Anwendung kann ihren eigenen spezifischen Wert haben.

ESP32 Entprellung für mehrere Taster

Fügen wir die Entprellung für vier Taster am ESP32 mit MicroPython hinzu. So schließen Sie sie an Ihren ESP32 an:

ESP32 MicroPython 4 Taster Schaltplan

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

/* * Dieser ESP32 MicroPython Code wurde von newbiely.de entwickelt * Dieser ESP32 MicroPython 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-micropython/esp32-micropython-button-debounce */ from DIYables_MicroPython_Button import Button import time button_1 = Button(25) # Initialize buttons connected to ESP32 pin GPIO25 button_2 = Button(26) # Initialize buttons connected to ESP32 pin GPIO26 button_3 = Button(27) # Initialize buttons connected to ESP32 pin GPIO27 button_4 = Button(14) # Initialize buttons connected to ESP32 pin GPIO14 button_1.set_debounce_time(100) # Set debounce time to 100 milliseconds button_2.set_debounce_time(100) # Set debounce time to 100 milliseconds button_3.set_debounce_time(100) # Set debounce time to 100 milliseconds button_4.set_debounce_time(100) # Set debounce time to 100 milliseconds while True: button_1.loop() button_2.loop() button_3.loop() button_4.loop() if button_1.is_pressed(): print("The button 1 is pressed") if button_1.is_released(): print("The button 1 is released") if button_2.is_pressed(): print("The button 2 is pressed") if button_2.is_released(): print("The button 2 is released") if button_3.is_pressed(): print("The button 3 is pressed") if button_3.is_released(): print("The button 3 is released") if button_4.is_pressed(): print("The button 4 is pressed") if button_4.is_released(): print("The button 4 is released")

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.

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