
Vídeo
Esquema do circuito

Código-fonte
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.
