ESP32 S3 - Boutons Multiples

Ce tutoriel vous guide dans la programmation d'un ESP32 S3 pour utiliser plusieurs boutons simultanément sans s'appuyer sur la fonction delay(). À la fin de ce tutoriel, vous comprendrez deux approches éprouvées pour lire plusieurs boutons proprement et efficacement sur la plateforme ESP32 S3.

Ce que vous allez construire :

  1. Un circuit multi-boutons câblé à l'ESP32 S3 en utilisant une breadboard
  2. Un code qui détecte les événements de pression et de relâchement pour chaque bouton indépendamment
  3. Une version avec anti-rebond qui élimine les lectures de bouton erronées
  4. Une version basée sur un tableau qui s'adapte proprement à n'importe quel nombre de boutons

À propos du Bouton

L'ESP32 S3 gère les entrées numériques des boutons en utilisant ses broches GPIO avec des résistances de pull-up intégrées, ce qui rend le câblage simple. Nous avons des tutoriels spécifiques sur les boutons qui contiennent des informations détaillées et des instructions étape par étape sur le brochage du matériel, le principe de fonctionnement, la connexion de câblage à l'ESP32 S3, et le code ESP32 S3. En savoir plus sur eux aux liens suivants :

Spécifications Clés

Les boutons utilisés dans ce tutoriel sont des interrupteurs tactiles momentanés standard compatibles avec les breadboards. Ils fonctionnent à des niveaux logiques de 3,3 V, ce qui correspond à la tension GPIO de l'ESP32 S3, et consomment un courant négligeable en utilisant les résistances de pull-up intégrées.

Schéma de Câblage

Connectez chaque bouton entre une broche GPIO et GND sur votre breadboard, en vous appuyant sur les résistances de pull-up internes de l'ESP32 S3 pour maintenir la broche à HIGH quand le bouton n'est pas pressé.

Notes de Sécurité

Câblez toujours les boutons à GND et activez les pull-ups internes dans le code plutôt que de connecter directement à 3,3 V, ce qui évite les courts-circuits accidentels. Vérifiez deux fois que chaque bouton partage un rail GND commun sur la breadboard avant d'alimenter l'ESP32 S3.

Schéma de Câblage Boutons Multiples ESP32 S3

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

Code ESP32 S3 - Boutons Multiples avec Anti-rebond

Quand on traite plusieurs boutons, une complexité peut apparaître dans des situations spécifiques où des pressions simultanées, du bruit de rebond, ou une détection de changement d'état sont nécessaires. Le code suivant utilise la bibliothèque ezButton pour gérer l'anti-rebond et les événements de bouton en interne, vous évitant de gérer manuellement des horodatages et des variables d'état pour chaque bouton.

/* * 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-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"); }

Étapes Rapides

  1. Nouveau sur ESP32 S3 ? Terminez d'abord notre guide ESP32 S3 - Premiers pas.
  2. Faites le câblage comme montré dans le schéma ci-dessus.
  3. Connectez la carte ESP32 S3 à votre PC via un câble USB Type-C.
  4. Ouvrez l'Arduino IDE sur votre PC.
  5. Sélectionnez la bonne carte ESP32 S3 et le bon port COM.
  6. Cliquez sur l'icône Libraries sur la barre de gauche de l'Arduino IDE.
  7. Cherchez "ezButton", puis trouvez la bibliothèque de bouton par ArduinoGetStarted.
  8. Cliquez sur le bouton Install pour installer la bibliothèque ezButton.
  • 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. Copiez le code ci-dessus et collez-le dans l'Arduino IDE.
  2. Compilez et téléversez le code sur la carte ESP32 S3 en cliquant sur le bouton Upload sur l'Arduino IDE.
Comment téléverser le code ESP32 S3 sur Arduino IDE
  1. Ouvrez le Serial Monitor sur l'Arduino IDE.
  2. Appuyez et relâchez chaque bouton un par un pour observer la sortie.
∞
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

Astuce : Si un bouton enregistre plusieurs pressions avec un seul clic, augmentez le temps d'anti-rebond dans les réglages ezButton pour filtrer le bruit de rebond mécanique de vos boutons spécifiques.

Code ESP32 S3 - Boutons Multiples Utilisant un Tableau

Nous pouvons améliorer le code fourni en utilisant un tableau de boutons, ce qui rend l'ajout ou la suppression de boutons aussi simple que de changer une seule constante. Le code suivant montre comment ce tableau gère les objets de bouton et boucle à travers eux de façon uniforme à chaque itération.

/* * 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-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"); } } }

Applications

Gérer plusieurs boutons simultanément sur l'ESP32 S3 ouvre une large gamme de cas d'utilisation pratiques, des simples contrôles d'interface aux systèmes de navigation de menu complexes. Voici quelques applications courantes :

  1. Navigation de Menu : Utilisez quatre boutons pour les actions haut, bas, sélection, et retour dans un menu d'affichage OLED.
  2. Contrôleur de Jeu : Associez des boutons à des entrées directionnelles ou d'action pour des jeux embarqués simples.
  3. Remplacement de Clavier : Remplacez un clavier matériel par des boutons discrets pour des dispositions de panneau personnalisées.
  4. Sélecteur Multi-mode : Basculez entre des modes opérationnels dans un appareil en utilisant des boutons de mode dédiés.
  5. Arrêts d'Urgence : Câblez plusieurs boutons d'arrêt de sécurité à travers une machine pour un contrôle de coupure redondant.

Vidéo

Regardez la vidéo étape par étape pour ce projet ESP32 S3 ci-dessous.

Défis

Expérimenter au-delà du tutoriel de base est la meilleure façon d'approfondir votre compréhension de la gestion multi-boutons sur l'ESP32 S3. Essayez ces défis pour développer votre confiance avec des techniques plus avancées :

  1. Débutant : Modifiez le code pour contrôler quatre LED individuelles, chacune basculée par son propre bouton.
  2. Intermédiaire : Implémentez une serrure à combinaison qui se déverrouille seulement quand les boutons sont pressés dans une séquence spécifique.
  3. Avancé : Créez une interface de style encodeur rotatif utilisant deux boutons pour l'incrémentation et la décrémentation, avec une détection d'appui long pour l'accélération.

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