O que é ESP32? Características, configuração na Arduino IDE e seu primeiro projeto com Wi-Fi
O que é o ESP32 e qual a diferença para o Arduino? Wi-Fi e Bluetooth, pinos seguros, configuração na Arduino IDE, um primeiro Blink, conexão ao Wi-Fi, controle de um LED pelo celular, variantes do ESP32 e erros comuns.
O ESP32 é um microcontrolador de dois núcleos, muito barato, fabricado pela Espressif, com Wi-Fi e Bluetooth embutidos. Sozinho, ele faz muita coisa que um Arduino Uno não consegue: entrar na sua rede de casa, servir uma página web que você abre no celular, buscar a hora e o clima na internet e conversar com o celular por Bluetooth. Além disso, ele é programado na Arduino IDE com os comandos do Arduino que você já conhece. Hoje, é a placa mais popular para começar em projetos de Internet das Coisas (IoT).

O que é o ESP32 e para que ele serve?
A rigor, "ESP32" é o nome do chip que fica embaixo da tampa metálica. A placa que você segura é uma placa de desenvolvimento com esse chip (como a ESP32 DevKit ou a NodeMCU-32S): ela tem um conversor USB-serial para conversar com o computador, um regulador que baixa 5 V para 3,3 V e botões de reset (EN) e de programação (BOOT). Veja algumas das coisas que você pode fazer com um ESP32:
- Estação meteorológica com Wi-Fi: mostre a temperatura e a umidade em uma página que você abre no celular.
- Controle pelo celular: acione uma lâmpada, uma tomada ou uma porta com um botão em uma página web.
- Buscar dados na internet: mostre em um display a hora real (NTP), o clima ou a cotação de moedas.
- Enviar notificações: receba um aviso pelo Telegram ou por e-mail quando um movimento for detectado.
- Dispositivos Bluetooth: monte um controle que pareia com o celular ou um dispositivo que o computador reconhece como teclado.
- Sensores que funcionam por meses com bateria: acorde do deep sleep só para fazer uma medição.
ESP32 vs Arduino Uno
| Característica | Arduino Uno R3 | ESP32 (WROOM-32) |
|---|---|---|
| Processador | ATmega328P, 8 bits, 16 MHz | Xtensa LX6, dois núcleos, 32 bits, 240 MHz |
| RAM | 2 KB | 520 KB |
| Memória de programa (flash) | 32 KB | Normalmente 4 MB |
| Sem fio | Nenhum | Wi-Fi + Bluetooth (Classic e BLE) |
| Tensão de operação | 5 V | 3,3 V |
| GPIO utilizáveis | 20 | Cerca de 34 (alguns só de entrada) |
| Entrada analógica (ADC) | 6 canais, 10 bits | 18 canais, 12 bits |
| Saída analógica (DAC) | Nenhuma | 2 canais, 8 bits |
Olhando esta tabela, o ESP32 parece melhor em tudo, mas o Uno também tem suas vantagens: como funciona com 5 V, ele é compatível direto com a maioria dos sensores e módulos mais antigos, seus pinos são mais resistentes e ele dá menos surpresas para iniciantes. Se você não precisa de conexão sem fio, o Uno continua sendo um ótimo ponto de partida; para decidir qual escolher, dê uma olhada em Qual Arduino comprar?
Pinos do ESP32: quais são seguros?
Os pinos do ESP32 não são todos "iguais" como no Arduino. Alguns estão ligados à memória flash, alguns só funcionam como entrada, e o nível de outros afeta a forma como a placa inicia. Você vê o mapa completo de pinos da sua placa na ferramenta Pinagem; aqui vai um resumo:
| Pinos | Situação | Observação |
|---|---|---|
| GPIO 6–11 | Não use | Ligados à flash interna; usá-los trava a placa |
| GPIO 34–39 | Só entrada | Não têm saída nem pull-up interno |
| GPIO 0, 2, 12, 15 | Use com cuidado | O nível deles durante o boot importa |
| GPIO 1 e 3 | Use com cuidado | TX e RX da conexão serial USB |
| Pinos do ADC2 (0, 2, 4, 12–15, 25–27) | Sem leitura analógica com o Wi-Fi ligado | Use o ADC1 (GPIO 32–39) para leituras analógicas |
| GPIO 4, 5, 13, 14, 16–19, 21–23, 25–27, 32, 33 | Seguros | Entrada e saída de uso geral |
Configurando o ESP32 na Arduino IDE
- Na Arduino IDE, abra Arquivo > Preferências e adicione https://espressif.github.io/arduino-esp32/package_esp32_index.json ao campo "URLs do Gerenciador de Placas Adicionais".
- No Gerenciador de Placas, busque esp32 e instale o pacote da Espressif Systems.
- Escolha ESP32 Dev Module em Ferramentas > Placa.
- Conecte o ESP32 com um cabo USB e escolha a porta certa em Ferramentas > Porta. Se nenhuma porta aparecer, instale o driver do chip USB-serial da sua placa (CP2102 ou CH340).
- Se "Connecting..." ficar muito tempo na tela durante o carregamento, segure o botão BOOT da placa e solte quando o carregamento começar.
Primeiro programa: piscando o LED embutido
A maioria das placas ESP32 DevKit tem um LED azul ligado ao GPIO 2. O código abaixo faz ele piscar a cada meio segundo; como você pode ver, os comandos são exatamente os mesmos do Arduino:
1const int LED_PIN = 2; // çoğu DevKit'te dahili mavi LED / onboard blue LED on most DevKits
2
3void setup() {
4 pinMode(LED_PIN, OUTPUT);
5}
6
7void loop() {
8 digitalWrite(LED_PIN, HIGH);
9 delay(500);
10 digitalWrite(LED_PIN, LOW);
11 delay(500);
12}Conectando ao Wi-Fi
A verdadeira força do ESP32 é o Wi-Fi. O código abaixo entra na sua rede de casa e mostra no Monitor Serial o endereço IP que o roteador dá ao ESP32. Troque o nome da rede e a senha pelos seus e abra o Monitor Serial em 115200 baud:
1#include <WiFi.h>
2
3const char* ssid = "AgAdi"; // Wi-Fi adın / your Wi-Fi name
4const char* password = "Sifre123"; // Wi-Fi şifren / your Wi-Fi password
5
6void setup() {
7 Serial.begin(115200);
8 WiFi.begin(ssid, password);
9 Serial.print("Bağlanıyor / connecting");
10 while (WiFi.status() != WL_CONNECTED) {
11 delay(500);
12 Serial.print(".");
13 }
14 Serial.println();
15 Serial.print("IP adresi / IP address: ");
16 Serial.println(WiFi.localIP());
17}
18
19void loop() {
20}Controlando um LED pelo celular: um servidor web simples
Agora vamos transformar o ESP32 em um pequeno servidor web. Depois de carregar, abra o endereço IP mostrado no Monitor Serial no navegador de um celular conectado ao mesmo Wi-Fi; os dois botões da página ligam e desligam o LED da placa. Ligue um relé no lugar do LED e você controla uma lâmpada de verdade do mesmo jeito; veja O que é módulo relé?
1#include <WiFi.h>
2#include <WebServer.h>
3
4const char* ssid = "AgAdi";
5const char* password = "Sifre123";
6const int LED_PIN = 2;
7
8WebServer server(80);
9
10void handleRoot() {
11 server.send(200, "text/html",
12 "<meta name='viewport' content='width=device-width'>"
13 "<h1>ESP32</h1>"
14 "<a href='/on'><button>LED AÇ / ON</button></a> "
15 "<a href='/off'><button>LED KAPAT / OFF</button></a>");
16}
17
18void setup() {
19 pinMode(LED_PIN, OUTPUT);
20 Serial.begin(115200);
21 WiFi.begin(ssid, password);
22 while (WiFi.status() != WL_CONNECTED) delay(500);
23 Serial.println(WiFi.localIP()); // bu adresi telefonda aç / open this address on your phone
24
25 server.on("/", handleRoot);
26 server.on("/on", []() { digitalWrite(LED_PIN, HIGH); handleRoot(); });
27 server.on("/off", []() { digitalWrite(LED_PIN, LOW); handleRoot(); });
28 server.begin();
29}
30
31void loop() {
32 server.handleClient();
33}Variantes do ESP32: qual comprar?
| Modelo | Característica principal | Quando escolher |
|---|---|---|
| ESP32 (WROOM-32 DevKit) | Wi-Fi, Bluetooth Classic e BLE, dois núcleos | Primeira placa de uso geral |
| ESP32-S3 | USB nativa, mais RAM, instruções para IA | Projetos com câmera, áudio, teclado e mouse USB |
| ESP32-C3 | RISC-V de um núcleo, Wi-Fi e BLE, pequeno e barato | Sensores IoT simples |
| ESP32-CAM | Câmera e slot microSD | Transmissão de imagens, câmeras de segurança |
| ESP8266 (NodeMCU, Wemos D1) | Mais antigo, um núcleo, só Wi-Fi | Projetos de Wi-Fi bem simples |
Alimentação e funcionamento com bateria
Quando liga o Wi-Fi, o ESP32 pode puxar por um instante até 250 mA. Se uma porta USB fraca ou um cabo fino não aguentar essa carga repentina, a placa reinicia com a mensagem "Brownout detector was triggered". Use um bom cabo e um adaptador de 5 V que forneça pelo menos 1 A; se precisar, acrescente um capacitor de 100–470 µF entre o 3V3 e o GND. Em projetos com bateria, o modo deep sleep do ESP32 reduz o consumo do chip a microampères; porém, o regulador e o LED das placas de desenvolvimento continuam puxando alguns mA, então, para uma bateria que dure muito, prefere-se um módulo sem placa ou uma placa de baixo consumo.
O ESP32 com MicroPython
O ESP32 pode ser programado não só na linguagem do Arduino, mas também em MicroPython. Depois de gravar o MicroPython na placa com o Thonny, conectar ao Wi-Fi leva só algumas linhas:
1import network, time
2from machine import Pin
3
4led = Pin(2, Pin.OUT)
5wlan = network.WLAN(network.STA_IF)
6wlan.active(True)
7wlan.connect("AgAdi", "Sifre123") # Wi-Fi adı ve şifresi / Wi-Fi name and password
8
9while not wlan.isconnected():
10 time.sleep(0.5)
11print("IP:", wlan.ifconfig()[0])
12
13while True:
14 led.value(not led.value()) # LED'i yakıp söndür / toggle the LED
15 time.sleep(0.5)Ideias de projetos com ESP32
- Estação meteorológica com Wi-Fi: acompanhe pelo celular a temperatura e a umidade medidas por um DHT11.
- Tomada inteligente: acenda uma lâmpada com um relé por uma página web ou por um assistente de voz.
- Alarme de movimento: envie uma notificação no Telegram quando um sensor PIR detectar alguém.
- Relógio pela internet: pegue a hora de um servidor NTP e mostre em um LCD ou em um display de 7 segmentos.
- Controle Bluetooth: pilote um carrinho robô com um app no celular.
- Sensor econômico de bateria: monte um dispositivo que acorda a cada 10 minutos, envia uma leitura e volta a dormir.
Erros comuns e como resolvê-los
- Nenhuma porta aparece: o cabo pode ser só de carga, ou o driver USB-serial não está instalado; use um cabo de dados e instale o driver CP2102 ou CH340.
- "Failed to connect... Timed out waiting for packet header": segure o botão BOOT enquanto o carregamento começa.
- A placa fica reiniciando: falta energia (brownout); use um cabo e um adaptador melhores e um capacitor.
- Ele não conecta ao Wi-Fi: a rede pode ser de 5 GHz, ou há um erro de maiúsculas e minúsculas no nome ou na senha.
- Usar os GPIO 6–11: esses pinos estão ligados à flash; usá-los trava a placa.
- Os valores analógicos ficam errados quando o Wi-Fi liga: o sensor está em um pino do ADC2; passe-o para um dos pinos do ADC1, entre o GPIO 32 e o 39.
O ESP32 é o jeito mais fácil de levar para a internet o que você aprendeu no Arduino. Para revisar o básico do Arduino, veja O que é Arduino?; no app BlueGrays você encontra dezenas de projetos com ESP32, incluindo LEDs, servidores web, WebSockets, um relógio NTP, dados do clima e um alarme pelo Telegram, com esquemas do circuito e código.
Perguntas frequentes
O ESP32 é um Arduino?
Não. O ESP32 é um microcontrolador separado, fabricado pela Espressif, enquanto Arduino é o nome de um ecossistema de placas e software. Graças ao pacote que a Espressif oferece, porém, o ESP32 pode ser programado na Arduino IDE com os comandos do Arduino, então a maior parte do código de Arduino roda no ESP32 com pequenas mudanças.
O ESP32 funciona com 5 V?
A placa de desenvolvimento pode ser alimentada com 5 V pela USB ou pelo pino VIN; o regulador da placa baixa isso para 3,3 V. Os pinos GPIO, no entanto, funcionam com 3,3 V e não toleram 5 V, então você não deve ligar sinais de 5 V direto neles.
Devo comprar um ESP32 ou um Arduino Uno?
Para projetos que precisam de Wi-Fi, Bluetooth ou internet, pegue um ESP32. Se você é novo em eletrônica e quer trabalhar sem complicação com sensores e módulos de 5 V e seguir tutoriais à risca, o Arduino Uno faz você começar com menos surpresas.
O ESP32 conecta ao Wi-Fi de 5 GHz?
O ESP32 clássico, o ESP32-S3 e o ESP32-C3 só aceitam Wi-Fi de 2,4 GHz e não enxergam redes de 5 GHz. Confira se a banda de 2,4 GHz do seu roteador está ligada.
Qual é a diferença entre o ESP32 e o ESP8266?
O ESP8266 é um chip mais antigo, de um núcleo, que só tem Wi-Fi e uma única entrada analógica. O ESP32 tem dois núcleos e é mais rápido, também tem Bluetooth e conta com muito mais pinos, canais de ADC e memória. Para projetos novos, o ESP32 é o preferido.
O ESP32 pode ser usado sem internet?
Sim. O ESP32 consegue criar a própria rede Wi-Fi (modo ponto de acesso), vários ESP32 podem conversar entre si sem roteador usando ESP-NOW, e ele pode se conectar a um celular por Bluetooth. Você também pode usá-lo como um Arduino potente, sem nenhum dos recursos sem fio.
Projetos para montar depois desta leitura
Ver todos os projetos
LED piscando com ESP32
Ensina o uso básico de uma saída GPIO no ESP32. Fazemos um LED piscar ligando e desligando um pino digital. É a versão para ESP32 do clássico projeto blink do Arduino UNO: os comandos básicos de blink no ambiente Arduino são os mesmos, mas a disposição dos pinos e os níveis de 3,3 V dos GPIOs do ESP32 diferem dos do Arduino UNO.

Conexão Wi-Fi STA com ESP32 e display LCD
Neste projeto, conectamos o ESP32 à rede Wi-Fi de casa no modo estação (STA), de forma segura e tolerante a falhas. Guardamos o SSID e a senha em um arquivo secrets.h separado para evitar que sejam expostos no Git, configuramos um mecanismo de reconexão automática e exibimos o nível de sinal RSSI e o endereço IP em um display LCD I2C. O LED integrado funciona como indicador de status. É um gerenciador de conexão pronto para uso em produção.

Servidor web assíncrono com ESP32 (IP no LCD)
Neste projeto, transformamos o ESP32 em um servidor web assíncrono que você pode controlar pelo celular ou computador na mesma rede Wi-Fi. Com a biblioteca ESPAsyncWebServer, o servidor processa várias requisições ao mesmo tempo (ao contrário do WebServer.h tradicional, que bloqueia a execução ao processar uma requisição). Você poderá abrir o endereço IP do ESP32 no navegador e clicar nos botões ON/OFF (as rotas /on e /off) para ligar e desligar o LED conectado ao GPIO 5.

Contador WebSocket com ESP32 (2 botões + LCD + web em tempo real)
Neste projeto, dois botões conectados ao ESP32 (GPIO 5 aumenta, GPIO 4 diminui) alteram um contador. O valor é atualizado instantaneamente no LCD I2C 16x2 e, com o suporte a WebSocket do ESPAsyncWebServer, em todos os navegadores conectados, sem recarregar a página. Em vez de consultas periódicas por HTTP, usamos uma única conexão persistente, e o ESP32 envia o novo valor a todos com ws.textAll().

ESP32 HTTPClient + API de clima (com display LCD)
Neste projeto, usamos o ESP32 para fazer uma chamada REST à API de clima wttr.in pela internet com HTTPClient.h. Interpretamos a resposta JSON com ArduinoJson v7 e mostramos cidade, temperatura, umidade, condições do tempo e vento em um display LCD I2C, em turco e inglês. O wttr.in é grátis e não exige chave de API — basta informar o nome de uma cidade para consultar o clima atual. Os dados se atualizam sozinhos a cada 30 minutos, e o LED dá um retorno visual diferente para cada tela.

Hora exata pela internet com ESP32 e NTP
O ESP32 se conecta ao Wi-Fi e obtém a hora exata com precisão de milissegundos de servidores NTP (Network Time Protocol). Com a função configTzTime(), o fuso horário configurado (TRT, UTC+3 neste exemplo) é aplicado automaticamente, e as mudanças nos países que adotam horário de verão são gerenciadas automaticamente por uma string POSIX TZ. A hora é exibida tanto no Monitor Serial quanto em um LCD I2C opcional.

Iluminação automática com ESP32 e sensor de movimento PIR
Neste projeto, usaremos o sensor de movimento PIR HC-SR501 para detectar quando alguém entra no cômodo e acender o LED automaticamente. Acompanharemos o tempo em que o LED fica aceso com millis(). Cada leitura HIGH do sensor atualizará o instante do último movimento, e o LED apagará pelo menos 10 segundos após a última leitura HIGH. O código atual também espera 50 ms em cada ciclo com delay(50), portanto o laço da aplicação não é totalmente livre de bloqueios.

Alarme de movimento com ESP32 (PIR + buzzer + LED + Telegram)
Um sistema de alarme de segurança inteligente que aciona o buzzer e o LED quando o sensor PIR detecta movimento e, ao mesmo tempo, envia uma notificação instantânea ao proprietário pelo Telegram. Inclui um intervalo de espera de 30 segundos para limitar a frequência dos alarmes repetidos; esse mecanismo não valida as detecções do PIR nem elimina disparos falsos. Pode ser usado na segurança de casas, no monitoramento de garagens, depósitos ou salas de trabalho.
Mais artigos
App BlueGrays
Monte este circuito passo a passo pelo celular
Esquema do circuito, código e lista de componentes em uma só tela. Mais de 200 projetos com Arduino, ESP32 e Pico prontos para montar.
Escaneie com seu celular
Aponte a câmera para o código para abrir a loja de aplicativos do seu celular.
ou abrir a loja

