Fundamentos · 6 min de leitura

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).

Placa de desenvolvimento ESP32 DevKit
Placa de desenvolvimento ESP32: o processador, o Wi-Fi e o Bluetooth ficam dentro do módulo com tampa metálica; a placa também tem um chip USB-serial, um regulador e os botões EN e BOOT.

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ísticaArduino Uno R3ESP32 (WROOM-32)
ProcessadorATmega328P, 8 bits, 16 MHzXtensa LX6, dois núcleos, 32 bits, 240 MHz
RAM2 KB520 KB
Memória de programa (flash)32 KBNormalmente 4 MB
Sem fioNenhumWi-Fi + Bluetooth (Classic e BLE)
Tensão de operação5 V3,3 V
GPIO utilizáveis20Cerca de 34 (alguns só de entrada)
Entrada analógica (ADC)6 canais, 10 bits18 canais, 12 bits
Saída analógica (DAC)Nenhuma2 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:

PinosSituaçãoObservação
GPIO 6–11Não useLigados à flash interna; usá-los trava a placa
GPIO 34–39Só entradaNão têm saída nem pull-up interno
GPIO 0, 2, 12, 15Use com cuidadoO nível deles durante o boot importa
GPIO 1 e 3Use com cuidadoTX 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 ligadoUse o ADC1 (GPIO 32–39) para leituras analógicas
GPIO 4, 5, 13, 14, 16–19, 21–23, 25–27, 32, 33SegurosEntrada e saída de uso geral
Os pinos do ESP32 funcionam com 3,3 V e não toleram 5 V. Não ligue direto um sensor com saída de 5 V (como o pino ECHO do HC-SR04); coloque um divisor de tensão ou um conversor de nível no meio. Puxar até cerca de 20 mA de um pino é seguro.

Configurando o ESP32 na Arduino IDE

  1. 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".
  2. No Gerenciador de Placas, busque esp32 e instale o pacote da Espressif Systems.
  3. Escolha ESP32 Dev Module em Ferramentas > Placa.
  4. 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).
  5. 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:

C++ (Arduino IDE)
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:

C++ (Arduino IDE)
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}
O ESP32 só consegue entrar em redes Wi-Fi de 2,4 GHz; ele não enxerga redes de 5 GHz. Se o seu roteador transmite as duas bandas com o mesmo nome e você tem problemas de conexão, dar um nome de rede próprio para a banda de 2,4 GHz ajuda.

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é?

C++ (Arduino IDE)
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?

ModeloCaracterística principalQuando escolher
ESP32 (WROOM-32 DevKit)Wi-Fi, Bluetooth Classic e BLE, dois núcleosPrimeira placa de uso geral
ESP32-S3USB nativa, mais RAM, instruções para IAProjetos com câmera, áudio, teclado e mouse USB
ESP32-C3RISC-V de um núcleo, Wi-Fi e BLE, pequeno e baratoSensores IoT simples
ESP32-CAMCâmera e slot microSDTransmissão de imagens, câmeras de segurança
ESP8266 (NodeMCU, Wemos D1)Mais antigo, um núcleo, só Wi-FiProjetos 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:

MicroPython
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.

Ver todos os projetos
LED piscando com ESP32
#103Iniciante

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.

4.7(37)
99
Conexão Wi-Fi STA com ESP32 e display LCD
#127Avançado

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.

4.4(21)
34
Servidor web assíncrono com ESP32 (IP no LCD)
#129Avançado

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.

4.8(16)
26
Contador WebSocket com ESP32 (2 botões + LCD + web em tempo real)
#130Avançado
Premium

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().

4.5(14)
23
ESP32 HTTPClient + API de clima (com display LCD)
#133Avançado
Premium

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.

4.7(13)
20
Hora exata pela internet com ESP32 e NTP
#128Avançado
Premium

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.

4.5(13)
21
Iluminação automática com ESP32 e sensor de movimento PIR
#121Intermediário
Premium

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.

4.4(24)
38
Alarme de movimento com ESP32 (PIR + buzzer + LED + Telegram)
#145Avançado
Premium

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.

0.0(0)
9