ESP32 - Bouton - Anti-rebond

Parfois, lorsque vous connectez un bouton à un ESP32, il peut sembler que le bouton soit enfoncé à plusieurs reprises alors que vous ne l'appuyez qu'une seule fois. Cela est dû au fait que le bouton peut rapidement passer entre l'état enfoncé et l'état relâché. On appelle cela rebondissement, également connu sous le nom de cliquetage. Le rebondissement peut causer des problèmes dans votre programme.

Ce guide vous montrera comment résoudre ce problème pour l'ESP32 en utilisant une technique appelée debouncing avec MicroPython. Le debouncing aide l'ESP32 à reconnaître un seul appui sur le bouton comme un seul appui.

ESP32 MicroPython phénomène de chatter

Nous apprendrons grâce aux étapes ci-dessous :

À propos du bouton

Si vous n'êtes pas encore familiarisé avec les boutons (y compris leur brochage, leur fonctionnement, l'interfaçage avec l'ESP32 et l'écriture de code MicroPython pour l'ESP32 afin d'interagir avec eux), vous pouvez en savoir plus à l'adresse suivante :

Diagramme de câblage

Schéma de câblage du bouton ESP32 MicroPython

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Schéma de câblage d'un bouton-poussoir à deux broches pour ESP32 MicroPython

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Comparons le code MicroPython pour ESP32 sans et avec anti-rebond pour voir comment l'anti-rebond affecte le comportement.

ESP32 - Bouton sans anti-rebond

Tout d'abord, examinons le code MicroPython pour l'ESP32 sans anti-rebond afin de comprendre son comportement.

/* * Ce code ESP32 MicroPython a été développé par newbiely.fr * Ce code ESP32 MicroPython est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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

Étapes rapides

Voici des instructions sur la façon de configurer et d’exécuter votre code MicroPython sur l’ESP32 en utilisant l’IDE Thonny :

  • Assurez-vous que l'IDE Thonny est installé sur votre ordinateur.
  • Assurez-vous que le firmware MicroPython est chargé sur votre carte ESP32.
  • Si c'est votre première utilisation d'un ESP32 avec MicroPython, consultez le guide ESP32 - Premiers pas. pour des instructions étape par étape.
  • Branchez le bouton sur l'ESP32 tel qu'indiqué sur le diagramme.
  • Branchez la carte ESP32 à votre ordinateur avec un câble USB.
  • Ouvrez l'IDE Thonny sur votre ordinateur.
  • Dans l'IDE Thonny, allez dans Outils Options.
  • Sous l'onglet Interpreter, choisissez MicroPython (ESP32) dans le menu déroulant.
  • Assurez-vous que le bon port est sélectionné. L'IDE Thonny le détecte généralement automatiquement, mais vous devrez peut-être le sélectionner manuellement (comme COM12 sur Windows ou /dev/ttyACM0 sur Linux).
  • Copiez le code MicroPython fourni et collez-le dans l'éditeur de Thonny.
  • Enregistrez le code sur votre ESP32 en:
    • En cliquant sur le bouton Enregistrer ou en appuyant sur Ctrl+S.
    • Dans la boîte de dialogue d'enregistrement, choisissez périphérique MicroPython.
    • Nommez le fichier main.py.
  • Cliquez sur le bouton vert Exécuter (ou appuyez sur F5) pour exécuter le script.
  • Maintenez le bouton enfoncé pendant quelques secondes, puis relâchez-le.
  • Consultez le message dans le Shell situé en bas de l'IDE Thonny.
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 ≡

Comme vous pouvez le voir dans le journal, vous avez appuyé sur le bouton une seule fois, mais l'ESP32 a détecté plusieurs appuis.

Anti-rebond ESP32 pour un bouton

/* * Ce code ESP32 MicroPython a été développé par newbiely.fr * Ce code ESP32 MicroPython est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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")
Étapes rapides
  • Dans l'IDE Thonny, accédez à Outils Gérer les paquets.
  • Recherchez “DIYables-MicroPython-Button”, puis trouvez la bibliothèque Button créée par DIYables.
  • Cliquez sur DIYables-MicroPython-Button, puis cliquez sur le bouton Install pour installer la bibliothèque Button.
Bibliothèque de bouton MicroPython pour ESP32
  • Copiez le code fourni et collez-le dans l'éditeur de l'IDE Thonny.
  • Enregistrez le script sur votre carte ESP32.
  • Cliquez sur le bouton vert Exécuter (ou appuyez sur F5) pour démarrer le script. Le script va démarrer.
  • Appuyez sur le bouton.
  • Consultez le message dans le Shell en bas de l'IDE Thonny.
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 ≡

Vous avez appuyé sur le bouton une fois, et l'ESP32 l'a correctement identifié comme une seule pression et un relâchement, sans perturbations supplémentaires.

※ Note:

Différentes applications utilisent des paramètres DEBOUNCE_TIME différents. Chaque application peut avoir une valeur spécifique.

Anti-rebond ESP32 pour plusieurs boutons

Ajoutons le filtrage anti-rebond à quatre boutons en utilisant l'ESP32 avec MicroPython. Voici comment les connecter à votre ESP32 :

Schéma de câblage ESP32 MicroPython pour 4 boutons

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

/* * Ce code ESP32 MicroPython a été développé par newbiely.fr * Ce code ESP32 MicroPython est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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")

Vidéo

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !