#104Principiante

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.

4.6(36)
55 completado
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

Control de LED con pulsador en ESP32 (Push) - Circuit

Código fuente

Arduino (C++)
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}
29

Preguntas 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.

Control de LED con pulsador en ESP32 (Push) | BlueGrays