Componente · Controller

ESP32

ESP32 è un microcontrollore veloce a doppio nucleo con Wi-Fi e Bluetooth integrati: un Arduino per comunicare senza fili. Scopri cosa fa e quando sceglierlo.

Che cos’è

ESP32 è un microcontrollore che sembra un Arduino con una radio montata e i freni rimossi. Ha un processore a 32 bit e doppio nucleo che funziona molte volte più veloce di Uno, molta più memoria e, la caratteristica principale, Wi-Fi e Bluetooth integrati. Questa combinazione è il motivo per cui domina la robotica hobbistica e l’IoT: un robot può ospitare una pagina web per controllarsi, inviare i dati dei sensori al telefono o ricevere comandi via Bluetooth, tutto da un solo chip economico.

Fondamentalmente, lo programmi con lo stesso Arduino IDE e lo stesso linguaggio che potresti già conoscere. Ciò che hai imparato su Uno si trasferisce direttamente; guadagni semplicemente connettività e spazio.

Schema etichettato di una scheda di sviluppo ESP32: il modulo ESP32-WROOM con la sua antenna PCB per Wi-Fi e Bluetooth, una porta USB per alimentazione e programmazione, i pulsanti EN e BOOT e due file di pin GPIO, comprese alimentazione, ADC, PWM e TX/RX.
La scheda di sviluppo ESP32: il modulo WROOM con la sua antenna Wi-Fi/Bluetooth, USB per alimentazione e programmazione e connettori GPIO lungo entrambi i bordi lunghi. Scarica SVG

Come funziona

Al centro ci sono due nuclei CPU Xtensa operanti fino a 240 MHz. Avere due nuclei è importante per i robot: un nucleo può eseguire il ciclo di controllo con temporizzazioni stabili mentre l’altro gestisce il Wi-Fi, così la rete non blocca mai le ruote. Intorno alla CPU ci sono le consuete periferiche del microcontrollore: GPIO, canali PWM, più ADC, I²C, SPI, UART, oltre alla radio.

Il fatto pratico più importante è la tensione: ESP32 funziona con logica a 3.3 V, non con i 5 V di Uno. I suoi pin non tollerano i 5 V. L’uscita a 5 V di un sensore, come il pin Echo di un HC-SR04, deve essere ridotta a 3.3 V prima di raggiungere un pin ESP32, altrimenti rischi di danneggiarlo. Questa differenza mette in difficoltà quasi chiunque passi da Uno.

Quando usarlo

Scegli ESP32 quando il tuo robot deve essere senza fili: comando remoto, telemetria, pannello di controllo nel browser, oppure quando ha bisogno di elaborazione che una scheda a 8 bit non riesce a gestire, come elaborare più sensori o eseguire logica leggera sul dispositivo. La variante ESP32-CAM aggiunge una fotocamera e apre la strada a semplici progetti di visione.

Resta con un Arduino Uno quando stai imparando le basi, quando la tolleranza a 5 V rende il cablaggio più sicuro o quando il progetto è semplice e senza connessione: far girare un paio di motori lungo una linea non ha bisogno del Wi-Fi.

Cablaggio e trappole

  • È a 3.3 V e non tollera i 5 V. Trasla il livello di qualsiasi segnale a 5 V prima che raggiunga un GPIO. È il modo più comune in cui i principianti danneggiano un ESP32.
  • Wi-Fi più motori possono far andare in brownout la scheda. La radio assorbe picchi netti di corrente; condividere un’alimentazione debole con i motori provoca reset. Alimenta i motori separatamente tramite un driver del motore e fornisci a ESP32 una linea 3.3 V stabile.
  • Non tutti i pin sono liberi. Diversi GPIO sono solo ingresso, collegati al comportamento di avvio o alla flash interna. Controlla la piedinatura prima di assegnare i pin, altrimenti la scheda non si avvia.
  • Stranezze dell’ADC. Uno dei due ADC non è disponibile mentre il Wi-Fi è attivo e le letture sono meno lineari di quelle di Uno: calibra se ti serve precisione.

I pin che non devi usare

ESP32 ha circa 34 GPIO e questo dato è davvero ingannevole, perché un numero significativo di essi è inutilizzabile, utilizzabile solo a determinate condizioni o impedisce l’avvio della scheda. Questa tabella è l’unica cosa che vale la pena leggere prima di cablare qualcosa.

Pin Stato Perché
GPIO 6–11 Non usare mai Collegati alla flash SPI interna. Usarli blocca l’avvio
GPIO 0 Modalità di avvio Deve essere HIGH al reset, altrimenti la scheda entra in modalità flash
GPIO 2 Modalità di avvio Deve essere flottante o LOW al reset
GPIO 12 Modalità di avvio Deve essere LOW al reset: una resistenza di pull-up qui impedisce l’avvio
GPIO 15 Modalità di avvio HIGH al reset silenzia il log di avvio
GPIO 34–39 Solo ingresso Nessun driver di uscita e nessuna resistenza di pull-up interna
GPIO 1, 3 Seriale (TX0/RX0) Usati dal programmatore USB

I pin più sicuri a uso generale su una scheda di sviluppo standard a 30 pin sono GPIO 4, 5, 13, 14, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33. Inizia da questi ed eviterai tutte le trappole precedenti.

I pin della modalità di avvio causano il guasto più confuso, perché la scheda funziona perfettamente finché non colleghi qualcosa. Una resistenza di pull-up su GPIO 12, del tutto ragionevole per un pulsante, significa che la scheda semplicemente non si avvia, senza errori e senza uscita seriale.

I pin solo ingresso colpiscono in modo diverso: GPIO 34–39 non hanno né resistenza di pull-up né di pull-down interna, quindi un pulsante su uno di essi è flottante e legge valori casuali. Richiedono una resistenza esterna.

3.3 V e ciò che comporta

I pin di ESP32 non tollerano i 5 V ed è il modo più comune in cui le persone danneggiano il chip. Qualsiasi segnale a 5 V richiede gestione:

Situazione Soluzione
Uscita sensore 5 V → ingresso ESP32 Divisore resistivo (1 kΩ / 2 kΩ) o un traslatore di livello
Uscita ESP32 → ingresso dispositivo 5 V Di solito va bene: la maggior parte della logica a 5 V legge 3.3 V come HIGH
I²C bidirezionale tra 5 V e 3.3 V Un traslatore di livello bidirezionale adeguato (basato su BSS138)
Dispositivo I²C a 5 V con propri pull-up a 3.3 V Spesso funziona direttamente: controlla dove vanno i pull-up

L’asimmetria vale la pena interiorizzare: le uscite sono di solito sicure, gli ingressi di solito no. Il pin Echo di un HC-SR04 è il caso classico: immette 5 V pieni su un pin la cui tensione massima assoluta è 3.6 V.

Il problema dell’ADC

L’ADC di ESP32 è la parte più debole del chip e fingere il contrario spreca ore.

ADC2 non funziona mentre il Wi-Fi è attivo. Lo usa la radio. Qualsiasi analogRead su un pin ADC2 restituisce spazzatura o si blocca appena il Wi-Fi si connette e, poiché un robot senza fili è l’intero motivo per cui usi ESP32, questo esclude quasi completamente ADC2. Usa solo ADC1: GPIO 32–39.

La risposta non è lineare. L’ADC a 12 bit è notevolmente non lineare a entrambe le estremità e le letture sotto circa 0.1 V e sopra circa 3.1 V sono compresse. Il chip contiene dati di calibrazione di fabbrica che le funzioni esp_adc_cal dell’ESP-IDF applicano per te; analogRead di Arduino non li usa per impostazione predefinita.

Attenuazione Intervallo di ingresso utilizzabile
ADC_0db 0–1.1 V
ADC_2_5db 0–1.5 V
ADC_6db 0–2.2 V
ADC_11db (predefinita) 0–3.3 V, meno lineare

Se ti serve una precisione reale da un sensore analogico, la risposta pragmatica è un ADC I²C esterno come ADS1115. Costa pochi dollari ed elimina completamente il problema.

Alimentarlo senza brownout

È qui che falliscono più spesso i progetti robotici ESP32 e la causa non è ovvia.

La radio non assorbe una corrente costante: la assorbe a raffiche. Una raffica di trasmissione può essere di 500 mA per qualche centinaio di microsecondi, contro una media di 40–80 mA. Un’alimentazione che misura bene con un multimetro può comunque crollare su quei picchi e ESP32 risponde resetandosi con il messaggio Brownout detector was triggered.

Regola Perché
Almeno 500 mA, idealmente 1 A Conta il picco, non la media
Metti 100 µF o più vicino al pin 3.3 V della scheda Carica locale per coprire la raffica
Non condividere mai una linea con i motori Spunto del motore più raffica della radio garantiscono un reset
Usa un buon cavo USB La resistenza di un cavo sottile trasforma una raffica in brownout
Preferisci il pin 5 V al pin 3.3 V Il regolatore integrato gestisce le transizioni

L’ultimo punto merita di essere detto chiaramente: fornisci 5 V al pin VIN/5V e lascia che il regolatore della scheda produca 3.3 V. Iniettare direttamente 3.3 V bypassa il regolatore e il suo filtraggio, che è proprio ciò per cui serve.

Due nuclei e come usarli davvero

Il doppio nucleo è il vero vantaggio di ESP32 per i robot e il framework Arduino lo nasconde: il tuo loop() viene eseguito sul nucleo 1, mentre lo stack Wi-Fi viene eseguito sul nucleo 0.

Puoi assegnare esplicitamente un’attività a un nucleo:

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
}

Questo è il modello che rende ESP32 davvero adatto ai robot, non solo connesso: un ciclo di controllo con temporizzazioni rigide su un nucleo e un server web sull’altro che non può bloccarlo. vTaskDelayUntil è il dettaglio importante: a differenza di delay(), compensa il tempo impiegato dal corpo del ciclo, così il periodo resta esattamente 10 ms.

Risoluzione dei problemi

Sintomo Causa probabile Soluzione
Brownout detector was triggered L’alimentazione crolla durante le raffiche della radio Alimentazione più rigida, 100 µF locali, fornisci 5 V non 3.3 V
La scheda non si avvia affatto Qualcosa tira GPIO 0, 2 o 12 Libera i pin della modalità di avvio
analogRead restituisce spazzatura con il Wi-Fi Stai usando un pin ADC2 Passa ad ADC1: GPIO 32–39
Un pin non sale mai GPIO 34–39 sono solo ingressi Usa un pin diverso
Il pulsante su GPIO 35 legge valori casuali Nessun pull-up interno su 34–39 Aggiungi una resistenza esterna
Caricamento non riuscito, serve il pulsante BOOT Manca il circuito di autoreset sul clone Tieni premuto BOOT mentre inizia il caricamento, oppure aggiungi un condensatore da 10 µF su EN
Reset casuali sotto carico dei motori Linea di alimentazione condivisa Alimentazioni separate, massa comune
Sensore danneggiato dopo il cablaggio 5 V su un pin a 3.3 V Trasla il livello e controlla che il pin funzioni ancora
Il Wi-Fi cade quando i motori girano Interferenza della radio o crollo dell’alimentazione Allontana l’antenna dai cavi dei motori; disaccoppia l’alimentazione

ESP32 o Arduino Uno?

Uno ESP32
Velocità 16 MHz, 8 bit Fino a 240 MHz, 32 bit a doppio nucleo
SRAM 2 KB 520 KB
Logica 5 V, tollerante 3.3 V, intransigente
Wireless Nessuno Wi-Fi e Bluetooth
Trappole dei pin Quasi nessuna Diverse che impediscono l’avvio della scheda
Curva di apprendimento Tutto funziona al primo tentativo Leggi la piedinatura prima di cablare

Entrambe usano lo stesso linguaggio e lo stesso IDE, ed è questo il punto: il passaggio ti costa quasi niente in codice e parecchio in disciplina di cablaggio.

La raccomandazione onesta è: impara su Uno, costruisci con ESP32. La tolleranza a 5 V di Uno e l’assenza completa di trappole nei pin rendono recuperabili i tuoi primi errori. Quando sai che cos’è un ciclo di controllo e perché le masse devono essere comuni, ESP32 offre quindici volte la velocità di clock, 260 volte la memoria e una radio, per circa la stessa somma.

La variante ESP32-CAM merita una considerazione separata: aggiunge una fotocamera e uno slot SD per pochi dollari ed è di gran lunga la rotta più economica verso la visione robotica, al costo di non avere quasi più GPIO liberi.

Esplora il grafo

Usato in queste costruzioni

Progetti, percorsi di apprendimento e simulatori che includono ESP32.

Confronto

Alternative

Domande

FAQ su ESP32

Che cos'è ESP32?

ESP32 è un microcontrollore a basso costo con processore a doppio nucleo e Wi-Fi e Bluetooth integrati. Pensa a un Arduino molto più veloce, in grado di comunicare senza fili con reti e telefoni: è per questo che alimenta la maggior parte dei progetti robotici e IoT connessi.

A cosa si usa ESP32?

Si usa ogni volta che un progetto ha bisogno di connettività wireless o di più elaborazione di quanta possa offrire una scheda a 8 bit: robot controllati via Wi-Fi, pannelli di controllo nel browser, comando remoto Bluetooth, nodi sensoriali che trasmettono al cloud e progetti con fotocamera che usano la variante ESP32-CAM.

ESP32 è migliore di Arduino Uno?

Sulle specifiche grezze sì: è molto più veloce, ha più memoria e include la connettività wireless che manca a Uno. Però Uno è a 5 V e più tollerante agli errori di cablaggio, mentre ESP32 è a 3.3 V e meno tollerante. Per imparare le basi Uno è più gentile; per robot connessi o impegnativi dal punto di vista computazionale vince ESP32.

Qual è la differenza fra Arduino ed ESP32?

Arduino di solito indica una scheda a 8 bit, 5 V, mono-nucleo e senza radio. ESP32 è una scheda a 32 bit, 3.3 V, a doppio nucleo con Wi-Fi e Bluetooth integrati. Confusamente, programmi entrambe con Arduino IDE, quindi «Arduino» può indicare anche il linguaggio e gli strumenti, oltre alle schede classiche.

ESP32 usa C o C++?

ESP32 viene programmato in C++ (con molto C) usando il framework Arduino o l'ESP-IDF di Espressif. Se hai scritto sketch Arduino, linguaggio e struttura passano direttamente: guadagni soprattutto Wi-Fi, Bluetooth e più pin da usare.

Si può programmare ESP32 con Arduino IDE?

Sì. Dopo aver aggiunto il pacchetto della scheda ESP32 al gestore schede di Arduino IDE, scrivi e carichi sketch esattamente come faresti per Uno, e le librerie esistenti funzionano in gran parte. È il modo più semplice per iniziare, prima di passare a ESP-IDF per funzionalità avanzate.

Per approfondire

Fonti