ESP32 - Botón
El botón es un componente básico y ampliamente utilizado en muchos proyectos con ESP32. No es tan simple como parece (debido a sus características mecánicas y físicas). Los principiantes pueden tener muchos problemas con él. Este tutorial facilita las cosas para los principiantes. ¡Comencemos!
※ Nota:
Antes de hablar sobre el botón, nos gustaría señalar que hay dos errores comunes que suelen encontrar los principiantes:
- El problema de la entrada flotante:
- Síntoma: Al conectar un botón al pin de entrada del ESP32, el estado del pin de entrada es aleatorio y no coincide con el estado de presión del botón.
- Causa: El pin del botón NO utiliza una resistencia pull-down o una resistencia pull-up.
- Solución: ⇒ Utilice una resistencia pull-down o una resistencia pull-up en el pin de entrada. Los detalles se describirán más adelante en este tutorial.
- Síntoma: El código en ESP32 lee el estado del botón e identifica el evento de pulsación detectando el cambio de estado (ALTO a BAJO, o BAJO a ALTO). Cuando el botón se presiona realmente solo una vez, el código del ESP32 detecta varias pulsaciones en lugar de una.
- Causa: Debido a características mecánicas y físicas, cuando realizas una sola pulsación de un botón, el estado del pin de entrada cambia rápidamente entre BAJO y ALTO varias veces en lugar de una vez
- Solución: ⇒ Rebote. Los detalles se describirán en ESP32 - Button - Debounce tutorial.
El fenómeno de rebote provoca fallos solo en algunos tipos de aplicaciones que necesitan detectar exactamente el número de pulsaciones. En algunas aplicaciones, es inofensivo.
Hardware Requerido
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | |
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Acerca del Botón
El pulsador, también conocido como botón táctil o interruptor momentáneo, es un tipo de interruptor que se cierra cuando se pulsa y se mantiene presionado, y se abre cuando se suelta. Existen varios tipos de pulsadores, que se clasifican principalmente en dos grupos:
- PCB-mount push buttons (suitable for breadboard mounting)
- Panel-mount push buttons

Pinout del botón
Un botón de montaje en PCB suele tener cuatro pines que están conectados internamente en pares.

Solo necesitamos usar dos de los cuatro pines, que no están en el mismo par conectado. En consecuencia, hay cuatro formas de cablear el botón (ver la imagen bimage abajo).

En realidad, debido a la simetría, estas cuatro formas se convierten en dos. El resto de este tutorial utilizará dos pines: Pin A y Pin B que no están conectados entre sí.
¿Por qué el botón tiene cuatro pines mientras solo necesitamos dos pines?
El botón recibe la fuerza de los usuarios. Para que se mantenga estable y firme en la placa de circuito impreso (PCB), tiene cuatro pines para resistir la fuerza de pulsación.
Un botón de montaje en panel suele tener dos pines.

El módulo de pulsador incluye una resistencia pull-down integrada, que garantiza que la salida se mantenga en nivel bajo cuando el botón no está presionado. Tiene tres pines:
- GND: Conecta este pin a la masa.
- VCC: Conecta este pin a una fuente de alimentación de 3.3V.
- OUT: Conecta este pin a una entrada digital en tu ESP32.
Con esta configuración, el módulo emite un nivel bajo cuando el botón no está presionado y emite un nivel alto cuando el botón está presionado.
Cómo funciona el botón
- Cuando se pulsa el botón, el pin A está conectado al pin B
- Cuando no se pulsa el botón, el pin A no está conectado al pin B

ESP32 - Botón
El pin de un botón está conectado a un pin de entrada digital del ESP32. El otro pin está conectado a VCC o GND. En el código del ESP32, al leer el estado del pin de entrada, podemos inferir si el botón está presionado o no.
Estado de entrada y estado de pulsación
La relación entre el estado del pin de entrada y el estado de pulsación del botón depende de cómo conectemos el botón al ESP32 y de la configuración del pin del ESP32. Hay dos formas de usar un botón con el ESP32:
- El pin de un botón está conectado a un pin de entrada digital del ESP32, el otro pin está conectado a VCC:
- Se debe usar una resistencia pull-down
- Si se pulsa el botón, el estado del pin del ESP32 es ALTO. De lo contrario, el estado del pin del ESP32 es BAJO
- Se debe usar una resistencia pull-up
- Si se pulsa el botón, el estado del pin del ESP32 es BAJO. De lo contrario, el estado del pin del ESP32 es ALTO
※ Nota:
Si no se utiliza ninguna resistencia pull-down ni pull-up, el estado del pin de entrada es aleatorio entre ALTO o BAJO (inestable, no fijado) cuando el botón no está presionado. Esto se llama el “problema de entrada flotante”. Esto provoca un mal funcionamiento.
Para facilitarlo a los principiantes, este tutorial recomienda encarecidamente usar una resistencia pull-up interna en el pin ESP32. No se requiere resistencia externa. Esto ahorra hardware y simplifica el diagrama de cableado.
Diagrama de cableado entre el botón y el ESP32
- Diagrama de cableado entre ESP32 y el botón montado en la placa de circuito impreso

This image is created using Fritzing. Click to enlarge image
Si no sabe c\u00f3mo alimentar ESP32 y otros componentes, encuentre instrucciones en el siguiente tutorial: C\u00f3mo alimentar ESP32.
- Diagrama de cableado entre ESP32 y botón de montaje en panel

This image is created using Fritzing. Click to enlarge image
Cómo programar un botón
- Inicializa el pin del ESP32 como una entrada con pull-up interna usando la función pinMode(). Por ejemplo, pin GPIO21:
- Lee el estado del pin de entrada utilizando la función digitalRead().
※ Nota:
Hay dos casos de uso muy utilizados:
- El primer caso de uso: Si el estado de entrada es ALTO, haz algo. Si el estado de entrada es BAJO, haz otra cosa.
- El segundo caso de uso: Si el estado de entrada cambia de BAJO a ALTO, haz algo. Si el estado de entrada cambia de ALTO a BAJO, haz otra cosa.
Dependiendo de la aplicación, se utiliza uno de ellos. Por ejemplo, en el caso de usar un botón para controlar un LED:
- Si queremos encender el LED cuando se presiona el botón y apagarlo cuando no se presiona el botón, DEBEMOS usar el primer caso.
- Si queremos alternar el LED entre ENCENDIDO y APAGADO cada vez que se presione el botón, DEBEMOS usar el segundo caso.
El código de ejemplo a continuación muestra cómo detectar el cambio de estado de LOW a HIGH.
Código ESP32
Pasos R\u00e1pidos
- Si es la primera vez que usas ESP32, consulta cómo configurar el entorno para ESP32 en Arduino IDE.
- Realiza el cableado como en la imagen de arriba.
- Conecta la placa ESP32 a tu PC mediante un cable micro USB
- Abre Arduino IDE en tu PC.
- Selecciona la placa ESP32 correcta (p. ej. ESP32 Dev Module) y el puerto COM.
- Copia el código de abajo y pégualo en Arduino IDE.
- Compilar y subir el código a la placa ESP32 haciendo clic en el botón Subir en el IDE de Arduino

- Abrir el Monitor Serial en el IDE de Arduino

- Presiona y suelta el botón varias veces
- Ve el resultado en el Monitor Serial. Se ve como lo siguiente:
1 es alto, 0 es bajo.
Explicación del código línea por línea
El código anterior de ESP32 contiene una explicación línea por línea. ¡Por favor, lea los comentarios en el código!
Modificando el código del ESP32
Vamos a modificar el código para detectar los eventos de pulsación y liberación.
Pasos R\u00e1pidos
- Si es la primera vez que usa ESP32, consulte cómo configurar el entorno para ESP32 en Arduino IDE.
- Modifique el código como se muestra a continuación
- Compilar y subir código a la placa ESP32 haciendo clic en el botón Subir del IDE de Arduino

- Abrir el Monitor Serial en el IDE de Arduino

- Presiona el botón y luego suéltalo
- Consulta el resultado en el Monitor Serial. Se ve como lo siguiente:
※ Nota:
- El Monitor Serial puede imprimir varios eventos de pulsación y liberación, aunque solo hayas hecho una pulsación y liberación. Este es un comportamiento normal del botón. Este comportamiento se llama el “fenómeno de rebote”. En algunas aplicaciones, necesitamos un método para eliminarlo. Puedes aprender más en ESP32 - Tutorial de rebote de botón.
- Para simplificar las cosas para principiantes, especialmente al usar varios botones, creamos una biblioteca llamada ezButton. Puedes aprender sobre la biblioteca ezButton aquí.
- Para el módulo de botón, usa pinMode(BUTTON_PIN, INPUT). Devuelve LOW cuando no está presionado y HIGH cuando 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.
Conocimientos Adicionales
¿Cuándo se debe y cuándo no se debe usar una resistencia pull-down/pull-up?
- DEBERÍA: Si el sensor tiene dos estados: cerrado y abierto, necesita una resistencia pull-up o pull-down para convertir estos estados en dos estados: BAJO y ALTO. Por ejemplo, pulsador, interruptor, interruptor de contacto magnético (sensor de puerta)...
- NO DEBERÍA: Si el sensor emite dos niveles de voltaje (BAJO y ALTO), NO necesita una resistencia pull-up o pull-down. Por ejemplo, sensor de movimiento, sensor táctil ...