ESP8266 - Bouton

Ce tutoriel vous explique comment utiliser l'ESP8266 avec un bouton. Plus en détail, nous apprendrons :

Le bouton est également connu sous d'autres noms, tels que bouton-poussoir, bouton tactile ou interrupteur momentané. C'est un composant courant utilisé dans de nombreux projets ESP8266 et il est facile à utiliser. Cependant, il peut être déroutant pour les débutants en raison de ses aspects mécaniques et physiques et des différentes manières dont il peut être utilisé. Ce tutoriel facilite l'apprentissage pour ceux qui débutent.

Préparation du matériel

1×ESP8266 NodeMCU
1×Micro USB Cable
1×Push Button
1×(Optional) Panel-mount Push Button
1×Breadboard
1×Jumper Wires
1×(Optional) 5V Power Adapter for ESP8266
1×(Optional) ESP8266 Screw Terminal Adapter

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

Lorsqu'ils travaillent avec un bouton, les débutants rencontrent couramment deux problèmes :

1. Problème d'entrée flottante :

  • Symptôme : La valeur lue sur la broche d'entrée ne correspond pas à l'état de l'appui sur le bouton.
  • Cause : Une résistance de tirage vers le haut ou vers le bas n'est pas utilisée avec la broche d'entrée.
  • Solution : Utilisez une résistance de tirage vers le haut ou vers le bas comme indiqué dans ce tutoriel.

2. Phénomène de bavardage :

  • Symptôme : Bien qu'étant pressé une fois, le bouton fait détecter plusieurs pressions par le code ESP8266.
  • Cause : L'état du bouton (ou interrupteur) oscille rapidement entre LOW et HIGH en raison de problèmes mécaniques et physiques.
  • Solution : Le tutoriel ESP8266 - Bouton - Debounce expliquera comment utiliser l'anti-rebond pour résoudre ce problème.

Ceci est un facteur qui devrait être pris en compte uniquement pour les applications nécessitant une détection précise de la pression.

※ NOTE THAT:

Ne confondez pas le bouton avec les éléments suivants :

Le brochage du bouton

Il existe différents types de boutons-poussoirs, qui peuvent être largement catégorisés en deux groupes :

  • Bouton-poussoir monté sur CI (adapté pour montage sur une plaque d'essai)
  • Bouton-poussoir monté sur panneau
Bouton-poussoir

Un bouton monté sur PCB a généralement quatre broches.

Brochage du bouton

Néanmoins, ces broches sont connectées par paires à l'intérieur. Ainsi, nous n'avons besoin d'utiliser que deux des quatre broches, qui ne sont pas connectées en interne.

Il existe quatre méthodes de connexion au bouton, dont deux sont symétriques (comme vu sur l'image).

Comment utiliser le bouton

Pourquoi un bouton a-t-il quatre broches alors que nous n'en utilisons que deux ?

Pour garantir qu'il est solidement monté sur le PCB (carte de circuit imprimé) et qu'il peut résister à la pression.

Un bouton à montage sur panneau possède généralement deux broches.

Brochage des boutons poussoirs à deux broches
image source: diyables.io

Comment ça fonctionne

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

ESP8266 - Bouton

La broche d'un bouton est connectée soit à VCC, soit à GND. L'autre broche est connectée à une broche sur l'ESP8266. En vérifiant l'état d'une broche de l'ESP8266 configurée en entrée, nous pouvons déterminer si un bouton a été pressé ou non.

État du bouton et état de pression

La connexion entre le bouton et l'ESP8266, ainsi que la configuration de la broche de l'ESP8266, détermineront la relation entre l'état du bouton et l'état de pression.

Il existe deux manières d'utiliser un bouton avec l'ESP8266 :

  • I. La broche d'un bouton est connectée à VCC, l'autre est connectée à une broche de l'ESP8266 avec une résistance de tirage vers le bas.
    • Lorsque le bouton est pressé, l'état de la broche de l'ESP8266 sera HAUT. Sinon, l'état de la broche sera BAS.
    • Nous pouvons utiliser une résistance interne ou externe. La résistance interne est déjà intégrée dans l'ESP8266, et peut être configurée via le code ESP8266.
  • I. La broche d'un bouton est connectée à GND, l'autre est connectée à une broche de l'ESP8266 avec une résistance de tirage vers le haut.
    • Lorsque le bouton est pressé, l'état de la broche de l'ESP8266 sera BAS. Sinon, l'état de la broche sera HAUT.
    • Nous pouvons utiliser une résistance interne ou externe. La résistance interne est déjà intégrée dans l'ESP8266, et peut être configurée via le code ESP8266.

    ※ NOTE THAT:

    Si nous ne suivons pas la meilleure pratique, l'état de la broche d'entrée sera « flottant » lorsque le bouton n'est PAS pressé. Cela signifie que l'état peut être HAUT ou BAS (instable, non fixé), entraînant une détection erronée.

    • La pire pratique : initialise la broche ESP8266 comme une entrée (en utilisant pinMode(BUTTON_PIN, INPUT)) et n'utilise PAS de résistance externe de tirage vers le bas/le haut.
    • La meilleure pratique : initialise la broche ESP8266 comme une entrée à tirage interne haut (en utilisant pinMode(BUTTON_PIN, INPUT_PULLUP)). Elle n'a pas besoin d'utiliser de résistance externe de tirage vers le bas/le haut.

    Par souci de simplicité, ce tutoriel utilise l'approche la plus basique : initialiser la broche ESP8266 en tant qu'entrée à pull-up interne sans utiliser de résistance externe. Les nouveaux utilisateurs n'ont pas à se soucier de connecter la résistance de pull-up/pull-down. Tout ce qu'ils ont à faire est d'écrire le code ESP8266.

Diagramme de câblage

  • Schéma de câblage entre ESP8266 et bouton monté sur PCB
Schéma de câblage du bouton ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Voir plus dans l'agencement des broches de l'ESP8266 et comment alimenter l'ESP8266 et d'autres composants.

  • Schéma de câblage entre ESP8266 et bouton monté sur panneau
Schéma de câblage du bouton poussoir à deux broches ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Comment programmer un bouton

  • Utilisez la fonction pinMode() pour configurer la broche ESP8266 en entrée avec pull-up interne. Par exemple, la broche D7 :
pinMode(D7, INPUT_PULLUP);
  • Accédez à l'état de la broche ESP8266 en utilisant la fonction digitalRead().
int button_state = digitalRead(BUTTON_PIN);

※ NOTE THAT:

Deux cas d'utilisation courants sont disponibles :

  • Le premier consiste à agir si l'état d'entrée est HIGH et à faire quelque chose en inverse si l'état d'entrée est LOW.
  • Le second consiste à agir lorsque l'état d'entrée passe de LOW à HIGH (ou de HIGH à LOW).

Nous en sélectionnons un selon l'application. Par exemple, si nous voulons utiliser un bouton pour contrôler une LED :

  • Si l'intention est que la LED soit ON lorsque le bouton est pressé et OFF lorsque le bouton n'est pas pressé, le premier cas d'utilisation doit être utilisé.
  • Si l'objectif est que la LED alterne entre ON et OFF à chaque fois que le bouton est pressé, le second cas d'utilisation doit être employé.

Comment détecter le changement d'état de LOW à HIGH

const int BUTTON_PIN = D7; // Le pin ESP8266 D7 connecté au bouton int prev_button_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() { // Initialiser le Serial pour communiquer avec le moniteur série. Serial.begin(9600); // initialiser le pin du bouton-poussoir comme une entrée avec pull-up // le pin d'entrée avec pull-up sera HIGH lorsque l'interrupteur est ouvert et LOW lorsque l'interrupteur est fermé. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // lire l'état de l'interrupteur/bouton : button_state = digitalRead(BUTTON_PIN); if(prev_button_state == LOW && button_state == HIGH) Serial.println("The state changed from LOW to HIGH"); // sauvegarder le dernier état prev_button_state = button_state; }

Code ESP8266

Étapes rapides

Pour commencer avec l'ESP8266 sur Arduino IDE, suivez ces étapes :

  • Consultez le tutoriel comment configurer l'environnement pour ESP8266 sur Arduino IDE si c'est la première fois que vous utilisez ESP8266.
  • Câblez les composants comme montré sur le diagramme.
  • Connectez la carte ESP8266 à votre ordinateur à l'aide d'un câble USB.
  • Ouvrez Arduino IDE sur votre ordinateur.
  • Choisissez la bonne carte ESP8266, comme (par exemple, NodeMCU 1.0 (Module ESP-12E)), et son port COM respectif.
  • Connectez l'ESP8266 à votre ordinateur avec un câble USB.
  • Lancez Arduino IDE, sélectionnez la bonne carte et le bon port.
  • Copiez le code ci-dessous et ouvrez-le dans Arduino IDE.
#define BUTTON_PIN D7 // The ESP8266 pin D7 connected to button void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // Configure the ESP8266 pin as a pull-up input: HIGH when the button is open, LOW when pressed. 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); }
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour compiler et téléverser le code sur la carte ESP8266.
Comment télécharger du code sur ESP8266 NodeMCU en utilisant l'IDE Arduino
  • Ouvrez le moniteur série.
  • Appuyez et relâchez le bouton plusieurs fois.
  • Consultez le résultat dans le moniteur série.
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

Découvrez l'explication ligne par ligne contenue dans les commentaires du code source !

Modifier le code ESP8266

Modifions le code afin qu'il puisse détecter lorsqu'un événement d'appui et de relâchement se produit.

Étapes rapides

  • Câblez les composants comme indiqué dans le schéma.
  • Connectez la carte ESP8266 à votre ordinateur à l'aide d'un câble USB.
  • Ouvrez Arduino IDE sur votre ordinateur.
  • Sélectionnez la bonne carte ESP8266, telle que (par exemple, NodeMCU 1.0 (Module ESP-12E)), et son port COM respectif.
  • Modifiez le code comme suit :
/* * Ce code ESP8266 NodeMCU a été développé par newbiely.fr * Ce code ESP8266 NodeMCU 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/esp8266/esp8266-button */ #define BUTTON_PIN D7 // The ESP8266 pin D7 connected to button int prev_button_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); // Configure the ESP8266 pin as a pull-up input: HIGH when the button is open, LOW when pressed. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); if (prev_button_state == HIGH && button_state == LOW) Serial.println("The button is pressed"); else if (prev_button_state == LOW && button_state == HIGH) Serial.println("The button is released"); // save the the last state prev_button_state = button_state; }
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour compiler et téléverser le code vers l'ESP8266.
Téléversement de code sur l'IDE Arduino
  • Ouvrez le moniteur série.
  • Appuyez sur le bouton et maintenez-le enfoncé.
  • Relâchez le bouton et observez le résultat sur le moniteur série.
COM6
Send
The button is pressed The button is released
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ NOTE THAT:

Même si vous appuyez et relâchez le bouton une seule fois, la sortie sur le moniteur série peut afficher plusieurs événements de pression et de relâchement. Cela est le comportement attendu du bouton. Cela est connu sous le nom de "phénomène de rebond". Pour plus d'informations, veuillez vous référer au tutoriel ESP8266 - Antirebond du bouton.

※ NOTE THAT:

Nous avons développé une bibliothèque, appelée ezButton, pour simplifier l'utilisation, particulièrement pour ceux qui débutent avec plusieurs boutons. Vous pouvez en savoir plus sur la bibliothèque ezButton ici.

Vidéo

Mettez-vous au défi

  • Lorsque le bouton est pressé, allumez la LED.
  • Lorsque le bouton n'est pas pressé, éteignez la LED.
  • Chaque fois que le bouton est pressé, basculez la LED entre ON et OFF.

Connaissances supplémentaires

  1. À quels moments ne devrions-nous PAS utiliser une résistance de tirage vers le haut ou vers le bas pour une broche d'entrée ? 2. Quand ne devrions-nous pas utiliser une résistance de tirage vers le haut ou vers le bas pour une broche d'entrée ?
  • Si le capteur présente des états fermés ou ouverts, une résistance de tirage vers le haut ou vers le bas est requise pour faire passer ces états à BAS et HAUT. Des exemples de tels capteurs incluent le bouton-poussoir, l'interrupteur, l'interrupteur à contact magnétique (capteur de porte).
  • D'autre part, si le capteur dispose de deux niveaux de tension définis (BAS et HAUT), une résistance de tirage vers le haut ou vers le bas n'est pas nécessaire. Des exemples de tels capteurs sont le capteur de mouvement et le capteur tactile.

Références de fonction

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