immagine copertina del post

Le principali caratteristiche tecniche

L'ESP32 è un System on Chip (SoC) sviluppato da Espressif Systems. È un chip a basso costo e ad alte prestazioni che offre una varietà di funzionalità, tra cui:

  • Processore dual core Tensilica Xtensa LX6 a 32 bit con clock fino a 240 MHz
  • Wi-Fi 802.11 b/g/n (2.4 GHz, velocità teorica fino a 150 Mbps)
  • Bluetooth 4.2 + Bluetooth Low Energy (BLE)
  • Fino a 34 piedini GPIO (il numero effettivamente disponibili dipende dal modulo utilizzato)
  • Supporto per sensori e periferiche digitali e analogiche

Per quanto riguarda gli utilizzi possibili, l'ESP32 è una piattaforma che può essere impiegata in numerose applicazioni, tra cui:

MISSION CRITICAL

Sentinel Node V3.5

Il Notaio Digitale che rende obsoleta la SD-Card

STORAGE FRAM

Zero latenza, scritture infinite. Il dato è blindato anche se salta la corrente.

HARDWARE WATCHDOG

Ripristino fisico esterno. Se il firmware si pianta, il sistema reagisce.

RTC DEDICATO

Time-stamping deterministico. Indipendente dai server NTP esterni.

SURGE PROTECTION

Diodi P6KE15A e Schottky. Sopravvive ai picchi industriali (14.89V testati).

La storia dell'ESP32

L'ESP32 ha conquistato rapidamente una larga fetta del mercato IoT. Nel 2024, grazie alle sue spiccate doti di connettività Wi-Fi e Bluetooth, è diventato un punto fermo della comunità dei maker. Diamo uno sguardo alla sua breve storia.

La casa madre: Espressif

L'ESP32 è prodotto da Espressif Systems, azienda di microelettronica con sede in Cina fondata nel 2008. Il suo primo prodotto, un SoC Wi-Fi a 2,4 GHz, è stato introdotto nel 2013 con il nome ESP8089, destinato a tablet e set-top box.

Nel 2014 viene rilasciato ESP8266, che porta la connettività Wi-Fi a basso costo nel mondo maker e industriale, aprendo la strada all’ESP32 (presentato nel 2016).

La missione di Espressif si concentra sulle soluzioni per l’Internet of Things (IoT) e l’AIoT (Artificial Intelligence of Things), combinando potenza di calcolo e connettività wireless a basso consumo.

I "motori" della Espressif

L'ESP8266 era basato su un processore RISC Tensilica Xtensa L106 a 32 bit, architettura sviluppata da Cadence (San Jose, California). Questa architettura è stata progettata per offrire buone prestazioni per watt, caratteristica fondamentale nei dispositivi alimentati a batteria.

I primi successi commerciali

Nel 2014 Hackaday annunciò l’introduzione di un modulo Wi-Fi da $5 venduto tramite Seeed Studio: l’ESP-01, prodotto da Ai-Thinker.

L’ESP-01 era basato su ESP8266 (non su ESP32) ed era limitato a soli otto pin, due dei quali utilizzati per la UART. Nonostante ciò, risultò immediatamente interessante grazie al supporto della piattaforma Arduino e alla possibilità di connettersi a Internet senza hardware aggiuntivo.

Il costo dell'ESP32

I moduli basati su ESP8266 e successivamente ESP32 richiedono un numero minimo di componenti esterni: alimentazione a 3,3 V stabilizzata, pochi condensatori di bypass, antenna e memoria flash esterna (SPI/QSPI).

All'accensione, il firmware viene caricato dalla memoria flash esterna nella SRAM interna per l’esecuzione.

Questa semplicità progettuale ha permesso la nascita di microcontrollori "stile Arduino" con connettività Wi-Fi integrata a costi estremamente contenuti.

Nel 2015 Espressif ha rilasciato l’SDK ufficiale, disponibile in versione bare-metal e con supporto FreeRTOS, offrendo agli sviluppatori pieno controllo dello stack Wi-Fi.

Gli sviluppi recenti

I dispositivi della serie ESP32 integrano un microprocessore dual-core Tensilica Xtensa LX6 a 32 bit fino a 240 MHz, 520 kB di SRAM interna e Wi-Fi 2.4 GHz 802.11 b/g/n.

La connettività Bluetooth nella versione ESP32 classica è 4.2 + BLE.

Un coprocessore Ultra Low Power (ULP) consente di monitorare alcune periferiche durante la modalità deep sleep, riducendo drasticamente i consumi nei sistemi alimentati a batteria.

MISSION CRITICAL

Sentinel Node V3.5

Il Notaio Digitale che rende obsoleta la SD-Card

STORAGE FRAM

Zero latenza, scritture infinite. Il dato è blindato anche se salta la corrente.

HARDWARE WATCHDOG

Ripristino fisico esterno. Se il firmware si pianta, il sistema reagisce.

RTC DEDICATO

Time-stamping deterministico. Indipendente dai server NTP esterni.

SURGE PROTECTION

Diodi P6KE15A e Schottky. Sopravvive ai picchi industriali (14.89V testati).

Schema a blocchi del Tensilica Xtensa 32-bit LX6

Schema a blocchi del Tensilica Xtensa 32-bit LX6


Le serie successive includono:

  • ESP32-S2: single-core Xtensa LX7 fino a 240 MHz, Wi-Fi (nessun Bluetooth)
  • ESP32-S3: dual-core Xtensa LX7, Wi-Fi + Bluetooth 5 (BLE)

Le versioni più recenti includono periferiche aggiuntive come l’interfaccia TWAI (compatibile con ISO 11898-1, noto come CAN bus) e acceleratori hardware per crittografia (Flash Encryption, HMAC, AES, SHA).

Il software della piattaforma ESP32

Nel 2024 è disponibile un ecosistema software estremamente maturo per ESP32. Gli sviluppatori possono scegliere tra l’ambiente ufficiale ESP-IDF (basato su FreeRTOS) oppure il framework Arduino-ESP32.

Per chi utilizza Arduino, è possibile integrare il supporto ESP32 aggiungendo l’URL del pacchetto "Arduino-ESP32" nelle Preferenze dell’IDE e selezionando la scheda desiderata dal Board Manager. Una volta installato il pacchetto, saranno disponibili esempi e librerie dedicate.


Parliamo del modulo Wi-Fi

L'ESP32 integra un modulo Wi-Fi compatibile con 802.11 b/g/n nella banda 2.4 GHz. La velocità teorica massima è 150 Mbps (802.11n 1x1, 40 MHz), mentre il throughput reale tipico è compreso tra 30 e 70 Mbps, a seconda delle condizioni di rete.

Non supporta reti a 5 GHz.

Bluetooth

L'ESP32 (versione classica con core Xtensa LX6) integra Bluetooth 4.2 + Bluetooth Low Energy (BLE).

Le versioni successive includono:

  • ESP32-S2: Wi-Fi, nessun Bluetooth
  • ESP32-S3: Wi-Fi + Bluetooth 5 (BLE)
  • ESP32-C3: Wi-Fi + BLE 5 (architettura RISC-V)
Il Bluetooth Low Energy è ideale per applicazioni a basso consumo come sensori wireless, beacon e dispositivi indossabili.

L'utilizzo dell'ESP32

L'ESP32 dispone di fino a 34 GPIO (alcuni solo input, come GPIO 34–39). Il numero effettivamente disponibile dipende dal modulo utilizzato (es. WROOM, PICO, ecc.).

Supporta un'ampia gamma di periferiche hardware:

  • ADC a 12 bit
  • PWM
  • SPI, I2C, UART
  • I2S
  • TWAI (compatibile CAN)

Grazie alla doppia CPU e alla connettività integrata, è adatto a:

  • Gateway IoT
  • Automazione industriale leggera
  • Dispositivi wearable
  • Sistemi embedded con connettività cloud

La differenza tra ESP32 e ESP8266

  1. ESP32 è dual-core (ESP8266 è single-core)
  2. Maggiore potenza di calcolo (fino a 240 MHz vs 80/160 MHz)
  3. Più GPIO e periferiche hardware
  4. Supporto Bluetooth (assente su ESP8266)
  5. Miglior gestione del multitasking grazie a FreeRTOS

Lo schema interno dell'ESP32

Di seguito è riportato lo schema a blocchi del SoC ESP32.

esp32 diagramma a blocchi

Diagramma a blocchi dell'ESP32


Connettività wireless

L’ESP32 supporta Wi-Fi 802.11 b/g/n a 2.4 GHz e Bluetooth 4.2 + BLE (nella versione classica). Le comunicazioni radio sono gestite da un sottosistema dedicato integrato nel SoC.


Core

Il processore principale è un Tensilica Xtensa LX6 dual-core a 32 bit con frequenza configurabile fino a 240 MHz.

  • PRO_CPU: gestisce principalmente lo stack di sistema (Wi-Fi, Bluetooth, RTOS)
  • APP_CPU: esegue il codice applicativo

Entrambi i core condividono l’accesso alla memoria interna, ai registri e alle periferiche mappate nello spazio di indirizzamento a 32 bit.

Schema a blocchi del chip Tensilica Xtensa 32-bit LX6.

Schema a blocchi del chip Tensilica Xtensa LX6


L’architettura è di tipo RISC a 32 bit. Tutte le periferiche, ROM, SRAM interna, cache e memoria flash esterna sono mappate nello spazio di indirizzamento del processore.

Mappatura dei chip RISC Tensilica Xtensa LX6 e LX7

Mappatura delle unità di memoria


L’ESP32 integra inoltre un coprocessore ULP (Ultra Low Power) che può operare in modalità deep sleep per monitorare ingressi analogici o digitali con consumi estremamente ridotti.


Un breve confronto con Arduino UNO

  • Frequenza fino a 240 MHz (Arduino UNO: 16 MHz)
  • Architettura 32 bit vs 8 bit
  • Maggiore capacità di calcolo in virgola mobile
  • Connettività Wi-Fi e Bluetooth integrata

Questo si traduce in maggiore potenza elaborativa e possibilità di eseguire stack di rete complessi direttamente sul microcontrollore.


La memoria dell'ESP32

A differenza delle classiche schede Arduino, l’ESP32 utilizza un’architettura con memoria interna ed esterna.

Memorie interne:

  • ROM (~448 KiB): memoria di sola lettura contenente bootloader e funzioni di sistema
  • SRAM interna (520 KiB)
  • RTC SRAM (16 KiB) per modalità deep sleep
  • eFuse (1 Kb) per configurazioni permanenti (chiavi, MAC address, ecc.)

La memoria flash per il firmware è generalmente esterna (SPI/QSPI), tipicamente da 4 MB nei moduli WROOM.

Alcuni modelli integrano flash embedded (es. ESP32-PICO-D4).

Espansione di memoria

Acceleratori hardware di crittografia

Uno dei fattori più importanti in qualsiasi sistema connesso è la sicurezza. Per questo l’ESP32 integra acceleratori hardware dedicati ad alcune funzioni crittografiche, utili per aumentare prestazioni e ridurre il carico sulla CPU:

  1. AES (crittografia simmetrica)
  2. SHA (funzioni hash)
  3. RSA (crittografia asimmetrica)
  4. ECC (crittografia a curva ellittica)

Questi moduli hardware rendono più rapide e affidabili operazioni come cifratura, verifica di integrità e autenticazione (es. TLS, firmware signing, secure boot), migliorando la robustezza complessiva del sistema contro attacchi e manomissioni.

La scheda di sviluppo DevKitC

L’ESP32 è un SoC molto adottato anche in ambito industriale, ma per essere usato facilmente da hobbisti e sviluppatori si utilizza spesso una scheda di sviluppo (es. DevKitC) che integra alimentazione, conversione USB-seriale e pin header.

La scheda di sviluppo completa di alimentatore e interfaccia seriale UART con microUSB

Su molte DevKitC l’alimentazione a 3,3V è ottenuta tramite un regolatore lineare (spesso un AMS1117 o equivalente). Nota: il regolatore può scaldare se alimenti carichi elevati; per applicazioni stabili è consigliabile una sorgente 5V/USB di qualità o un convertitore step-down dedicato.


La piedinatura del modulo ESP32-WROOM

La piedinatura dell'ESP32

Piedinatura del modulo ESP32-WROOM

Come si vede nel diagramma, i pin sono raggruppati per funzione. Molti GPIO sono multiplexati: lo stesso pin può svolgere più ruoli (GPIO, periferiche seriali, PWM, ADC, ecc.). Verifica sempre datasheet e pinout del modulo specifico prima di collegare periferiche.

I pin digitali

L’ESP32 dispone di fino a 34 GPIO sul chip, ma non tutti sono sempre disponibili sul modulo e alcuni (GPIO 34–39) sono solo input. Il numero effettivo di pin utilizzabili dipende dalla scheda/modulo (es. ESP32-WROOM-32) e dall’uso di flash/PSRAM e funzioni di boot.

La maggior parte dei GPIO supporta pull-up e pull-down interni configurabili via software. Questo semplifica il collegamento di pulsanti, tastiere a matrice e segnali digitali, riducendo componenti esterni (dove appropriato).

Corrente sui GPIO: per un uso affidabile è consigliabile restare su correnti basse (tipicamente ~12 mA). Valori più alti sono possibili, ma 40 mA è un limite assoluto e non un valore operativo “consigliato”. Per pilotare carichi (relay, strisce LED, motori) usa driver, MOSFET o moduli dedicati.

Come settare i pin digitali in "OUTPUT"

È possibile utilizzare i GPIO in OUTPUT per controllare dispositivi a basso assorbimento (es. LED) o pilotare carichi più grandi tramite componenti esterni (relay, MOSFET, driver). Nell’esempio classico di un LED, usa una resistenza in serie (ad es. 220–330 Ω):


pinMode(GPIO_pin, OUTPUT);

Puoi impostare il pin a HIGH o LOW per cambiarne lo stato. HIGH e 1 sono equivalenti; LOW e 0 sono equivalenti:


digitalWrite(GPIO_pin, HIGH); // Accendi il LED
digitalWrite(GPIO_pin, LOW);  // Spegni il LED

Come settare i pin digitali in "INPUT"

I pin dell’ESP32 possono essere usati in INPUT per leggere segnali digitali esterni (pulsanti, sensori digitali, finecorsa, ecc.).


pinMode(GPIO_pin, INPUT);
BTN_State = digitalRead(GPIO_pin);

Dal punto di vista elettrico, un ingresso non deve restare “fluttuante”: è necessario definire lo stato logico con una resistenza di pull-up o pull-down.

Lasciare un ingresso digitale fluttuante è una pratica scorretta: l’ESP32 può leggere rumore elettrico e alternare 0/1 in modo casuale. La soluzione tipica è usare una resistenza di pull-up verso 3,3V (es. 10 kΩ) o attivare il pull-up interno tramite software.

Esempio con pull-up interno (consigliato per pulsanti semplici):


pinMode(GPIO_pin, INPUT_PULLUP);
Pull-up interni: nota importante

Su ESP32, i pull-up/pull-down sono in genere configurabili via software su molti GPIO (eccetto alcuni pin speciali e alcuni input-only). Per progetti robusti, verifica sempre eventuali restrizioni del pin scelto (boot strap, funzioni di flash, input-only).

I pin analogici

Alcuni pin possono essere usati come ingressi analogici tramite ADC. L’ESP32 dispone di ADC a 12 bit: i valori letti vanno da 0 a 4095.

Questi i pin di ingresso analogico:
  • ADC1_CH0 (GPIO 36)
  • ADC1_CH1 (GPIO 37)
  • ADC1_CH2 (GPIO 38)
  • ADC1_CH3 (GPIO 39)
  • ADC1_CH4 (GPIO 32)
  • ADC1_CH5 (GPIO 33)
  • ADC1_CH6 (GPIO 34)
  • ADC1_CH7 (GPIO 35)
  • ADC2_CH0 (GPIO 4)
  • ADC2_CH1 (GPIO 0)
  • ADC2_CH2 (GPIO 2)
  • ADC2_CH3 (GPIO 15)
  • ADC2_CH4 (GPIO 13)
  • ADC2_CH5 (GPIO 12)
  • ADC2_CH6 (GPIO 14)
  • ADC2_CH7 (GPIO 27)
  • ADC2_CH8 (GPIO 25)
  • ADC2_CH9 (GPIO 26)

Il successo commerciale dell'ESP32

Con una tale combinazione di connettività e potenza di calcolo, è facile capire perché l’ESP32 abbia scalato rapidamente il mercato IoT, diventando uno standard de facto per prototipazione e molti prodotti embedded.

Pur essendo percepito spesso come alternativa ad Arduino, l’ESP32 beneficia dell’intero ecosistema di tool, librerie e community, riducendo drasticamente la curva di apprendimento.

Gli appassionati e i professionisti possono ottenere prestazioni superiori e connettività integrata senza dover cambiare radicalmente strumenti e workflow di sviluppo.

Ultimi arrivi della famiglia ESP32

Il microcontroller ESP32-P4 promette di migliorare ulteriormente le prestazioni. Integra una CPU RISC-V dual-core fino a 400 MHz e 768 KB di SRAM on-chip e punta a semplificare l’interfacciamento con fotocamere ad alta risoluzione via MIPI-CSI.

Nota: l’ESP32-P4 è orientato ad applicazioni ad alte prestazioni e, a seconda della variante, può richiedere chip companion per la connettività wireless (Wi-Fi/Bluetooth).


MISSION CRITICAL

Sentinel Node V3.5

Il Notaio Digitale che rende obsoleta la SD-Card

STORAGE FRAM

Zero latenza, scritture infinite. Il dato è blindato anche se salta la corrente.

HARDWARE WATCHDOG

Ripristino fisico esterno. Se il firmware si pianta, il sistema reagisce.

RTC DEDICATO

Time-stamping deterministico. Indipendente dai server NTP esterni.

SURGE PROTECTION

Diodi P6KE15A e Schottky. Sopravvive ai picchi industriali (14.89V testati).