ESP8266 - Botón

Este tutorial explica cómo usar ESP8266 con un botón. En detalle, aprenderemos:

El botón es conocido por otros nombres, como pulsador, botón táctil o interruptor momentáneo. Es un componente común utilizado en muchos proyectos de ESP8266 y es fácil de usar. Sin embargo, puede resultar confuso para los principiantes debido a sus aspectos mecánicos y físicos y a las formas en que puede utilizarse. Este tutorial facilita las cosas para quienes acaban de empezar.

Hardware Requerido

1×ESP8266 NodeMCU
1×Cable USB Tipo-A a Tipo-C (para PC USB-A)
1×Cable USB Tipo-C a Tipo-C (para PC USB-C)
1×Botón para Protoboard con Tapa
1×Kit de Botón para Protoboard
1×Botón Pulsador de Panel
1×Módulo de Botón Pulsador
1×Protoboard
1×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para ESP8266
1×(Recomendado) Divisor de Alimentación para ESP8266 Tipo-C

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Acerca del Botón

Al trabajar con un botón, los principiantes suelen encontrarse con dos problemas:

1. Problema de entrada flotante:

  • Síntoma: El valor leído desde el pin de entrada no corresponde al estado de la pulsación del botón.
  • Causa: No se está utilizando una resistencia pull-up o pull-down en el pin de entrada.
  • Solución: Utilice una resistencia pull-up o pull-down como se indica en este tutorial.

2. Fenómeno de traqueteo:.

  • Síntoma: A pesar de estar presionado una vez, el botón provoca que el código ESP8266 detecte múltiples pulsaciones.
  • Causa: El estado del botón (o interruptor) está oscilando rápidamente entre LOW y HIGH debido a problemas mecánicos y físicos.
  • Solución: El tutorial ESP8266 - Botón - Antirrebote explicará cómo utilizar el antiprebote para abordar este problema.

Este es un factor que solo debe tenerse en cuenta para las aplicaciones que requieren una detección de pulsaciones precisa.

※ Nota:

No confundas el botón con lo siguiente:

Disposición de pines del botón

Hay varios tipos de botones pulsadores, que pueden clasificarse en dos grandes grupos:

  • PCB-mount push button (suitable for mounting on a breadboard)
  • Panel-mount push button
Botón pulsador

Un botón montado en PCB suele tener cuatro pines.

Esquema de pines del botón

Sin embargo, estos pines están conectados en pares internamente. Por lo tanto, solo tenemos que utilizar dos de los cuatro pines, que no están conectados internamente.

Hay cuatro métodos para conectarse al botón, dos de los cuales son simétricos (como se ve en la imagen).

Cómo usar el botón

¿Por qué un botón tiene cuatro pines cuando solo usamos dos de ellos?

⇒ Para asegurarse de que esté firmemente montado en la placa de circuito impreso y pueda soportar la presión.

Un botón de montaje en panel suele tener dos pines.

Diagrama de pines de un pulsador de dos pines.
image source: diyables.io

El módulo de pulsador incluye una resistencia pull-down integrada, lo que garantiza que la salida permanezca en nivel bajo cuando el botón no está presionado. Tiene tres pines:

  • GND: Conecta este pin a tierra.
  • VCC: Conecta este pin a una fuente de alimentación de 3.3 V.
  • OUT: Conecta este pin a una entrada digital en tu ESP8266.

Con esta configuración, el módulo genera LOW cuando el botón no está presionado y genera HIGH cuando el botón está presionado.

Cómo funciona

  • Cuando el botón no está presionado, el pin A no está conectado al pin B.
  • Sin embargo, cuando el botón está presionado, el pin A está conectado al pin B.
Cómo funciona el botón

ESP8266 - Botón

El pin de un botón está conectado a VCC o a GND. El otro pin está conectado a un pin del ESP8266. Al comprobar el estado de un pin del ESP8266 configurado como entrada, podemos determinar si se ha presionado un botón o no.

Estado del botón y estado de pulsación

La conexión entre el botón y el ESP8266, así como la configuración del pin del ESP8266, determinarán la relación entre el estado del botón y el estado de pulsación.

Hay dos maneras de usar un botón con ESP8266:

  1. El pin de un botón está conectado a VCC, el otro está conectado al pin de un ESP8266 con una resistencia pull-down
    • Cuando se presione el botón, el estado del pin del ESP8266 será ALTO. Si no, el estado del pin será BAJO
    • Podemos usar una resistencia interna o externa. La resistencia interna ya está integrada en el ESP8266, y se puede configurar mediante el código del ESP8266.
  • El pin de un botón está conectado a GND, el otro está conectado al pin de un ESP8266 con una resistencia pull-up
    • Cuando se presione el botón, el estado del pin del ESP8266 será BAJO. Si no, el estado del pin será ALTO
    • Podemos usar una resistencia interna o externa. La resistencia interna ya está integrada en el ESP8266, y se puede configurar mediante el código del ESP8266.

    ※ Nota:

    Si no seguimos la mejor práctica, el estado del pin de entrada será “flotante” cuando el botón no esté presionado. Esto significa que el estado puede ser ALTO o BAJO (inestable, no fijado), lo que provoca una detección incorrecta.

    • La peor práctica: inicializa el pin ESP8266 como una entrada (utilizando pinMode(BUTTON_PIN, INPUT)) y no utiliza ninguna resistencia externa de pull-down o pull-up.
    • La mejor práctica: inicializa el pin ESP8266 como una entrada con pull-up interna (utilizando pinMode(BUTTON_PIN, INPUT_PULLUP)). No es necesario utilizar ninguna resistencia externa de pull-down o pull-up.

    Para simplificar, este tutorial utiliza el enfoque más básico: inicializar el pin del ESP8266 como una entrada con pull-up interno sin utilizar una resistencia externa. Los principiantes no tienen que preocuparse por conectar la resistencia de pull-up/pull-down. Todo lo que deben hacer es escribir el código para el ESP8266.

    Diagrama de Cableado

    • Diagrama de cableado entre el ESP8266 y el botón montado en la PCB.
    Diagrama de cableado del botón ESP8266 NodeMCU

    This image is created using Fritzing. Click to enlarge image

    Para obtener m\u00e1s informaci\u00f3n, consulte Pines del ESP8266 y c\u00f3mo alimentar ESP8266 y otros componentes.

    • Diagrama de cableado entre ESP8266 y el botón de montaje en panel
    Diagrama de cableado de un pulsador de dos pines para ESP8266 NodeMCU

    This image is created using Fritzing. Click to enlarge image

    Cómo programar para el botón

    • Usando la función pinMode(), configura el pin del ESP8266 como una entrada con pull-up interna. Por ejemplo, el pin D7:
    pinMode(D7, INPUT_PULLUP);
    • Accede al estado del pin ESP8266 utilizando la función digitalRead().
    int button_state = digitalRead(BUTTON_PIN);

    ※ Nota:

    Existen dos casos de uso comunes:

    • El primero es actuar si el estado de entrada es ALTO, y hacer algo en sentido inverso si el estado de entrada es BAJO.
    • El segundo es actuar cuando el estado de entrada cambia de BAJO a ALTO (o de ALTO a BAJO).

    Seleccionamos uno de ellos según la aplicación. Por ejemplo, si queremos usar un botón para controlar un LED:

    • Si la intención es que el LED esté encendido cuando se presiona el botón y apagado cuando el botón no está presionado, debe usarse el primer caso de uso.
    • Si el objetivo es que el LED cambie entre encendido y apagado cada vez que se presiona el botón, debe emplearse el segundo caso de uso.

    Cómo detectar el cambio de estado de bajo a alto

    const int BUTTON_PIN = D7; // The ESP8266 pin D7 connected to button int prev_button_state = HIGH; // 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 pushbutton pin as an pull-up input // the pull-up input pin will be 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_button_state == LOW && button_state == HIGH) Serial.println("The state changed from LOW to HIGH"); // save the last state prev_button_state = button_state; }

    Código ESP8266

    Pasos R\u00e1pidos

    Para empezar con ESP8266 en el IDE de Arduino, siga estos pasos:

    • Consulta el tutorial cómo configurar el entorno para ESP8266 en Arduino IDE si es la primera vez que usas ESP8266.
    • Conecta los componentes tal como se muestra en el diagrama.
    • Conecta la placa ESP8266 a tu computadora usando un cable USB.
    • Abre el IDE de Arduino en tu computadora.
    • Elige la placa ESP8266 correcta, como (p. ej. NodeMCU 1.0 (ESP-12E Module)), y su puerto COM respectivo.
    • Conecta la placa ESP8266 a tu computadora con un cable USB.
    • Inicia el IDE de Arduino, selecciona la placa y el puerto correctos.
    • Copia el código de abajo y ábrelo en el IDE de Arduino.
    #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); }
    • Haz clic en el botón Subir en el IDE de Arduino para compilar y subir el código a la placa ESP8266.
    Cómo subir código al ESP8266 NodeMCU usando el IDE de Arduino
    • Abre el monitor serial.
    • Presiona y suelta el botón varias veces.
    • Consulta el resultado en el monitor serial.
    COM6
    Send
    1 1 1 0 0 0 0 0 0 1 1 1
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    1 es ALTO. 0 es BAJO.

    Explicación del código

    Consulta la explicación línea por línea que se encuentra en los comentarios del código fuente.

    Modificando el código ESP8266

    Vamos a cambiar el código para que pueda detectar cuándo ocurre un evento de pulsación y liberación.

    Pasos R\u00e1pidos

    • Cablea los componentes tal como se muestran en el diagrama.
    • Conecta la placa ESP8266 a tu ordenador usando un cable USB.
    • Abre el IDE de Arduino en tu ordenador.
    • Elige la placa ESP8266 correcta, como (p. ej. NodeMCU 1.0 (ESP-12E Module)), y su puerto COM correspondiente.
    • Modifica el código como se indica a continuación:
    /* * Este código de ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/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; }
    • Haz clic en el botón Subir en el IDE de Arduino para compilar y subir el código al ESP8266.
    Subir código al IDE de Arduino
    • Abre el Monitor Serial.
    • Presiona el botón y manténlo presionado.
    • Suelta el botón y observa el resultado en el Monitor Serial.
    COM6
    Send
    The button is pressed The button is released
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    ※ Nota:

    Incluso si presiona y suelta el botón solo una vez, la salida en el Monitor Serial puede mostrar múltiples eventos de pulsación y liberación. Este es el comportamiento esperado del botón. Esto es conocido como el "fenómeno de rebote". Para obtener más información, consulte el Tutorial de rebote de botón para ESP8266.

    ※ Nota:

    • Hemos desarrollado una biblioteca, llamada ezButton, para facilitar a quienes recién empiezan, especialmente cuando se utilizan varios botones. Puedes obtener más información sobre la biblioteca ezButton aquí.
    • Si estás utilizando el módulo de botón, configura el pin a modo de entrada usando pinMode(BUTTON_PIN, INPUT). Con esta configuración, la salida del módulo será LOW cuando el botón esté sin presionar y HIGH cuando el botón esté presionado.

    Video Tutorial

    Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

    Desafíate a ti mismo

    • Cuando se presiona el botón, enciende el LED.
    • Cuando no se presiona el botón, apaga el LED.
    • Cada vez que se presiona el botón, alterna el LED entre ENCENDIDO y APAGADO.

    Conocimientos Adicionales

    1. ¿En qué momentos NO debemos usar una resistencia pull-down/pull-up para un pin de entrada? 2. ¿Cuándo no deberíamos utilizar una resistencia pull-down/pull-up para un pin de entrada?
    • Si el sensor tiene estados cerrados o abiertos, se requiere una resistencia pull-up o pull-down para hacer que estos estados sean bajos y altos. Ejemplos de tales sensores son un botón pulsador, un interruptor, un interruptor de contacto magnético (sensor de puerta).
    • Por otro lado, si el sensor tiene dos niveles de voltaje definidos (bajo y alto), no se necesita una resistencia pull-up o pull-down. Ejemplos de tales sensores son un sensor de movimiento y un sensor táctil.

    Referencias de funciones

    ※ NUESTROS MENSAJES

    • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!