Arduino Nano ESP32 - Bouton

Le bouton est un composant de base et largement utilisé dans de nombreux projets Arduino Nano ESP32. Ce n'est pas aussi simple qu'il y paraît (à cause des caractéristiques mécaniques et physiques). Les débutants peuvent rencontrer beaucoup de difficultés avec. Ce tutoriel le rend facile pour les débutants. Commençons !

※ NOTE THAT:

Avant de présenter le bouton, nous aimerions signaler qu'il existe deux erreurs courantes que les débutants rencontrent généralement :

i. Le problème d'entrée flottante :

  • Symptôme : Lors de la connexion d'un bouton à la broche d'entrée de l'Arduino Nano ESP32, l'état de la broche d'entrée est aléatoire et ne correspond pas à l'état de pression du bouton.
  • Cause : La broche du bouton n'utilise pas une résistance de tirage vers le bas ou une résistance de tirage vers le haut.
  • Solution : ⇒ Utilisez une résistance de tirage vers le bas ou une résistance de tirage vers le haut sur la broche d'entrée. Le détail sera décrit plus tard dans ce tutoriel.

i. Le phénomène de rebond :

  • Symptôme : Le code sur Arduino Nano ESP32 lit l'état du bouton et identifie l'événement de pression en détectant le changement d'état (de HAUT à BAS, ou de BAS à HAUT). Lorsque le bouton est réellement pressé une seule fois, le code de l'Arduino Nano ESP32 détecte plusieurs pressions au lieu d'une seule.
  • Cause : En raison des caractéristiques mécaniques et physiques, lorsque vous appuyez une seule fois sur un bouton, l'état de la broche d'entrée bascule rapidement plusieurs fois entre BAS et HAUT au lieu d'une seule fois.
  • Solution : ⇒ Désactivation du rebond. Le détail sera décrit dans le tutoriel Arduino Nano ESP32 - Bouton - Désactivation du rebond.

Le phénomène de rebond provoque des dysfonctionnements dans certains types d'applications qui doivent détecter exactement le nombre de pressions. Dans certains types d'application, il est inoffensif.

Préparation du matériel

1×Arduino Nano ESP32
1×USB Cable Type-C
1×Push Button
1×(Optional) Panel-mount Push Button
1×Breadboard
1×Jumper Wires
1×(Optional) DC Power Jack
1×(Recommended) Screw Terminal Adapter for Arduino Nano

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos de Button

Le bouton-poussoir, également appelé bouton tactile ou interrupteur momentané, est un type d'interrupteur qui se ferme lorsqu'il est pressé et maintenu, et s'ouvre lorsqu'il est relâché. Il existe divers types de boutons-poussoirs, généralement classés en deux catégories :

  • Boutons-poussoirs montés sur circuit imprimé (adaptés pour montage sur plaque d'essai)
  • Boutons-poussoirs à montage sur panneau
Arduino Nano ESP32 Bouton poussoir

Brochage du bouton

Un bouton monté sur PCB possède généralement quatre broches qui sont connectées en interne par paires.

Disposition des broches du bouton

Nous avons seulement besoin d'utiliser deux des quatre broches, qui ne sont PAS dans la même paire connectée. Par conséquent, il existe quatre manières de réaliser le câblage avec le bouton (voir l'image ci-dessous).

Comment utiliser le bouton

En fait, en raison de la symétrie, ces quatre méthodes se réduisent à deux méthodes. Le reste de ce tutoriel utilisera deux broches : la broche A et la broche B qui ne sont pas connectées ensemble.

Pourquoi le bouton a-t-il quatre broches alors que nous n'avons besoin que de deux broches ?

⇒ Le bouton reçoit la force des utilisateurs. Pour qu'il reste stable et solide sur le PCB (carte), il possède quatre broches pour résister à la force de pression.

Un bouton monté sur panneau a généralement deux broches.

Brochage du bouton-poussoir à deux broches
image source: diyables.io

Comment fonctionne un bouton

  • Lorsque le bouton est pressé, la broche A est connectée à la broche B
  • Lorsque le bouton n'est PAS pressé, la broche A n'est PAS connectée à la broche B
Comment fonctionne un bouton

Arduino Nano ESP32 - Bouton

La broche d'un bouton est connectée à une broche d'entrée numérique de l'Arduino Nano ESP32. L'autre broche est connectée à VCC ou GND. Dans le code de l'Arduino Nano ESP32, en lisant l'état de la broche d'entrée, nous pouvons déduire si le bouton est pressé ou NON.

État initial et état de pression

La relation entre l'état de la broche d'entrée et l'état de pression du bouton dépend de la manière dont nous connectons le bouton à l'Arduino Nano ESP32 et du réglage de la broche de l'ESP32. Il existe deux manières d'utiliser un bouton avec l'ESP32 :

  • I. Une broche du bouton est connectée à une broche d'entrée numérique de l'ESP32, l'autre broche est connectée à VCC :
    • Une résistance de tirage vers le bas DOIT être utilisée
    • Si le bouton est pressé, l'état de la broche de l'ESP32 est HAUT. Sinon, l'état de la broche de l'ESP32 est BAS
  • I. Une broche du bouton est connectée à une broche d'entrée numérique de l'ESP32, l'autre broche est connectée à GND :
    • Une résistance de tirage vers le haut DOIT être utilisée
    • Si le bouton est pressé, l'état de la broche de l'ESP32 est BAS. Sinon, l'état de la broche de l'ESP32 est HAUT

    ※ NOTE THAT:

    Si ni une résistance de tirage vers le bas ni une résistance de tirage vers le haut n'est utilisée, l'état de la broche d'entrée est aléatoire entre HIGH ou LOW (instable, non fixé) lorsque le bouton n'est PAS pressé. Cela s'appelle le "problème d'entrée flottante". Cela entraîne un dysfonctionnement.

    Pour simplifier les choses pour les débutants, ce tutoriel recommande vivement aux novices d'utiliser une résistance de pull-up interne pour la broche Arduino Nano ESP32. Aucune résistance externe n'est nécessaire. Cela économise le matériel et simplifie le schéma de câblage.

Schéma de câblage entre le bouton et l'Arduino Nano ESP32

  • Schéma de câblage entre Arduino Nano ESP32 et bouton monté sur PCB
Schéma de câblage du bouton Arduino Nano ESP32

This image is created using Fritzing. Click to enlarge image

  • Schéma de câblage entre Arduino Nano ESP32 et bouton monté sur panneau
Schéma de câblage du bouton-poussoir à deux broches Arduino Nano ESP32

This image is created using Fritzing. Click to enlarge image

Comment programmer un bouton

  • Initialise le pin Arduino Nano ESP32 comme une entrée avec pull-up interne en utilisant la fonction pinMode(). Par exemple, le pin D2 :
pinMode(D2, INPUT_PULLUP); // configurer D2 comme broche d'entrée et activer la résistance de pull-up interne
  • Lit l'état de la broche d'entrée en utilisant la fonction digitalRead().
int button_state = digitalRead(BUTTON_PIN);

※ NOTE THAT:

Il existe deux cas d'utilisation fréquemment utilisés :

  • Le premier cas d'utilisation : Si l'état d'entrée est HAUT, faire quelque chose. Si l'état d'entrée est BAS, faire autre chose.
  • Le deuxième cas d'utilisation : Si l'état d'entrée passe de BAS à HAUT, faire quelque chose. Si l'état d'entrée passe de HAUT à BAS, faire autre chose.

Selon l'application, l'un d'eux est utilisé. Par exemple, dans le cas de l'utilisation d'un bouton pour contrôler une LED :

  • Si nous voulons allumer la LED lorsque le bouton est pressé et l'éteindre lorsque le bouton n'est pas pressé, nous DEVONS utiliser le premier cas.
  • Si nous voulons faire basculer la LED entre ON et OFF chaque fois que le bouton est pressé, nous DEVONS utiliser le deuxième cas.

L'exemple de code ci-dessous montre comment détecter le changement d'état de BAS à HAUT.

#define BUTTON_PIN D2 // Le pin D2 est connecté au bouton int prev_state = HIGH; // l'état précédent du pin d'entrée int button_state; // la lecture actuelle du pin d'entrée void setup() { Serial.begin(9600); // initialise le pin du bouton-poussoir comme une entrée avec résistance de tirage pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // lire l'état de l'interrupteur/du bouton : button_state = digitalRead(BUTTON_PIN); if(prev_state == LOW && button_state == HIGH) Serial.println("The state changed from LOW to HIGH"); // sauvegarder le dernier état prev_state = button_state; }

Code Arduino Nano ESP32

Étapes rapides

Pour commencer avec l'Arduino Nano ESP32, suivez ces étapes :

  • Si vous êtes novice en Arduino Nano ESP32, consultez le tutoriel sur comment configurer l'environnement pour l'Arduino Nano ESP32 dans l'IDE Arduino.
  • Câblez les composants selon le schéma fourni.
  • Connectez la carte Arduino Nano ESP32 à votre ordinateur via un câble USB.
  • Lancez l'IDE Arduino sur votre ordinateur.
  • Sélectionnez la carte Arduino Nano ESP32 et son port COM correspondant.* Copiez le code ci-dessous et collez-le dans l'IDE Arduino.
#define BUTTON_PIN D2 // Arduino Nano ESP32 pin D2 pin connected to button void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // 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: int button_state = digitalRead(BUTTON_PIN); // print out the button's state Serial.println(button_state); }
  • Compiler et télécharger le code sur la carte Arduino Nano ESP32 en cliquant sur le bouton Upload dans l'IDE Arduino.
Comment télécharger le code Arduino Nano ESP32 sur Arduino IDE
  • Ouvrir le moniteur série sur Arduino IDE
Comment ouvrir le moniteur série sur Arduino IDE
  • Appuyez et relâchez le bouton plusieurs fois.
  • Consultez le résultat sur le moniteur série. Cela ressemble à ce qui suit :
COM6
Send
1 1 1 0 0 0 0 0 0 1 1 1
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

1 est ÉLEVÉ, 0 est BAS.

Explication du code ligne par ligne

Le code Arduino Nano ESP32 ci-dessus contient une explication ligne par ligne. Veuillez lire les commentaires dans le code !

Modification du code Arduino Nano ESP32

Modifions le code pour détecter les événements d'appui et de relâchement.

Étapes rapides

/* * Ce code Arduino Nano ESP32 a été développé par newbiely.fr * Ce code Arduino Nano ESP32 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/arduino-nano-esp32/arduino-nano-esp32-button */ #define BUTTON_PIN D2 // Arduino Nano ESP32 pin D2 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(9600); // 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; }
  • Compilez et téléversez le code sur la carte Arduino Nano ESP32 en cliquant sur le bouton Upload dans l'IDE Arduino
  • Ouvrez le moniteur série dans l'IDE Arduino
  • Appuyez sur le bouton puis relâchez
  • Consultez le résultat sur le moniteur série. Cela ressemble à ce qui suit :
COM6
Send
The button is pressed The button is released
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ NOTE THAT:

  • Le moniteur série peut afficher plusieurs événements de pression et de relâchement même si vous n'avez effectué qu'une seule pression et relâchement. C'est un comportement normal du bouton. Ce comportement est appelé le "phénomène de rebond". Dans certaines applications, nous avons besoin d'une méthode pour l'éliminer. Vous pouvez en savoir plus dans le tutoriel Arduino Nano ESP32 - Anti-rebond du bouton.
  • Pour simplifier les choses pour les débutants, notamment lors de l'utilisation de plusieurs boutons, nous avons créé une bibliothèque appelée ezButton. Vous pouvez en savoir plus sur la bibliothèque ezButton ici.

Vidéo

Connaissances supplémentaires

Quand doit-on utiliser et ne pas utiliser une résistance de pull-up/pull-down ?

  • DEVRAIT: Si le capteur a deux états : fermé et ouvert, il a besoin d'une résistance de tirage vers le haut ou vers le bas pour que ces états deviennent deux états : BAS et HAUT. Par exemple, bouton-poussoir, interrupteur, contact magnétique (capteur de porte)...
  • NE DEVRAIT PAS: Si le capteur délivre deux niveaux de tension (BAS et HAUT), il n'a PAS besoin d'une résistance de tirage vers le haut ou vers le bas. Par exemple, capteur de mouvement, capteur tactile ...

Références linguistiques

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!