Porque é que o sensor analógico do ESP32 enlouquece quando o Wi-Fi se liga

Se o seu sensor analógico devolve valores sem sentido assim que o Wi-Fi inicia, ligou-o a um pino ADC2. O rádio Wi-Fi do ESP32 monopoliza o ADC2; mudar o sensor para o ADC1 resolve o problema de imediato.
O seu sensor analógico apresenta valores limpos e plausíveis durante os testes pela porta série USB. No instante em que o seu código executa WiFi.begin() e estabelece uma ligação, as leituras oscilam de forma errática, fixam-se em 4095 ou caem diretamente para zero. O sensor não está danificado, não se esqueceu da resistência de pull-up e a sua placa não tem defeito. Simplesmente ligou o seu sensor a um pino do ADC2.
O estrangulamento no silício: ADC1 vs ADC2
O chip de silício do ESP32 padrão contém dois periféricos conversores analógico-digitais (ADC) de 12 bits distintos: o ADC1 e o ADC2. Em conjunto, suportam até 18 pinos de entrada analógica no chip isolado, embora as placas de desenvolvimento apenas disponibilizem um subconjunto destes.
O ADC1 funciona de forma independente. O ADC2, contudo, partilha recursos internos de hardware com o subsistema de rádio Wi-Fi e Bluetooth do ESP32. Quando o controlador de Wi-Fi é ativado — quer esteja à procura de um SSID, a processar negociações DHCP ou a transmitir um pacote de telemetria MQTT —, a pilha de rede exige acesso exclusivo ao ADC2 para calibração de radiofrequência e medições internas de energia.
Se o seu código chamar analogRead() num pino do ADC2 enquanto o controlador Wi-Fi está a funcionar, o controlador interrompe ou bloqueia a leitura. Nos ambientes Arduino Core e MicroPython, isto manifesta-se de duas formas: a função de leitura falha e devolve um valor nulo ou lixo, ou a emissão de RF do rádio injeta ruído elétrico severo diretamente no periférico, fazendo oscilar a conversão entre a saturação (4095) e a massa (0).
Remapeamento de pinos: pinos seguros vs pinos inseguros
A correção não requer qualquer contorno no código: mude o fio de sinal do seu sensor do ADC2 para um pino do ADC1. Os canais do ADC1 são eletricamente independentes da banda base de Wi-Fi e continuam a efetuar conversões de forma fiável, independentemente da atividade de rede.
| Unidade ADC | Números de GPIO | Seguro com Wi-Fi? | Notas para a sala de aula |
|---|---|---|---|
| ADC1 | GPIO 32, 33, 34, 35, 36 (VP), 39 (VN) | Sim | Seguro para qualquer sensor analógico enquanto o Wi-Fi estiver a transmitir. Note-se que os GPIO 34, 35, 36 e 39 são pinos exclusivamente de entrada (sem resistências internas de pull-up/pull-down). |
| ADC2 | GPIO 0, 2, 4, 12, 13, 14, 15, 25, 26, 27 | Não | Inutilizável para amostragem analógica assim que WiFi.begin() é executado. Muitos servem também de pinos de arranque (bootstrapping). |
Os pinos GPIO 36 e 39 surgem frequentemente identificados como VP e VN nas placas comuns ESP32 NodeMCU/DevKit de 30 e 38 pinos. Estes, juntamente com os GPIO 32, 33, 34 e 35, são os seus pinos principais para registo analógico.
Um exemplo prático de pinagem
Considere um projeto escolar comum de IoT: um monitor automatizado de plantas que regista a humidade do solo ou um sensor de luz ambiente. Um aluno liga uma sonda analógica de humidade do solo ao GPIO 4 (Canal 0 do ADC2) por conveniência, por estar junto ao pino de terra (GND). Em testes offline, o monitor série imprime valores consistentes entre 1500 e 2800. Assim que a placa se liga ao ponto de acesso da escola para enviar dados para um painel, as leituras disparam para 4095.
Para resolver o problema:
- Mude o fio de ligação de sinal do GPIO 4 para o GPIO 34 (ou 32, 33, 35).
- Atualize a definição do pino no código:
const int sensorPin = 34;. - Mantenha o GPIO 4 livre para saídas digitais, como o acionamento de um módulo de relé ou um transístor que controla uma bomba submersível de 5V.
Se estiver a conceber estações multissensor para monitorização ambiental, pode explorar hardware curricular estruturado e mapas de pinagem em Sheen IoT.
Fator secundário: quebra na linha de alimentação
Se já mudou o seu sensor para o ADC1 (por exemplo, GPIO 32) e continua a observar pequenos picos erráticos durante a transmissão, está perante um problema de integridade de alimentação e não de bloqueio do ADC. Quando o ESP32 ativa o seu transmissor de rádio, o consumo de corrente aumenta abruptamente de cerca de 50mA para mais de 300–400mA durante alguns milissegundos.
Se a placa for alimentada através de uma porta USB com ruído num carrinho de computadores portáteis antigo da sala de aula, ou através de fios de ligação finos numa placa de ensaio (breadboard), a linha de alimentação de 3,3V sofre uma quebra momentânea. Como as conversões analógicas medem a tensão relativamente à linha de alimentação (a tensão de referência), uma quebra na linha faz com que as tensões analógicas externas pareçam subir. A colocação de um condensador eletrolítico de 100µF entre as linhas 3V3 e GND na sua placa de ensaio atenua completamente estes picos transitórios do rádio.



