Componente · Controlador
ESP32
O ESP32 é um microcontrolador rápido de dois núcleos com Wi-Fi e Bluetooth integrados—um Arduino com comunicação sem fio. O que ele faz e quando escolhê-lo.
O que é
O ESP32 é um microcontrolador que parece um Arduino com um rádio preso e os freios removidos. Ele tem um processador de dois núcleos de 32 bits que funciona muitas vezes mais rápido que um Uno, muito mais memória e—o recurso principal—Wi-Fi e Bluetooth integrados. Essa combinação explica sua dominância na robótica de iniciação e na IoT: um robô pode servir uma página na Internet para se controlar, transmitir dados de sensores ao celular ou receber comandos por Bluetooth, tudo a partir de um único chip barato.
O mais importante é que você o programa com o mesmo Arduino IDE e a mesma linguagem que talvez já conheça. O que aprendeu em um Uno é transferido diretamente; você simplesmente ganha conectividade e margem de desempenho.
Como funciona
Em seu interior há duas CPUs Xtensa com frequência de até 240 MHz. Ter dois núcleos importa para robôs: um núcleo pode executar a malha de controle com temporização estável enquanto o outro lida com o Wi-Fi, portanto a rede nunca interrompe o controle das rodas. Ao redor da CPU estão os periféricos usuais de um microcontrolador—GPIO, canais PWM, vários ADCs, I²C, SPI e UART—além do rádio.
O fato prático mais importante é a tensão: o ESP32 opera com nível lógico de 3,3 V, não os 5 V do Uno. Seus pinos não toleram 5 V. A saída de 5 V de um sensor—como o pino Echo de um HC-SR04—precisa ser reduzida a 3,3 V antes de tocar em um pino do ESP32, ou você pode danificá-lo. Essa única diferença confunde quase todo mundo que migra de um Uno.
Quando usar
Use um ESP32 quando o robô precisar ser sem fio—controle remoto, telemetria, painel no navegador—ou quando precisar de processamento que uma placa de 8 bits não consegue oferecer, como tratar mais sensores ou executar lógica leve no dispositivo. A variante ESP32-CAM acrescenta uma câmera e permite projetos simples de visão.
Fique com um Arduino Uno quando estiver aprendendo os fundamentos, quando a tolerância a 5 V tornar a ligação mais segura ou quando o projeto for simples e sem conexão— dirigir alguns motores ao longo de uma linha não precisa de Wi-Fi.
Conexões e armadilhas
- Opera a 3,3 V e não tolera 5 V. Faça a conversão de nível de qualquer sinal de 5 V antes que ele chegue a um GPIO. Essa é a causa mais comum de danos causados por iniciantes.
- Wi-Fi mais motores pode causar queda de tensão na placa. O rádio consome picos de corrente agudos; compartilhar uma fonte fraca com os motores provoca reinícios. Alimente os motores separadamente por um driver de motor e forneça ao ESP32 uma trilha estável de 3,3 V.
- Nem todo pino está livre. Vários GPIOs são apenas de entrada, estão ligados ao comportamento de inicialização ou conectados à flash interna. Verifique a pinagem antes de atribuir pinos, ou a placa não inicializará.
- Particularidades do ADC. Um dos dois ADCs fica indisponível enquanto o Wi-Fi está ativo, e as leituras são menos lineares que as de um Uno—calibre se precisar de precisão.
Os pinos que você não deve usar
Um ESP32 tem cerca de 34 GPIOs, e isso é enganoso, pois um número significativo deles é inutilizável, utilizável apenas sob condições ou faz a placa deixar de inicializar. Esta tabela é a coisa mais importante a ler antes de conectar qualquer coisa.
| Pinos | Estado | Por quê |
|---|---|---|
| GPIO 6–11 | Nunca use | Conectados à SPI flash interna. Usá-los impede a inicialização |
| GPIO 0 | Modo de inicialização | Deve estar em HIGH no reinício, ou a placa entra no modo de gravação |
| GPIO 2 | Modo de inicialização | Deve estar flutuante ou em LOW no reinício |
| GPIO 12 | Modo de inicialização | Deve estar em LOW no reinício — um pull-up aqui impede a inicialização |
| GPIO 15 | Modo de inicialização | HIGH no reinício silencia o log de inicialização |
| GPIO 34–39 | Somente entrada | Sem circuito de saída e sem pull-ups internos |
| GPIO 1, 3 | Serial (TX0/RX0) | Usados pelo programador USB |
Os pinos de uso geral mais seguros em uma placa padrão de 30 pinos são GPIO 4, 5, 13, 14, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32 e 33. Comece por eles e evitará todas as armadilhas acima.
Os pinos de modo de inicialização causam a falha mais confusa, porque a placa funciona perfeitamente até você conectar alguma coisa. Um resistor de pull-up no GPIO 12—totalmente razoável para um botão—faz a placa simplesmente não iniciar, sem erro e sem saída serial.
Os pinos somente de entrada confundem de outra forma: GPIO 34–39 não têm pull-up nem pull-down interno, então um botão conectado a um deles flutua e produz leituras aleatórias. Eles precisam de um resistor externo.
3,3 V e o que isso custa
Os pinos do ESP32 não toleram 5 V, e essa é a causa mais comum de danificá-lo. Qualquer sinal de 5 V precisa de tratamento:
| Situação | Solução |
|---|---|
| Saída de sensor de 5 V → entrada do ESP32 | Divisor de resistência (1 kΩ / 2 kΩ) ou conversor de nível |
| Saída do ESP32 → entrada de dispositivo de 5 V | Normalmente funciona — a maioria da lógica de 5 V lê 3,3 V como HIGH |
| I²C bidirecional entre 5 V e 3,3 V | Um conversor de nível bidirecional adequado (baseado em BSS138) |
| Dispositivo I²C de 5 V com pull-ups próprios de 3,3 V | Muitas vezes funciona diretamente — verifique onde estão os pull-ups |
Vale ter esta assimetria em mente: as saídas normalmente são seguras; as entradas, não. O pino Echo de um HC-SR04 é o caso clássico—ele produz 5 V completos em um pino especificado para 3,6 V de máximo absoluto.
O problema do ADC
O ADC do ESP32 é a parte mais fraca do chip, e fingir o contrário desperdiça horas.
O ADC2 não funciona enquanto o Wi-Fi está ativo. O rádio o utiliza. Qualquer analogRead em um
pino ADC2 retorna valores inválidos ou bloqueia no instante em que o Wi-Fi conecta—e, como um
robô sem fio é justamente a razão para usar um ESP32, isso praticamente elimina o ADC2. Use
somente o ADC1: GPIO 32–39.
A resposta não é linear. O ADC de 12 bits é claramente não linear nas duas extremidades,
e leituras abaixo de aproximadamente 0,1 V e acima de cerca de 3,1 V são comprimidas. O chip contém
dados de calibração de fábrica que as funções esp_adc_cal do ESP-IDF aplicam; o analogRead do
Arduino não os usa por padrão.
| Atenuação | Faixa de entrada utilizável |
|---|---|
ADC_0db |
0–1,1 V |
ADC_2_5db |
0–1,5 V |
ADC_6db |
0–2,2 V |
ADC_11db (padrão) |
0–3,3 V, a menos linear |
Se você precisa de precisão real de um sensor analógico, a resposta prática é um ADC I²C externo, como o ADS1115. Custa poucos dólares e elimina todo o problema.
Alimentando sem quedas de tensão
É aqui que a maioria dos projetos de robô com ESP32 falha, e a causa não é óbvia.
O rádio não consome uma corrente constante—ele a consome em rajadas. Uma rajada de transmissão
pode consumir 500 mA por algumas centenas de microssegundos, contra uma média de 40–80 mA. Uma
fonte que parece correta no multímetro ainda pode cair nesses picos, e o ESP32 responde reiniciando
com a mensagem Brownout detector was triggered.
| Regra | Por quê |
|---|---|
| Forneça pelo menos 500 mA, idealmente 1 A | O pico, não a média, é o que importa |
| Coloque 100 µF ou mais perto do pino de 3,3 V da placa | Carga local para cobrir a rajada |
| Nunca compartilhe uma trilha com motores | O pico de corrente de partida do motor somado à rajada do rádio garante um reinício |
| Use um bom cabo USB | A resistência de um cabo fino transforma uma rajada em queda de tensão |
| Prefira o pino de 5 V ao de 3,3 V | O regulador integrado trata dos transitórios |
Vale deixar este último ponto bem claro: aplique 5 V ao pino VIN/5V e deixe o regulador
da placa gerar 3,3 V. Injetar 3,3 V diretamente contorna o regulador e sua filtragem, que é
justamente o que se quer dele.
Dois núcleos e como usá-los de verdade
O núcleo duplo é a vantagem real do ESP32 para robôs, e a estrutura do Arduino a oculta—seu loop()
é executado no núcleo 1, enquanto a pilha Wi-Fi roda no núcleo 0.
Você pode fixar uma tarefa em um núcleo explicitamente:
void controlLoop(void *param) {
const TickType_t period = pdMS_TO_TICKS(10); // exactly 100 Hz
TickType_t last = xTaskGetTickCount();
for (;;) {
readSensors();
updatePid();
driveMotors();
vTaskDelayUntil(&last, period); // no drift, unlike delay()
}
}
void setup() {
xTaskCreatePinnedToCore(
controlLoop, "control", 4096, nullptr,
2, // priority above the default
nullptr,
1); // core 1 — leave core 0 for Wi-Fi
}
Este é o padrão que torna um ESP32 realmente bom para robôs, e não apenas para projetos conectados:
uma malha de controle com temporização rígida em um núcleo e um servidor HTTP no outro que não
consegue interrompê-la. vTaskDelayUntil é o detalhe importante—diferente de delay(), ele
compensa qualquer tempo que o corpo do laço tenha demorado, portanto o período permanece
exatamente 10 ms.
Solução de problemas
| Sintoma | Causa provável | Solução |
|---|---|---|
Brownout detector was triggered |
A queda de tensão da fonte nas rajadas do rádio | Fonte mais estável, 100 µF localmente, alimente com 5 V, não 3,3 V |
| A placa não inicializa | Algo está puxando GPIO 0, 2 ou 12 | Libere os pinos de modo de inicialização |
analogRead retorna valores inválidos no Wi-Fi |
Está usando um pino ADC2 | Mude para ADC1: GPIO 32–39 |
| Um pino nunca vai para HIGH | GPIO 34–39 são somente de entrada | Use outro pino |
| Botão no GPIO 35 lê aleatoriamente | Sem pull-ups internos em 34–39 | Adicione um resistor externo |
| A gravação falha e exige o botão BOOT | Circuito de reinício automático ausente no clone | Segure BOOT quando a gravação começar ou adicione um capacitor de 10 µF em EN |
| Reinicializações aleatórias sob carga dos motores | Trilha de alimentação compartilhada | Fontes separadas e massa comum |
| Sensor danificado depois da conexão | 5 V em um pino de 3,3 V | Converta o nível—e verifique se o pino ainda funciona |
| O Wi-Fi cai quando os motores funcionam | Interferência do rádio ou queda da fonte | Afaste a antena dos fios dos motores e desacople a alimentação |
ESP32 ou Arduino Uno?
| Uno | ESP32 | |
|---|---|---|
| Velocidade | 16 MHz, 8 bits | Até 240 MHz, dois núcleos de 32 bits |
| SRAM | 2 KB | 520 KB |
| Lógica | 5 V, tolerante | 3,3 V, pouco tolerante |
| Sem fio | Nenhum | Wi-Fi e Bluetooth |
| Armadilhas de pinos | Quase nenhuma | Várias que impedem a inicialização |
| Curva de aprendizado | Tudo funciona na primeira tentativa | Leia a pinagem antes de conectar qualquer coisa |
Ambos usam a mesma linguagem e o mesmo IDE, que é o ponto—a transição custa quase nada em código e bastante em disciplina de ligação.
A recomendação honesta é: aprenda em um Uno, construa em um ESP32. A tolerância a 5 V do Uno e a ausência completa de armadilhas de pinos tornam recuperáveis seus erros iniciais. Depois que souber o que é uma malha de controle e por que as massas precisam ser comuns, o ESP32 oferece quinze vezes a frequência de operação, 260 vezes a memória e um rádio por aproximadamente o mesmo preço.
A variante ESP32-CAM merece ser conhecida separadamente: acrescenta uma câmera e um slot SD por poucos dólares, e é de longe o caminho mais barato para a visão robótica—ao custo de quase não sobrar GPIO livre.
Explore o grafo
Usado nestas montagens
Projetos, caminhos de aprendizagem e simuladores que incluem ESP32.
Comparar
Alternativas
Perguntas
Perguntas frequentes sobre ESP32
O que é o ESP32?
O ESP32 é um microcontrolador de baixo custo com processador de dois núcleos e Wi-Fi e Bluetooth integrados. Pense nele como um Arduino muito mais rápido, capaz de se comunicar sem fio com redes e celulares, razão pela qual ele alimenta a maioria dos projetos de robótica conectada e IoT.
Para que serve um ESP32?
É usado sempre que um projeto precisa de conectividade sem fio ou mais processamento do que uma placa de 8 bits pode oferecer: robôs controlados por Wi-Fi, painéis web, controle remoto por Bluetooth, nós de sensores que reportam à nuvem e projetos com câmera usando a variante ESP32-CAM.
O ESP32 é melhor que o Arduino Uno?
Em termos de especificações, sim—é muito mais rápido, tem mais memória e inclui conectividade que o Uno não possui. Mas o Uno usa 5 V e é mais tolerante a erros de ligação, enquanto o ESP32 usa 3,3 V e é menos tolerante. Para aprender os fundamentos, o Uno é mais amigável; para robôs conectados ou que exigem muito processamento, o ESP32 vence.
Qual é a diferença entre Arduino e ESP32?
Arduino normalmente significa uma placa de 8 bits, 5 V e um único núcleo, sem rádio. O ESP32 é uma placa de 32 bits, 3,3 V e dois núcleos, com Wi-Fi e Bluetooth integrados. A confusão é que ambos são programados no Arduino IDE; portanto, 'Arduino' pode significar tanto a linguagem e as ferramentas quanto as placas clássicas.
O ESP32 usa C ou C++?
O ESP32 é programado em C++ (com bastante C) usando o framework do Arduino ou o ESP-IDF da Espressif. Se você já escreveu programas para Arduino, a linguagem e a estrutura são transferidas diretamente—basicamente ganha Wi-Fi, Bluetooth e mais pinos.
Posso programar o ESP32 com o Arduino IDE?
Sim. Depois de adicionar o pacote de placas ESP32 ao gerenciador de placas do Arduino IDE, você escreve e grava programas exatamente como faria em um Uno, e as bibliotecas existentes funcionam em grande parte. Esta é a maneira mais fácil de começar, antes de mudar para o ESP-IDF e seus recursos avançados.
Leitura complementar