“ESP32 is a series of low cost, low power system on a chip microcontrollers
with integrated Wi-Fi and dual-mode Bluetooth.”
Nel panorama dell’IoT, tra i moduli Arduino, basati su microcontroller AVR, ed i ben più completi Raspberry Pi, dotati di CPU, RAM, scheda video ed interfacce di rete, che però necessitano di un vero e proprio sistema operativo per funzionare, da installare su una scheda di memoria microSD, esiste un “mondo di mezzo”, come questi interessanti moduli ESP32.
Moduli economici, non eccessivamente potenti, che però hanno a bordo una CPU dual-core Xtensa 32-bit LX6, a 160 o 240 MHz, capace di elaborare fino a 600 DMIPS, 520KByte di SRAM, connettività Bluetooth 4.2 e WiFi 802.11 b/g/n.
Sono moduli perfetti per sviluppare semplici progetti IoT, espandibili grazie alle numerose capacità di I/O già incluse a bordo, come DAC, ADC, PWM, I2C, SPI, GPIO…, la connettività in Rete ed il basso consumo, oltre ad alcune interessanti funzionalità di power management, che li rendono eccellenti anche per essere alimentati a batteria o pannelli solari.
Il costo, sul portale Aliexpress, si aggira tra i 6 e i 12€ (per i moduli più completi, magari con display OLED on-board) cadauno, spese di spedizione escluse, e devo ammettere che mi sono lasciato prima attrarre e poi affascinare dalla versatilità di questi oggettini, tanto da averne già acquistati alcuni con caratteristiche particolari, come ad esempio un WeMos ESP32 con batteria al litio 18650 integrata, un Heltek ESP32 con display OLED integrato ed un WeMos ESP32, sempre con display OLED integrato:
Installazione dell’ambiente di sviluppo – SDK
Per lo sviluppo si può scegliere di usare il framework Arduino, più semplice per un primo approccio alla programmazione dei moduli, oppure usare l’SDK ufficiale messo a disposizione dalla casa produttrice, Expressif, e basato su FreeRTOS.
Si può anche scegliere di usare entrambi gli ambienti di sviluppo, così da poter sperimentare senza problemi la libreria di esempi messi a disposizione da entrambe le piattaforme.
Su Arduino, l’installazione è abbastanza semplice: dopo aver scaricato ed installato l’IDE da arduino.cc, seguendo le semplici istruzioni, è necessario seguire le istruzioni di installazione delle librerie di sviluppo per ESP32 qui: github.com/espressif/arduino-esp32. Alla fine dovreste trovare, nel menù “Tools”, nella sezione delle “Boards”, l’elenco dei moduli ESP32 disponibili: fondamentale selezionare, prima del caricamento del firmware, il modello esatto della scheda che stiamo programmando.
L’installazione dell’ambiente di sviluppo basato su FreeRTOS messo a disposizione da Espressif è sensibilmente più complicata e deve essere fatta quasi esclusivamente da consolle.
Le istruzioni “ufficiali” sono a questa pagina: esp-idf.readthedocs.io/en/latest/get-started/index.html#setup-toolchain ed è importante ricordarsi di impostare correttamente le variabili di ambiente IDF_PATH e PATH ai file binari del toolchain, necessari per la compilazione del firmware.
Se avete fatto tutto correttamente, entrando in una qualsiasi delle directory dei progetti di esempio disponibili e lanciando il comando make menuconfig, dovrebbe apparire una schermata simile:
dove indicare eventuali caratteristiche della scheda, abilitare (o disabilitare) features ed altre impostazioni. Dopodiché, una volta salvata la configurazione, per la compilazione del firmware si procede con il classico “make“.
Cosa posso realizzare con questi moduli ?
Un buon punto di partenza per lasciarsi ispirare sono sicuramente gli esempi già presenti negli SDK, dove troviamo semplici server Web, scanner Bluetooth o BLE, monitor di rete WiFi e controller per interfacciarsi con i sensori più comuni (ad esempio sensori di temperatura/pressione/umidità, come il Bosch BME280, con il quale si può realizzare una stazione meteo).
Personalmente, come primo esperimento, ho installato il WiFi PacketMonitor realizzato da Stefan “spacehunh” Kremser sul modulo WeMos ESP32 con display OLED integrato:
Come si vede bene in foto, i moduli sono alimentabili tramite la stessa porta USB dalla quale avviene sia la programmazione che il debugging. E quindi si prestano bene anche ad essere portati con sé, magari utilizzando un power bank per l’alimentazione. Oppure, se vogliamo integrarli in un progetto più definitivo, l’alimentazione può avvenire tramite i pin GND e 5V presenti sulla scheda.
Conclusioni
Ho trovato molto interessanti le possibilità di utilizzo di questi moduli, che coniugano in modo efficace le esigenze di connettività dei dispositivi IoT con la flessibilità hardware dei microcontrollori. Sul subreddit /r/ESP32 ci sono molti esempi su cosa si può realizzare, anche semplicemente a scopo didattico, per esplorare il mondo dell’Internet of Things.
Se siete incuriositi, potete partire dal libro di Kolban sugli ESP32, disponibile su LeanPub, che contiene molto materiale ed esempi prativi su questi moduli. E passare, poi, alla documentazione tecnica messa a disposizione sul sito esp-idf.readthedocs.io/en/latest/index.html.
Buon divertimento !