01/01/2024 in News di sergio rame14 minuti
L’ESP32 è una scheda elettronica integrata (SoC) sviluppata da Espressif Systems. È un chip a basso costo e ad alte prestazioni che offre una varietà di funzionalità, tra cui:
Per quanto riguarda gli utilizzi possibili, L’ESP32 è una piattaforma che può essere utilizzata per una varietà di applicazioni, tra cui:
L’ESP32 ha conquistato dall’oggi al domani una larga fetta del mercato IOT. Nel 2024, grazie ale sue spiccate doti di connettività con reti WI-FI e dispositivi Bluetooth, è diventato un punto fermo della comunità dei “maker” Diamo uno sguardo alla sua breve storia.
Il ESP32 è prodotto dalla Espressif, una azienda di microelettronica con sede in Cina fondata appena nel 2008. Il suo primo prodotto, un sistema Wi-Fi “system on chip” (SoC) a 2,4 GHz, è stato introdotto sul mercato nel 2013. Si chiamava ESP8089 ed era destinato all’uso su tablet e applicazioni set-top box. Ma è stato l’ ESP8266, rilasciato nel 2014, che ha portato questa famiglia di prodotti alla attenzione di makers ed aziende.
La “mission” di Espressif si concentra soprattutto sulle soluzioni per L’Intelligenza artificiale delle cose (IoT). Con l’ESP32 è riuscita a conciliare una discreta potenza di elaborazione con la connettività wireless a basso consumo. L’antenato dell’ESP32 e cioè la scheda ESP8266 aveva aperto la strada pochi anni prima mondo IOT creando per la prima volta un dispositivo single-chip facile da usare con tutto il software necessario per comunicare via Wi-Fi.
Parlando della impostazione di base, l’ESP8266 era alimentato da un processore RISC Tensilica Xtensa L106 a 32 bit: questa tipo di architettura piuttosto originale deriva dai progetti della americana Cadence (un fornitore leader di IT con sede in San Jose - California con oltre 10.000 dipendenti).
L’obiettivo dichiarato della azienda, secondo un comunicato stampa del 2007, era raggiungere uno score in Dhrystone MIPS migliore del noto ARM Cortex-M3. Inoltre, proprio per facilitare la connettività del processore hanno cercato il minimo consumo in mW per agevolare i disporitivi alimentati a batteria.
La comunità dei produttori è venuta a conoscenza di questi dispositivi nel 2014, quando Hackaday ha annunciato l’introduzione di un nuovo modulo Wi-Fi da $5 venduto tramite Seeed Studio. Conosciuto come ESP-01, questo modulo è stato costruito dal produttore di terze parti Ai-Thinker, anch’esso con sede in Cina.
Era in sostanza il primo prototipo dell’ESP32 ed era severamente limitato dagli appena otto pin disponibili, due dei quali per giunta utilizzati dalla interfaccia UART. La scheda ESP-01 comunque era facile da integrare con la piattaforma software di Arduino, con la possibilità di connettersi a Internet senza bisogno di schedine aggiuntive. L’unico punto critico: tutta la documentazione è stata scritta in cinese!
La bellezza dei moduli basati sull’ESP8266 era il minimo numero di componenti necessari per costruire una scheda usabile dagli appassionati e da piccole aziende con un modulo Wi-Fi funzionale. Supponendo che fosse disponibile un’alimentazione a 3,3 V, i progetti avevano solo bisogno di poche resistenze e condensatori, un’antenna e un programmatore seriale QSPI esterno. All’accensione, l’ESP8266 estraeva il firmware dal flash e quindi lo copiava nella SRAM interna da dove veniva eseguito.
Fu immediatamente chiaro che si potevano costruire dei microcontroller stile Arduino a bassissimo prezzo. Tecnicamente il processore presentava ingressi/uscite generiche (GPIO), uscite PWM (pulse-width modulated), un convertitore analogico-digitale (ADC) e tutte le interfacce seriali standard.
Con queste premesse non è passato molto tempo prima che qualche programmatore usasse la sterminata libreria già disponibile per Arduino sulla nuova scheda “cinese”.
Inoltre nel 2015 Espressif aveva rilasciato un kit di sviluppo software (SDK) che permetteva di creare codice utente che si collegava Wi-Fi. Il kit era ed è disponibile in due versioni: una basata sul sistema operativo in tempo reale FreeRTOS e un’altra che si basava su callback e timer software per garantire che il programma utente rispettasse l tempo di elaborazione con lo stack software del Wi-Fi. Secondo le specifiche della casa madre il kit e l’hardware potevano disporre di circa 50 kB di memoria per il loro codice.
I dispositivi della serie ESP32 attualmente disponibili dispongono di un microprocessore dual-core Tensilica Xtensa LX6 a 32 bit. Con 48 pin, forniscono 520 kB di SRAM e, per alcuni dispositivi, tra 4 e 8 MB di memoria flash. 2.4 GHz Wi-Fi e Bluetooth/Bluetooth LE versione 4.2 sono disponibili sul lato connettività. Un modulo integrato ultra-low-power (ULP) è disponibile sul chip dell’ESP32 per gestire la modalità “deep sleep”. Questo modulo riesce a monitorare alcune periferiche (non tutte) durante la modalità sleep (una specie di ibernazione controllata) rendendolo perfetto per progetti alimentati a batteria.
Schema a blocchi del Tensilica Xtensa 32-bit LX6
Con le serie ESP32-S2 (single-core) e ESP-S3 (dual-core) a 56 pin, gli sviluppatori beneficiano del processore Xtensa LX7 a 32 bit. Questo core da 240 MHz offre istruzioni vettoriali, fornendo il “boost” necessario per l’utilizzo dalle reti neurali.
La nuova versione comprende ovviamente Wi-Fi e Bluetooth, anche se quest’ultimo è aggiornato solo alla versione 5.0. Le periferiche di interfaccia rimangono più o meno le stesse con l’aggiunta del sistema TWAI , una interfaccia automobilistica a due fili. Quest’ultimo è compatibile con ISO 11898-1, altrimenti noto come CAN, uno standard “storico” dei produttori di automobili occidentali. La sicurezza è inoltre potenziata con la disponibilità di crittografia flash e un acceleratore HMAC (Message Authentication Code) basato su hash.
Al 2024 una vasta gamma di tools e codice sono già disponibili per gli sviluppatori. Per chi utilizza Arduino, il modo più facile per iniziare consiste nell’usare lo stesso IDE di Arduino!
Basta aggiungere la posizione dei pacchetti Arduino-ESP32 tramite File - > Preferenze, quindi selezionare ESP32 da Strumenti - > Board - > Board Manager (Figura 3). Una volta completato, una serie di esempi verrà visualizzata in File -> Esempi, proprio come con qualsiasi piattaforma Arduino standard.
L’ESP32 integra un modulo Wi-Fi 802.11 b/g/n che supporta velocità di trasmissione dati fino a 150 Mbps. Ciò lo rende ideale per applicazioni che richiedono una connessione wireless ad alta velocità, come la trasmissione di dati in tempo reale o la gestione di dispositivi IoT. Bluetooth 5.0 L’ESP32 integra un modulo Bluetooth 5.0 che supporta velocità di trasmissione dati fino a 2 Mbps.
Ciò lo rende ideale per applicazioni che richiedono una connessione Bluetooth ad alta velocità, come ad esempio la trasmissione di dati audio o la connessione in LAN di altri dispositivi IoT.
L’ESP32 dispone di 25 pin GPIO che possono essere utilizzati per interfacciarsi con sensori e periferiche. Ciò lo rende versatile e adatto a una varietà di applicazioni. Supporta una ampia gamma di sensori e periferiche, tra cui sensori di temperatura, luce, movimento oltre a display, motori, servocomandi industriali e per modellismo.
Inoltre è una piattaforma ideale per lo sviluppo di dispositivi indossabili come smartwatch, fitness tracker e altri. È molto piccolo e leggero, il che lo rende ideale per questo tipo di applicazioni.L’ESP32 può essere utilizzato per sviluppare giochi e applicazioni di intrattenimento.
Come già accennato in precedenza, l’ESP32 è il successore di ESP8266 nella tabella in basso possiamo vedere le maggiori differenze tra i due microchip:
Di seguito è riportato lo schema a blocchi dell’ESP32 con tutti i blocchi funzionali che compongono il SOC.
Diagramma a blocchi dell’ESP32
Il chip SOC ESP32 ha connettività WiFi, essendo compatibile con 802.11 b/g/n nella banda 2.4 GHz, raggiungendo velocità fino a 150 Mbit/s. Non funziona con i canali a 5GHz. Include anche la comunicazione Bluetooth compatibile con Bluetooth v4.2 e Bluetooth Low Energy (BLE).
Il processore è un Tensilica Xtensa 32-bit LX6 dual core. I nomi dei core sono PRO-CPU e APP-CPU. Pro-CPU sta per Protocol CPU e APP-CPU sta per Application CPU. La CPU Protocol è progettata per gestire funzionalità utente come Wi-Fi, Bluetooth e periferiche. La CPU dell’applicazione è progettata per gestire i codici in ESP 32.
Entrambi questi core sono collegati ai registri di memoria e indirizzo. I core di LX6 hanno una frequenza di clock di 160 MHz e quella di LX7 è di 240 MHz. La figura seguente mostra la mappatura delle 2 CPU alle varie unità di memoria.
Schema a blocchi del chip Tensilica Xtensa 32-bit LX6
I microprocessori Tensilica Xtensa LX6 e LX7 hanno un’architettura RISC a 32 bit. Pertanto, le unità di memoria e le periferiche sono progettate in modo tale da poter comunicare con registri di indirizzi a 32 bit. La mappatura dell’architettura è mostrata nel diagramma sottostante in cui si può vedere che tutte le periferiche, ROM e SRAM interne, memoria di comunicazione in tempo reale veloce e lenta, memoria cache e flash esterno, sono tutte mappate con registri a 32 bit.
Mappatura dei chip RISC Tensilica Xtensa LX6 e LX7
I chip possiedono un co-processore a bassissima potenza che viene utilizzato per eseguire conversioni analogico-digitali e altre operazioni e può funzionare in modalità deep sleep - low-power. In questo modo, si ottiene un consumo elettrico ridottissimo.
Alcuni vantaggi rispetto ad Arduino UNO:
Sebbene queste caratteristiche siano trasparenti durante la programmazione, hanno un grande impatto sull’efficienza e sulle dimensioni del codice scritto sul microcontroller.
Nella maggior parte dei microcontrollori basati su Arduino, ci sono tre tipi di memorie:
L’ESP32 funziona in modo leggermente diverso, infatti ha altri tipi di memorie che di solito sono classificate in interne ed esterne. Le memorie interne sono quelle che sono già incluse nel SoC, e quelle esterne sono quelle che possono essere aggiunte per espandere la capacità del sistema.
Molte schede di sviluppo basate su ESP32 aggiungono memoria esterna per un sistema più performante.
La quantità di memoria varia a seconda del chip utilizzato: 0 MB (chip ESP32-D0WDQ6, ESP32-D0WD, ESP32-S0WD) 2 MB (circuito integrato ESP32-D2WD) 4 MB (Chip ESP32-PICO-D4)
Per ESP32S che non hanno memoria incorporata o semplicemente quando la memoria è insufficiente per l’applicazione, è possibile aggiungere più memoria esternamente :
Uno dei fattori più importanti in qualsiasi sistema è la sicurezza. Ecco perché l’ESP32 ha acceleratori di algoritmi mirati alla crittografia:
Questi acceleratori consentono di aumentare la velocità di funzionamento, e permettono di lanciare algoritmi di crittografia e de-crittografia dinamica. In tal modo il sistema è meglio protetto da possibili attacchi di hacking.
L’ESP32 è un chip versatile ed ampiamente adottato dalla industria “automotive” per esempio, ma per essere usato da hobbysti e programmatori ha bisogno di una scheda di sviluppo che fornisca la alimentazione e la connessione seriale.
Il piccolo chip che provvede alla alimentazione si chiama AMS1117 e lo vedi nella foto al centro della scheda, vicino al bridge UART.
immagine della piedinatura del modulo ESP32 WROOM
Come potete vedere dall’immagine sopra del diagramma di piedinatura del modulo ESP32 WROOM, tutti i diversi tipi di pin sono menzionati in diversi colori e sono raggruppati per uilizzo. Molti piedini posso compiere diverse funzioni.
L’ESP32 ha un totale di 34 pin digitali. Questi pin sono simili ai pin digitali Arduino che consentono di aggiungere display a LED, display OLED, sensori, pulsanti, cicalini, ecc. ai nostri progetti.
La maggior parte di questi pin supporta anche l’uso di pull-up interno (in sostanza una resistenza da 10 KOhm). Ciò li rende ideali per il collegamento di pulsanti e tastiere a matrice, e per controllare gruppi di LED.
Il modulo WROOM ESP32 ha 25 pin GPIO e la corrente massima assorbita per un singolo GPIO è 40mA secondo la sezione “Condizioni operative consigliate” nella scheda tecnica dell’ESP32.
È possibile utilizzare i pin GPIO in OUTPUT per controllare qualsiasi cosa, da dispositivi con minimo assorbimento come un LED, fino a dispositivi di elevato wattaggio utilizzando dei relay o dei tiristori. Facciamo l’esempio classico in cui vogliamo accendere e spegnere un LED esterno, ovviamente aggiungendo una resistenza di 330 Ohm!
Prima di tutto, è necessario definire il pin GPIO per operare in modalità di output nella funzione “setup()” e useremo la funzione Arduino “pinMode()” come mostrato di seguito:
pinMode(GPIO_pin, OUTPUT);
Quindi puoi settare il pin HIGH o LOW per cambiarne lo stato digitale. Puoi accendere il LED scrivendo HIGH o 1: Vengono interpretati allo stesso modo.
Per spegnerlo ovviamente puoi scrivere un LOW o 0. In entrambi casi si utilizza la funzione Arduino “digitalWrite()” come vedi in basso:
digitalWrite(GPIO_pin, HIGH); // Accendi il LED
digitalWrite(GPIO_pin, LOW); // Spegni il LED
I pin dell’ESP32 possono essere usati in modalità di INPUT per leggere segnali digitali esterni. I segnali possono provenire da vari dispositivi come un piccolo pulsante, un sensore di prossimità digitale o magari un sensore di gas digitale.
Proprio come per la modalità di OUTPUT, è necessario prima definire il pin GPIO usando la funzione Arduino “pinMode()” come mostrato di seguito:
pinMode(GPIO_pin, INPUT);
Supponiamo di volere legere un normale tast: Dopo il collegamento elettrico, possiamo leggere il segnale usando la funzione Arduino “digitalRead()” come nella riga successiva.
BTN_State = digitalRead(GPIO_pin);
E’ questo è tutto! Come vedi la libreria di Arduino trasforma la intera operazione in una singola riga di codice. Il problema, casomai, potrebbe nascere dal punto di vista elettrico perchè il tasto potrebbe richiedere una resistenza di “pull-up” o “pull-down” per stabilizzare la tensione letta dal GPIO del controller.
Lasciare il pin di ingresso digitale fluttuante è una pratica estremamente “scorretta”: l’ESP32 rileverà molto rumore elettrico e la unità di lettura del chip potrebbe non distinguere tra la tensione a 0 o 1. La soluzione consiste nell’inserire una resistenza da 10 kOhm tra il pin di GPIO e la alimentazione (+3.3V). In questo caso parliamo di resistenza di “pull-up”.
Pin con INPUT_PULL-UP (dispongono di una resistenza di 10KOhm):
Alcuni dei pin elencati nel diagramma di ESP32 possono essere utilizzati per interagire con sensori analogici, come i classici pin analogici di Arduino.
Con una tale connettività e potenza possiamo capire come ESP32 abbia scalato le classifiche di vendita dell’IOT.
Seppure la nostra scheda venga percepita come una alternativa rispetto ad Arduino, ne eredita moltissimi tools e librerie.
Gli appassionati che vogliono provare questo controller possono dunque giovarsi delle maggiori prestazioni senza dover imparare nuovi software e tools.
Il microcontroller ESP32-P4 promette di migliorare ancora le prestazioni della nostra scheda. Con una CPU RISC-V dual-core con clock di 400 MHz e 768KB di SRAM on-chip il nuovo sistema garantisce elevate prestazioni e una più facile connessione di fotocamere ad alta risoluzione con protocollo MIPI-CSI.
Robotdazero.it - post - R.138.1.4.0