Logo sheen.bot

← Approfondimenti

Perché il sensore analogico dell'ESP32 impazzisce quando il Wi-Fi si connette

15 ott 2026·Sheen Robotics
Perché il sensore analogico dell'ESP32 impazzisce quando il Wi-Fi si connette

Se il sensore analogico restituisce valori senza senso non appena si avvia il Wi-Fi, significa che è collegato a un pin ADC2. La radio Wi-Fi dell'ESP32 monopolizza l'ADC2; spostare il sensore sull'ADC1 risolve subito il problema.

Durante i test sulla porta seriale USB, il sensore analogico restituisce valori puliti e plausibili. Ma non appena il codice esegue WiFi.begin() e stabilisce una connessione, le letture iniziano a oscillare in modo irregolare, restano bloccate su 4095 oppure crollano direttamente a zero. Il sensore non è danneggiato, non manca alcuna resistenza di pull-up e la scheda non è difettosa. Semplicemente, il sensore è stato collegato a un pin ADC2.

Il collo di bottiglia a livello di silicio: ADC1 contro ADC2

Il silicio dell'ESP32 standard integra due convertitori analogico-digitali a 12 bit distinti: ADC1 e ADC2. Insieme gestiscono fino a 18 pin di ingresso analogico sul chip nudo, anche se le schede di sviluppo ne mettono a disposizione solo un sottoinsieme.

L'ADC1 opera in modo indipendente. L'ADC2, invece, condivide risorse hardware interne con il sottosistema radio Wi-Fi e Bluetooth dell'ESP32. Quando il driver Wi-Fi si attiva — che stia cercando un SSID, gestendo l'handshake DHCP o trasmettendo un pacchetto di telemetria MQTT — lo stack di rete richiede l'accesso esclusivo all'ADC2 per la calibrazione delle radiofrequenze e le misurazioni interne di potenza.

Se il codice chiama analogRead() su un pin ADC2 mentre il driver Wi-Fi è in esecuzione, quest'ultimo interrompe o blocca la lettura. Negli ambienti Arduino Core e MicroPython, questo comportamento si manifesta in due modi: la funzione di lettura fallisce restituendo un valore nullo o privo di senso, oppure i burst RF della radio iniettano un forte rumore elettrico direttamente nella periferica, facendo oscillare la conversione tra la saturazione (4095) e la massa (0).

La rimappatura dei pin: pin sicuri e pin non sicuri

La soluzione non richiede alcun espediente a livello di codice: basta spostare il cavo di segnale del sensore dall'ADC2 a un pin dell'ADC1. I canali dell'ADC1 sono elettricamente indipendenti dalla banda base Wi-Fi e continuano a effettuare conversioni affidabili indipendentemente dall'attività di rete.

Unità ADCNumeri GPIOSicuro con il Wi-Fi?Note per la classe
ADC1GPIO 32, 33, 34, 35, 36 (VP), 39 (VN)SìSicuro per qualsiasi sensore analogico durante la trasmissione Wi-Fi. Da notare che i GPIO 34, 35, 36 e 39 sono pin di solo ingresso (privi di resistenze interne di pull-up/pull-down).
ADC2GPIO 0, 2, 4, 12, 13, 14, 15, 25, 26, 27NoInutilizzabile per il campionamento analogico una volta chiamato WiFi.begin(). Molti fungono anche da pin di bootstrap (bootstrapping pins).

Sulle comuni schede ESP32 NodeMCU/DevKit a 30 e 38 pin, i GPIO 36 e 39 sono spesso etichettati come VP e VN. Insieme ai GPIO 32, 33, 34 e 35, sono i pin principali da utilizzare per l'acquisizione analogica.

Un esempio pratico di pinout

Prendiamo un tipico progetto scolastico IoT: un sistema automatizzato per il monitoraggio delle piante che rileva l'umidità del suolo o un sensore di luce ambientale. Uno studente collega una sonda analogica di umidità del suolo al GPIO 4 (ADC2 Canale 0) perché si trova comodamente accanto al pin di massa. Nei test offline, il monitor seriale stampa valori stabili compresi tra 1500 e 2800. Non appena la scheda si connette all'access point della scuola per inviare i dati a una dashboard, le letture schizzano a 4095.

Per risolvere il problema:

  • Spostare il cavetto jumper di segnale dal GPIO 4 al GPIO 34 (o 32, 33, 35).
  • Aggiornare la definizione del pin nel codice: const int sensorPin = 34;.
  • Tenere libero il GPIO 4 per le uscite digitali, come l'attivazione di un modulo relè o di un transistor per il controllo di una pompa sommersa a 5V.

Se state progettando stazioni multi-sensore per il monitoraggio ambientale, potete scoprire l'hardware curricolare strutturato e le mappature dei pin su Sheen IoT.

Fattore secondario: il calo di tensione sulla linea di alimentazione

Se il sensore è stato spostato sull'ADC1 (ad esempio sul GPIO 32) e si continuano a osservare lievi picchi anomali durante la trasmissione, il problema riguarda l'integrità dell'alimentazione e non il blocco dell'ADC. Quando l'ESP32 attiva il trasmettitore radio, il consumo di corrente subisce un brusco picco passando da circa 50mA a oltre 300–400mA per alcuni millisecondi.

Se la scheda è alimentata da una porta USB rumorosa di un vecchio carrello porta-notebook scolastico o tramite cavetti jumper sottili sulla breadboard, la linea di alimentazione a 3,3V subisce un calo momentaneo. Poiché le conversioni analogiche misurano la tensione rispetto alla linea di alimentazione (la tensione di riferimento), un calo su questa linea fa sembrare che le tensioni analogiche esterne saltino verso l'alto. Posizionare un condensatore elettrolitico da 100µF tra le linee 3V3 e GND della breadboard elimina completamente questi picchi transitori dovuti alla radio.

#esp32#iot#elettronica#risoluzione problemi#sensori

Altri post in Approfondimenti