ESP8266 - Botón
Este tutorial explica cómo usar ESP8266 con un botón. En detalle, aprenderemos:
- Cómo conectar el botón al ESP8266
- Cómo programar el ESP8266 para leer el estado del botón
- Cómo programar el ESP8266 para detectar los eventos de pulsación y liberación del botón.
- Cómo prevenir el problema de entrada flotante al usar el botón con el ESP8266.
- Cómo evitar el problema de rebote al usar el botón con el ESP8266.
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
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
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

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

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).

¿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.

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.

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:
- 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.
- 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.

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

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:
- Accede al estado del pin ESP8266 utilizando la función digitalRead().
※ 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
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.
- Haz clic en el botón Subir en el IDE de Arduino para compilar y subir el código a la placa ESP8266.

- Abre el monitor serial.
- Presiona y suelta el botón varias veces.
- Consulta el resultado en el monitor serial.
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:
- Haz clic en el botón Subir en el IDE de Arduino para compilar y subir el código al ESP8266.

- Abre el Monitor Serial.
- Presiona el botón y manténlo presionado.
- Suelta el botón y observa el resultado en el Monitor Serial.
※ 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
- ¿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.