#104Iniciante

Controle de LED com botão no ESP32 (momentâneo)

O LED acende enquanto o botão está pressionado e apaga ao soltá-lo. Mostra como usar o pino de entrada digital e o resistor pull-up interno do ESP32. O modo INPUT_PULLUP dispensa um resistor externo.

4.6(36)
55 concluído
Controle de LED com botão no ESP32 (momentâneo)
Como uma campainha: a luz fica acesa enquanto você pressiona e apaga quando solta. O ESP32 monitora o botão continuamente; enquanto ele está pressionado, o LED fica aceso, e apaga assim que você solta. Você vê, da forma mais simples, como a placa detecta um toque vindo do mundo externo.

Vídeo

Esquema do circuito

Controle de LED com botão no ESP32 (momentâneo) - Circuit

Código-fonte

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   ESP32 LED Control with Push Button (Push)
4// ─────────────────────────────────────────
5// The LED stays on while the button is held down and turns off when it is
6// released. The button pin uses the internal pull-up (INPUT_PULLUP), so no
7// external resistor is needed.
8//
9// Pins:
10//   GPIO 5 -> Red LED (with a 220 ohm resistor)
11//   GPIO 4 -> Button (other leg to GND)
12
13const int LED_PIN = 5;      // LED output
14const int BUTTON_PIN = 4;   // Button input
15
16void setup() {
17  pinMode(LED_PIN, OUTPUT);
18  pinMode(BUTTON_PIN, INPUT_PULLUP);  // Reads HIGH when not pressed
19}
20
21void loop() {
22  // A pressed button pulls the pin to GND: LOW = pressed
23  if (digitalRead(BUTTON_PIN) == LOW) {
24    digitalWrite(LED_PIN, HIGH);
25  } else {
26    digitalWrite(LED_PIN, LOW);
27  }
28}
29

Perguntas frequentes

Como conectar um botão usando INPUT_PULLUP?▾

Um terminal do botão é conectado a um pino GPIO, e o outro ao GND. O resistor pull-up interno mantém o pino em HIGH; ao pressionar o botão, o pino é conectado ao GND e a leitura passa a ser LOW. Não é necessário um resistor externo.

Por que a lógica fica invertida?▾

Com o resistor pull-up, a leitura é HIGH quando o botão está solto e LOW quando está pressionado. Por isso, a condição "if (digitalRead(button) == LOW)" no código indica que o botão foi pressionado.

Quais pinos não têm pull-up interno?▾

GPIO 34, 35, 36 e 39 são pinos apenas de entrada e não têm resistores pull-up ou pull-down internos. Para usar um botão nesses pinos, você precisa adicionar um resistor externo de 10 kΩ.

Posso substituir o botão por um sensor de toque?▾

Sim, o ESP32 tem pinos sensíveis ao toque integrados (por exemplo, GPIO 4, 13, 14, 15, 27). Você pode usar `touchRead()` para detectar um toque em um fio ou uma placa de metal como se fosse um botão.