Lectura de Señales de Entrada con GPIO en el ESP32
Ahora que ya sabes cómo controlar las salidas de señales con tu ESP32, vamos a aprender la operación contraria: leer señales de entrada utilizando los pines GPIO. Para ello, construiremos un circuito específico.
Descripción del Circuito
El circuito que usaremos es similar al de la clase anterior, donde controlamos un LED. La diferencia es que ahora agregamos un push button (botón pulsador), que permitirá enviar una señal digital 1 o 0 según su estado.
Configuración Pull-Down
Este circuito utiliza una configuración pull-down, lo que significa que:
- Hay una resistencia conectada a tierra (GND).
- En los diagramas eléctricos, "tierra" suele estar en la parte inferior y 5V en la parte superior.
- La resistencia garantiza que la señal se mantenga en 0 lógico por defecto.
Cuando el botón se presiona, la señal cambia a 1 lógico y el ESP32 detecta este cambio.
Conexión del Push Button
- Tiene cuatro pines, de los cuales dos están conectados internamente.
- Funciona como un puente entre la entrada y la salida de la señal.
- Al presionar el botón, se genera continuidad en la corriente.
Función de la Resistencia
La resistencia pull-down es clave para:
- Evitar cortocircuitos.
- Asegurar que la señal tenga un estado bien definido.
- Por defecto: 0 lógico (señal baja).
- Al presionar el botón: 1 lógico (señal alta, 5V).
Código para Leer la Entrada Digital
Vamos a modificar el código anterior para que el LED se encienda solo cuando se presione el botón.
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "driver/gpio.h"
#define LED_PIN 4
#define BTN_PIN 14
void app_main(void)
{
int led_state = 0;
gpio_reset_pin(LED_PIN);
gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);
gpio_set_direction(BTN_PIN, GPIO_MODE_INPUT);
gpio_set_level(LED_PIN, led_state);
while (1)
{
led_state = gpio_get_level(BTN_PIN);
gpio_set_level(LED_PIN, led_state);
}
}
Explicación del Código
- Definimos los pines del LED y del botón.
- Configuramos el LED como salida y el botón como entrada.
- Inicializamos el LED en estado apagado.
- En el ciclo infinito:
- Leemos la entrada digital del botón con gpio_get_level(BTN_PIN).
- Asignamos ese valor al LED (gpio_set_level(LED_PIN, led_state)).
De este modo, cuando presionemos el botón, el LED se encenderá. Cuando lo soltemos, el LED se apagará.
Compilación y Prueba del Código
-
Compilar el código
- Ejecutamos la compilación desde la terminal.
- Como ya se ha compilado antes, el proceso será más rápido.
-
Flashear el Microcontrolador
- Usamos el comando flash, indicando el puerto COM.
-
Probar el Circuito
- Observamos el LED en la protoboard:
- Botón sin presionar → LED apagado.
- Botón presionado → LED encendido.
Uso de Wokwi.com para Simulación
Si no tienes el hardware físico, puedes probar este circuito en, un simulador de ESP32.
Ventajas de Wokwi.com
- Permite escribir código en ESP-IDF (aunque puede ser una versión anterior).
- Simula el circuito electrónico con diagramas visuales.
- Tres pestañas principales:
- main.c → Código principal.
- diagram.json → Configuración del circuito.
- Library Manager → Permite cargar archivos adicionales.
- Posibilidad de agregar más componentes (como LEDs o sensores) con el botón +.
Ejecutando la Simulación
- Abrimos el proyecto en Wokwi.
- Hacemos clic en “Simular”.
- Probamos el circuito:
- Clic en el botón virtual → El LED se enciende.
- Soltar el botón → El LED se apaga.
Limitaciones del Simulador
❌ No soporta Bluetooth ni Wi-Fi. ✅ Funciona perfectamente para entradas y salidas digitales, sensores y pantallas LCD.
✅ Es gratuito y fácil de usar.
Conclusión y Próximos Pasos
Hemos aprendido a leer señales de entrada digital con ESP32 y a probar el código en hardware real y en simulación. Ahora dominas:
✅ Configuración de pines GPIO como entrada y salida.
✅ Uso de resistencias pull-down para señales estables.
✅ Interacción con botones para controlar dispositivos.
✅ Simulación de circuitos en Wokwi.com.