Control de LED con pulsador en ESP32 (Push)
El LED se enciende cuando se pulsa el botón y se apaga cuando se suelta. Muestra cómo se utiliza el pin de entrada digital del ESP32 y la resistencia pull-up interna. Gracias al modo INPUT_PULLUP, no se necesita ninguna resistencia externa.

Video
Diagrama del circuito

Código fuente
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Control de LED con pulsador en ESP32 (Push)
4// ─────────────────────────────────────────
5// El LED permanece encendido mientras se mantiene pulsado el botón y se
6// apaga al soltarlo. El pin del botón usa la pull-up interna
7// (INPUT_PULLUP), así que no hace falta resistencia externa.
8//
9// Pines:
10// GPIO 5 -> LED rojo (con una resistencia de 220 ohmios)
11// GPIO 4 -> Botón (otra patilla a GND)
12
13const int LED_PIN = 5; // Salida del LED
14const int BUTTON_PIN = 4; // Entrada del botón
15
16void setup() {
17 pinMode(LED_PIN, OUTPUT);
18 pinMode(BUTTON_PIN, INPUT_PULLUP); // Lee HIGH cuando no está pulsado
19}
20
21void loop() {
22 // Un botón pulsado lleva el pin a GND: LOW = pulsado
23 if (digitalRead(BUTTON_PIN) == LOW) {
24 digitalWrite(LED_PIN, HIGH);
25 } else {
26 digitalWrite(LED_PIN, LOW);
27 }
28}
29Preguntas frecuentes
¿Cómo se conecta un botón con INPUT_PULLUP?▾
Una de las patas del botón se conecta al pin GPIO y la otra a GND. La resistencia pull-up interna mantiene el pin en estado HIGH; al pulsar el botón, el pin se conecta a GND y se lee como LOW. No se necesita ninguna resistencia externa.
¿Por qué se invierte la lógica?▾
Cuando se utiliza el pull-up, se lee HIGH si no se pulsa el botón y LOW si se pulsa. Por eso, en el código, la condición «if (digitalRead(botón) == LOW)» indica que se ha pulsado el botón.
¿En qué pines no hay pull-up interno?▾
Los pines GPIO 34, 35, 36 y 39 son únicamente pines de entrada y no disponen de resistencias pull-up/pull-down internas. Si vas a utilizar un botón en estos pines, debes añadir una resistencia externa de 10 kΩ.
¿Puedo sustituir el botón por un sensor táctil?▾
Sí, el ESP32 cuenta con pines táctiles integrados (por ejemplo, GPIO 4, 13, 14, 15 y 27). Con la función touchRead() puedes detectar el contacto con un cable o una placa metálica como si fuera un botón.
