Usando LEDs e Botões na ESP32
Usando LEDs e Botões no ESP32
Este tutorial explica como controlar LEDs e botões com um microcontrolador ESP32. Ele aborda as conexões de hardware, exigindo um ESP32, LED, resistor, botão e software como o Arduino IDE. Exemplos de código demonstram o controle do LED com base nos pressionamentos de botão. O primeiro exemplo acende o LED quando o botão é pressionado. O segundo exemplo alterna o estado do LED a cada pressionamento de botão e inclui debouncing para evitar leituras espúrias devido ao “bounce” do botão.
Introdução
Usar LEDs e botões com um ESP32 envolve o controle de pinos GPIO (General Purpose Input/Output). Aqui está um detalhamento de como fazer isso!
Requisitos
- Hardware
- ESP32 - ESP32 é uma série de microcontroladores de baixo custo e baixo consumo de energia. É também um sistema em um chip com microcontrolador, Wi-Fi e Bluetooth integrados.
- Diodo emissor de luz - LED comum para prototipagem.
- Resistores - Usados para limitar a corrente através do LED
- Botões e interruptores - Usados para controlar quando o LED está ligado ou desligado.
- Software
- Arduino IDE ou Wokwi para programar/simular o código a ser executado no ESP32.
- Certifique-se de instalar o driver do ESP32.
Conexões de Hardware
Resistor de pull-up
Você também pode querer um resistor de pull-up (10k ohms) entre o pino GPIO e 3.3V para garantir uma leitura estável quando o botão não está pressionado. O ESP32 possui Resistores de pull-up internos que você pode habilitar via software, definindo o pino como
INPUT_PULLUP.

Exemplo de Código 1 - Controlando um LED com um Botão
const int ledPin = 2; // GPIO pin connected to the LED
const int buttonPin = 4; // GPIO pin connected to the button
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); // Enable internal pull-up resistor
}
void loop() {
// Read the button state (LOW when pressed, HIGH when not pressed)
int buttonState = digitalRead(buttonPin);
// If the button is pressed, turn the LED on
if (buttonState == LOW) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}Explicação:
pinMode(ledPin, OUTPUT);: Configura oledPincomo uma saída.pinMode(buttonPin, INPUT_PULLUP);: Configura obuttonPincomo uma entrada e habilita o resistor de pull-up interno.digitalRead(buttonPin);: Lê o valor digital (HIGH ou LOW) dobuttonPin.digitalWrite(ledPin, HIGH);: Acende o LED.digitalWrite(ledPin, LOW);: Apaga o LED.
Exemplo 2 - Alternando um LED com um Botão
const int ledPin = 2;
const int buttonPin = 4;
bool ledState = false;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
int buttonState = digitalRead(buttonPin);
// Check for button press and debounce (optional but recommended)
static unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50; // Debounce time in milliseconds
if (buttonState == LOW && millis() - lastDebounceTime > debounceDelay) {
lastDebounceTime = millis(); // Reset the debounce timer
ledState = !ledState; // Toggle the LED state
digitalWrite(ledPin, ledState ? HIGH : LOW);
}
}Explicação de Alternância e Debouncing:
- Alternância: A linha
ledState = !ledState;inverte a variávelledStatecada vez que o botão é pressionado, alternando efetivamente o LED entre ligado e desligado. - Debouncing: Botões podem “saltar” (flutuar rapidamente entre HIGH e LOW) quando pressionados. O código de debouncing ignora essas flutuações, garantindo que um único pressionamento limpo seja registrado. O exemplo acima usa uma técnica simples de debouncing.