#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

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Controle de LED com botão no ESP32 (momentâneo)
4// ─────────────────────────────────────────
5// O LED fica aceso enquanto o botão está pressionado e apaga quando você o
6// solta. O pino do botão usa o pull-up interno (INPUT_PULLUP), então não
7// precisa de resistor externo.
8//
9// Pinos:
10//   GPIO 5 -> LED vermelho (com resistor de 220 ohm)
11//   GPIO 4 -> Botão (outra perna no GND)
12
13const int LED_PIN = 5;      // Saída do LED
14const int BUTTON_PIN = 4;   // Entrada do botão
15
16void setup() {
17  pinMode(LED_PIN, OUTPUT);
18  pinMode(BUTTON_PIN, INPUT_PULLUP);  // Lê HIGH quando não está pressionado
19}
20
21void loop() {
22  // O botão pressionado puxa o pino para o GND: LOW = pressionado
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.