Los pulsadores (o botones) son uno de los componentes más básicos y útiles en electrónica. Con el ESP32 podemos leer su estado para realizar acciones como encender un LED, cambiar de modo o enviar datos.
Hoy te enseño cómo conectar y programar un pulsador en ESP32 de forma sencilla y efectiva.
Conocimiento previo
Para realizar este proyecto se requiere conocimiento previo de los siguientes temas, si aun no has trabajado con lo que se menciona en la siguiente tabla, allí están los links a los post para que puedas dar un repaso adicional o puedas recordar el conocimiento necesario para poder realizar este proyecto.
Proyecto | Descripción |
---|---|
Introducción al esp32 | En este post encontrara los link de los circuitos, montajes y proyectos realizados con esta placa. |
Hoja de dato esp32 | Están todas las características de hardware que posee la placa esp32, ademas de los pines de esta misma. |
Instalar entorno trabajo esp32 | En este post esta el paso a paso para poder instalar y configurar el entorno de trabajo para la placa esp32. |
ESP32

🧰 Materiales
Los materiales que trabajamos en es este proyecto son los básicos para poder encender el led.
Material | Cantidad | Descripción |
---|---|---|
ESP32 | 1 | Controlador del circuito |
1 Pulsador (push button) | 1 | Indicador de luminosidad |
Resistencia de 1k | 1 | Resistencia de protección del circuito |
Protoboard y cables | 1 | Cables macho macho |
⚡ Esquema de conexión
Podemos conectar el pulsador en modo circuito pull up para inyectar un 1 lógico, al momento de presionar el pulsador, enviara un 0 lógico el cual el ESP32 leerá en el pin 23.

Podemos conectar el pulsador en modo circuito pull down para inyectar un 0 lógico, al momento de presionar el pulsador, enviara un 1 lógico el cual el ESP32 leerá en el pin 23.

🧪 Código de ejemplo (Arduino IDE)
Nos guiaremos con el ejemplo que ya realizamos para arduino blink, solo vamos a cambiar el numero de pin, vemos el código.
El siguiente código esta diseñado para el circuito circuito pull up como esta en la primera imagen:
#define BOTTON_PIN 23 // Pin conectado al pulsador
#define LED 2 // Pin del LED integrado del ESP32
void setup() {
pinMode(BOTTON_PIN, INPUT_PULLUP); // Activamos la resistencia pull-up interna
pinMode(LED, OUTPUT);
Serial.begin(115200);
}
void loop() {
int estadoBoton = digitalRead(BOTTON_PIN); // Leemos el botón
Serial.println(estadoBoton);
if (estadoBoton == LOW) { // LOW significa que está presionado
digitalWrite(LED, HIGH); // Encendemos LED
Serial.println("Botón presionado");
} else {
digitalWrite(LED, LOW); // Apagamos LED
}
delay(10); // Pequeño retardo para evitar rebotes
}
El siguiente código esta para el circuito pull down
#define BOTTON_PIN 23 // Pin conectado al pulsador
#define LED 2 // Pin del LED integrado del ESP32
void setup() {
pinMode(BOTTON_PIN, INPUT_PULLUP); // Activamos la resistencia pull-up interna
pinMode(LED, OUTPUT);
Serial.begin(115200);
}
void loop() {
int estadoBoton = digitalRead(BOTTON_PIN); // Leemos el botón
Serial.println(estadoBoton);
if (estadoBoton == HIGH) { // HIGH significa que está presionado
digitalWrite(LED, HIGH); // Encendemos LED
Serial.println("Botón presionado");
} else {
digitalWrite(LED, LOW); // Apagamos LED
}
delay(10); // Pequeño retardo para evitar rebotes
}
- INPUT_PULLUP: activa una resistencia interna para mantener el pin en HIGH.
- digitalRead: detecta si el botón está presionado.
- Al presionar el botón, el pin se pone en LOW, así que se enciende el LED.
🔄 ¿Cómo evitar rebotes?
Los pulsadores generan ruido eléctrico al cambiar de estado. Puedes evitarlo con:
- Un pequeño delay(50)
- Lógica de debounce con millis() si quieres algo más robusto.
Prueba de compilación y carga del script
Vamos a crear un proyecto por el momento vacío para ver como se compila y se carga el script a la tarjeta, lo primero que vamos a ver es a configuración de las variables para el compilador del esp32, aunque no vamos a modificar por que trabajaremos con las que trae por defecto, las cuales son las siguientes:
