En esta guía práctica vas a aprender a leer entradas digitales (como un pulsador) y a controlar salidas digitales (como un LED) usando el ESP32 con Arduino IDE. Es uno de los primeros pasos que todo maker debe dominar antes de pasar a proyectos más complejos como sensores, relés o domótica.
Requisitos previos
Vamos a programar el ESP32 usando Arduino IDE, así que asegúrate de tener instalado el soporte de placas ESP32 antes de continuar. Si aún no lo has hecho, sigue la guía de instalación correspondiente para tu sistema operativo (Windows, macOS o Linux).
Controlar salidas digitales con el ESP32
Lo primero que necesitas es configurar el GPIO que quieres controlar como OUTPUT (salida). Para ello se utiliza la función pinMode():
pinMode(GPIO, OUTPUT);
Una vez configurado como salida, para controlar el estado del pin se usa la función digitalWrite(), que acepta dos argumentos: el número de GPIO al que te refieres y el estado, ya sea HIGH o LOW.
digitalWrite(GPIO, STATE);
Todos los GPIO pueden usarse como salidas excepto los GPIO 6 a 11 (conectados a la memoria flash SPI integrada) y los GPIO 34, 35, 36 y 39 (que son pines solo de entrada). Si tienes dudas sobre qué pines puedes usar, consulta la Guía de Referencia de GPIO del ESP32.
Leer entradas digitales con el ESP32
Para leer una entrada digital, primero debes configurar el GPIO como INPUT (entrada) usando pinMode():
pinMode(GPIO, INPUT);
Después, para leer el estado de un pin digital, como un pulsador, se utiliza la función digitalRead(), que acepta como argumento el número de GPIO que quieres leer:
digitalRead(GPIO);
Todos los GPIO del ESP32 pueden usarse como entradas, excepto los GPIO 6 a 11 (conectados a la memoria flash SPI integrada). Recuerda que esta restricción es crítica: si intentas usar esos pines, el ESP32 no arrancará correctamente.
Ejemplo práctico: encender un LED con un pulsador
Para mostrarte cómo funcionan las entradas y salidas digitales en conjunto, vamos a construir un proyecto sencillo con un pulsador y un LED. El objetivo es leer el estado del pulsador y encender el LED cuando se pulse, apagándolo cuando se suelte.
Componentes necesarios
Para montar este circuito necesitas:
Un ESP32 (cualquier placa de desarrollo válida), un LED de 5 mm, una resistencia de 330 Ω para el LED, un pulsador, una resistencia de 10 kΩ para el pulsador, una protoboard y cables jumper.
Esquema de conexión
Conecta el LED al GPIO 5 (con su resistencia de 330 Ω en serie hacia GND) y el pulsador al GPIO 4 (con la resistencia de 10 kΩ como pull-down hacia GND, o usando el pull-up interno del ESP32 si lo prefieres).
Código completo
Copia el siguiente código en tu Arduino IDE:
// Instrucciones completas: https://RandomNerdTutorials.com/esp32-digital-inputs-outputs-arduino/
// Definición de los números de pin
const int buttonPin = 4; // Número del pin del pulsador
const int ledPin = 5; // Número del pin del LED
// Variable para almacenar el estado del pulsador
int buttonState = 0;
void setup() {
Serial.begin(115200);
// Inicializa el pin del pulsador como entrada
pinMode(buttonPin, INPUT);
// Inicializa el pin del LED como salida
pinMode(ledPin, OUTPUT);
}
void loop() {
// Lee el estado del pulsador
buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
// Comprueba si el pulsador está presionado.
// Si lo está, buttonState es HIGH
if (buttonState == HIGH) {
// Enciende el LED
digitalWrite(ledPin, HIGH);
} else {
// Apaga el LED
digitalWrite(ledPin, LOW);
}
}
Cómo funciona el código paso a paso
En las dos primeras líneas se declaran variables constantes que asignan los pines a usar:
const int buttonPin = 4;
const int ledPin = 5;
El pulsador está conectado al GPIO 4 y el LED al GPIO 5. Al usar Arduino IDE con el ESP32, el número 4 corresponde al GPIO 4 y el 5 al GPIO 5.
A continuación se declara una variable para almacenar el estado del pulsador, inicializada por defecto en 0 (no presionado):
int buttonState = 0;
Dentro de setup() se inicializa el pulsador como INPUT y el LED como OUTPUT usando la función pinMode():
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
En loop() es donde ocurre toda la lógica de lectura y control. Primero se lee el estado del pulsador y se guarda en la variable buttonState con la función digitalRead():
buttonState = digitalRead(buttonPin);
Después, la sentencia if comprueba si el estado del pulsador es HIGH. Si lo es, se enciende el LED con digitalWrite(), pasando ledPin y el estado HIGH como argumentos:
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
}
Si el pulsador no está presionado (estado LOW), se apaga el LED pasando LOW como segundo argumento:
else {
digitalWrite(ledPin, LOW);
}
Subir el código a la placa
Antes de pulsar el botón de carga, ve a Herramientas > Placa y selecciona el modelo que estés usando. En este ejemplo es la placa DOIT ESP32 DEVKIT V1.
Después, ve a Herramientas > Puerto y selecciona el puerto COM al que está conectado el ESP32. Pulsa el botón de subir y espera el mensaje “Done uploading” (Carga completada).
Solución de problemas comunes: Si ves muchos puntos suspensivos (
…__…__) en la ventana de depuración y el mensaje “Failed to connect to ESP32: Timed out waiting for packet header”, necesitas pulsar el botón BOOT de la placa ESP32 justo cuando empiecen a aparecer los puntos. Es un problema típico y muy fácil de resolver.
Demostración del funcionamiento
Una vez cargado el código, prueba el circuito. El LED debería encenderse cuando pulses el pulsador y apagarse cuando lo sueltes. Si no funciona como esperas, revisa las conexiones y asegúrate de que el pulsador tiene la resistencia pull-down (o activa el pull-up interno con INPUT_PULLUP).
Conclusión
Con esta guía introductoria has aprendido a leer entradas digitales y controlar salidas digitales con el ESP32 usando Arduino IDE. Estos dos conceptos son la base de prácticamente cualquier proyecto que hagas con esta placa.
Si quieres seguir avanzando, los siguientes pasos naturales son aprender a leer entradas analógicas (con el ADC del ESP32) y a generar señales PWM para simular salidas analógicas. También te recomendamos consultar la Guía de Referencia de GPIO del ESP32 para dominar todas las funciones de cada pin y evitar los errores más comunes.
Descubre más desde CIBERED
Suscríbete y recibe las últimas entradas en tu correo electrónico.
