ESP32 S3 - Bouton - Anti-rebond

Les boutons mécaniques sont des composants trompeusement simples, mais ils ont un défaut qui peut perturber vos projets ESP32 S3 : le rebond (chattering). Ce tutoriel vous explique ce qu'est le rebond, pourquoi il pose problème, et comment l'éliminer en utilisant à la fois du code Arduino brut et la bibliothèque ezButton.

Ce que vous allez construire :

  1. Un croquis de test qui démontre le rebond de bouton sans anti-rebond
  2. Un croquis avec anti-rebond utilisant une synchronisation manuelle avec millis()
  3. Un exemple d'anti-rebond pour un seul bouton utilisant la bibliothèque ezButton
  4. Un exemple d'anti-rebond pour plusieurs boutons gérant trois boutons simultanément
ESP32 S3 - Button - Debounce

Quand vous appuyez sur un bouton, son état passe-t-il de LOW à HIGH (ou de HIGH à LOW) une seule fois ? Pas vraiment ! Dans le monde réel, un seul appui sur un bouton fait basculer l'état entre LOW et HIGH plusieurs fois très rapidement. C'est une caractéristique physique des boutons mécaniques appelée rebond (chattering). Ce phénomène de rebond fait que votre ESP32 S3 détecte plusieurs appuis de bouton alors que vous n'avez appuyé qu'une seule fois, ce qui provoque des erreurs dans vos projets. La solution pour éliminer ce problème s'appelle l'anti-rebond de bouton (debounce).

ESP32 S3 chattering phenomenon

Ce tutoriel couvre :

À propos du bouton

Les boutons sont des dispositifs d'entrée fondamentaux qui détectent quand ils sont appuyés ou relâchés. Comprendre leur comportement électrique — y compris leur tendance au rebond — est essentiel pour construire des projets ESP32 S3 fiables.

Nous avons un tutoriel dédié qui couvre tout sur les boutons avec ESP32 S3 :

Spécifications clés

Le tutoriel dédié au bouton inclut le détail complet du brochage, le fonctionnement électrique des boutons, les connexions de câblage pas à pas, des exemples de code, et des conseils de dépannage pour les problèmes courants.

En savoir plus : ESP32 S3 - Bouton

Schéma de câblage

Connectez un seul bouton à votre ESP32 S3 en câblant une broche à GPIO7 et l'autre broche à GND. La résistance de pull-up interne de l'ESP32 S3 se charge du reste, aucune résistance externe n'est donc nécessaire.

ESP32 S3 Button Wiring Diagram

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

Notes de sécurité

Connectez toujours le bouton entre une broche GPIO et GND plutôt que directement au 3,3V, car le code repose sur la configuration de pull-up interne. Évitez de connecter des boutons à GPIO0 pendant le développement, car cette broche est utilisée par le bootloader de l'ESP32 S3.

Broche du bouton Broche ESP32 S3
Une broche GPIO7
Autre broche GND

Pour bien voir la différence, nous allons d'abord exécuter le code ESP32 S3 SANS anti-rebond, puis AVEC anti-rebond, et comparer les résultats.

Lire un bouton sans anti-rebond

Étapes rapides

  1. Nouveau sur ESP32 S3 ? Suivez d'abord notre guide ESP32 S3 - Premiers pas.
  2. Câblez les composants : suivez le schéma de câblage ci-dessus pour connecter le bouton à la broche GPIO7.
  3. Connectez la carte : branchez votre ESP32 S3 à votre ordinateur avec un câble USB Type-C.
  4. Ouvrez Arduino IDE : lancez Arduino IDE sur votre ordinateur.
  5. Sélectionnez votre carte : choisissez "ESP32S3 Dev Module" et le bon port COM dans le menu Tools.
  6. Téléversez le code : copiez le code ci-dessous et téléversez-le sur votre carte ESP32 S3.
  7. Ouvrez le Serial Monitor : cliquez sur l'icône Serial Monitor pour voir la sortie.
  8. Testez le bouton : appuyez une fois sur le bouton et maintenez-le pendant plusieurs secondes, puis relâchez-le.
  9. Observez les résultats : regardez la sortie du Serial Monitor montrant plusieurs événements d'appui/relâchement.
  10. Astuce pro : si vous ne voyez pas de rebond immédiatement, essayez d'appuyer sur le bouton plusieurs fois — c'est un phénomène aléatoire qui apparaît de façon intermittente.
/* * Ce code ESP32 S3 a été développé par newbiely.fr * Ce code ESP32 S3 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-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; }
Arduino IDE Upload Code
How to open serial monitor on Arduino IDE

Sortie du Serial Monitor :

∞
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

⇒ Comme vous pouvez le voir, vous avez appuyé sur le bouton une seule fois et l'avez relâché une seule fois, mais l'ESP32 S3 a détecté plusieurs appuis et relâchements à cause du rebond.

※ Note:

Le phénomène de rebond ne se produit pas à chaque fois. S'il ne se produit pas, essayez le test ci-dessus plusieurs fois pour l'observer.

Lire un bouton avec anti-rebond

Ce croquis élimine le rebond en implémentant l'anti-rebond de bouton sur votre ESP32 S3. Il enregistre l'horodatage du premier changement d'état du bouton, puis attend un court délai configurable avant de confirmer le nouvel état — en ignorant toute oscillation rapide se produisant pendant cette fenêtre. Le résultat est que seuls les appuis et relâchements de bouton stables et intentionnels sont signalés à votre application.

Étapes rapides

  1. Nouveau sur ESP32 S3 ? Suivez d'abord notre guide ESP32 S3 - Premiers pas.
  2. Copiez le code : copiez le code d'anti-rebond ci-dessous dans Arduino IDE.
  3. Téléversez le code : cliquez sur le bouton Upload pour programmer votre ESP32 S3.
  4. Ouvrez le Serial Monitor : cliquez sur l'icône Serial Monitor pour voir la sortie.
  5. Testez le bouton : appuyez sur le bouton et maintenez-le pendant plusieurs secondes, puis relâchez-le.
  6. Observez les résultats : remarquez que vous ne voyez maintenant qu'un seul événement d'appui et un seul événement de relâchement.
  7. Astuce pro : si vous voyez encore du rebond, essayez d'augmenter la valeur de DEBOUNCE_TIME de 50 à 100 millisecondes.
/* * Ce code ESP32 S3 a été développé par newbiely.fr * Ce code ESP32 S3 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-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; } }

Sortie du Serial Monitor :

∞
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

⇒ Parfait ! Vous avez appuyé une fois et relâché une fois, et l'ESP32 S3 a correctement lu un appui et un relâchement. Le rebond a été éliminé grâce à un anti-rebond de bouton approprié.

Nous avons simplifié les choses - Code d'anti-rebond de bouton ESP32 S3 avec une bibliothèque

Nous avons créé la bibliothèque ezButton pour rendre l'anti-rebond de bouton beaucoup plus facile, en particulier lorsque vous travaillez avec plusieurs boutons sur votre ESP32 S3. Au lieu de gérer manuellement des variables de synchronisation, la bibliothèque gère en interne toute la logique d'anti-rebond, ce qui vous donne un code propre et lisible, quel que soit le nombre de boutons que vous gérez.

En savoir plus : documentation de la bibliothèque ezButton

Code d'anti-rebond de bouton ESP32 S3 pour un seul bouton

Le croquis suivant montre comment gérer l'anti-rebond d'un seul bouton en utilisant la bibliothèque ezButton sur ESP32 S3. Après avoir inclus la bibliothèque et défini le temps d'anti-rebond, détecter un appui ou un relâchement est aussi simple qu'appeler isPressed() ou isReleased() dans la boucle principale.

/* * Ce code ESP32 S3 a été développé par newbiely.fr * Ce code ESP32 S3 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-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"); }

Code d'anti-rebond de bouton ESP32 S3 pour plusieurs boutons

Ce croquis démontre comment gérer l'anti-rebond de trois boutons simultanément sur votre ESP32 S3 en utilisant la bibliothèque ezButton. Chaque bouton obtient son propre objet ezButton, et appeler .loop() sur les trois dans la boucle principale garde l'état d'anti-rebond de chaque bouton à jour indépendamment.

Le schéma de câblage

Connectez trois boutons à votre ESP32 S3 comme indiqué ci-dessous.

ESP32 S3 Button Library Wiring Diagram

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

Bouton Broche ESP32 S3
Bouton 1 D5 et GND
Bouton 2 D6 et GND
Bouton 3 D7 et GND
/* * Ce code ESP32 S3 a été développé par newbiely.fr * Ce code ESP32 S3 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-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"); }

Sortie du Serial Monitor :

∞
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

Idées d'applications

L'anti-rebond de bouton est une technique fondamentale qui permet une gestion fiable des entrées dans un large éventail de projets ESP32 S3. Voici quelques applications pratiques où une détection précise des appuis de bouton est essentielle :

  1. Systèmes de verrouillage de porte : systèmes d'entrée par clavier où chaque appui de bouton doit être enregistré exactement une fois.
  2. Manettes de jeu : entrée de bouton réactive pour des périphériques de jeu DIY construits sur ESP32 S3.
  3. Télécommandes domotiques : contrôle fiable des lumières, ventilateurs ou appareils depuis des panneaux de télécommande personnalisés.
  4. Navigation de menu : navigation multi-boutons pour des menus d'affichage OLED ou TFT sur des appareils ESP32 S3.
  5. Compteurs d'événements : circuits de comptage qui s'incrémentent exactement une fois par appui physique.
  6. Claviers de sécurité : systèmes d'alarme ou de contrôle d'accès nécessitant une détection d'entrée fiable.

Vidéo

Regardez la vidéo pas à pas de ce projet ESP32 S3 ci-dessous.

Mettez-vous au défi

Pratiquer l'anti-rebond avec des scénarios progressivement plus complexes est la meilleure façon de gagner en confiance avec la gestion des entrées sur ESP32 S3. Essayez ces défis pour approfondir votre compréhension :

  1. Débutant : changez la valeur de DEBOUNCE_TIME à 20 ms, 50 ms et 100 ms et observez comment chaque valeur affecte la réponse du bouton sur votre ESP32 S3.
  2. Intermédiaire : ajoutez une LED qui s'allume et s'éteint à chaque appui de bouton avec anti-rebond, démontrant une gestion d'état propre.
  3. Intermédiaire : construisez un compteur d'appuis qui s'incrémente une seule fois par appui de bouton et affiche le total courant sur le Serial Monitor.
  4. Avancé : implémentez un système de menu à 4 boutons où chaque bouton avec anti-rebond effectue une action distincte sur l'ESP32 S3.
  5. Avancé : ajoutez une détection d'appui long pour qu'un appui court et un appui maintenu déclenchent des comportements différents en utilisant un seul bouton.

Connaissances supplémentaires

Conseils importants d'anti-rebond pour ESP32 S3 :

  • La valeur DEBOUNCE_TIME dépend de votre matériel de bouton spécifique
  • Différents boutons peuvent nécessiter différents temps d'anti-rebond (généralement 20 à 100 ms)
  • Commencez avec 50 ms et ajustez si vous voyez encore du rebond
  • Les techniques d'anti-rebond fonctionnent aussi pour les interrupteurs, les interrupteurs de fin de course, les interrupteurs reed et les capteurs tactiles
  • L'anti-rebond matériel (utilisant des condensateurs) peut compléter l'anti-rebond logiciel pour les applications critiques

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