Di Jeremy Cook
L'ESP32 è un dispositivo incredibile: è in grado di elaborare informazioni a centinaia di megahertz, comunicare tramite WiFi e Bluetooth e portare a termine un'ampia varietà di attività mediante i suoi pin GPIO. Tuttavia, si potrebbe dire che una grande potenza implica un grande…consumo di corrente.
Per correttezza, il consumo di corrente dell'ESP32 in realtà è abbastanza basso rispetto a dispositivi simili di un decennio fa. Per le moderne applicazioni IoT, tuttavia, specialmente nel caso in cui sia coinvolta una batteria, può trattarsi di un consumo energetico elevato, di milioni di milliampere di corrente, in caso di potenza piena.
La buona notizia è che l'ESP32 dispone anche di un sistema di modalità di sospensione e ibernazione. Se utilizzate con attenzione, queste modalità consentono di calmare la fame di corrente dell'ESP o almeno di limitarla a brevi picchi di attività.
Modalità di sospensione
La modalità di sospensione profonda dell'ESP32 e le altre modalità di alimentazione sono delineate nel grafico di seguito, preso dalla scheda dati del dispositivo:
L'ESP32 dispone di cinque modalità di bassa potenza: sospensione del modem ESP32, sospensione leggera, sospensione profonda, ibernazione e spegnimento. Le modalità di sospensione del modem e di sospensione profonda dispongono di diverse modalità secondarie, con differenti consumi energetici a seconda delle funzionalità di elaborazione attive. L'ibernazione arresta quasi tutta la funzionalità del chip, tranne un RTC per attivarlo dopo un determinato periodo di tempo. La modalità di spegnimento viene attivata in risposta al pin CHIP_PU impostato su basso e richiede l'interazione esterna per avviare nuovamente l'elaborazione.
Il risultato di tutto questo è che le modalità di alimentazione bassa dell'ESP32 possono consumare tra 68mA e 5µA o 0,068A e 0,000005A rispettivamente, senza tenere in considerazione lo spegnimento. Lo svantaggio è che ogni modalità limita l'utilità dell'ESP32, come indicato di seguito:
Trascurando gli effetti della tensione, una piccola batteria ricaricabile da 3,7 V, 850 mAh sarebbe in grado di alimentare un ESP32 in modalità di sospensione del modem per circa 12,5 ore. In modalità di sospensione leggera l'unità potrebbe funzionare fino a oltre 1000 ore. L'ibernazione in modalità di sospensione profonda di medio livello garantisce 8500 ore di funzionamento (circa un anno), mentre uno stato di ibernazione in teoria potrebbe essere mantenuto per circa 20 anni. Naturalmente, per essere utile, il dispositivo dovrà riattivarsi in maniera intermittente; tuttavia, con un'attenta pianificazione, la configurazione di un ESP32 può allungare notevolmente la durata tra due cariche della batteria.
Differenze nelle modalità di sospensione profonda del dispositivo ESP32
Quando si parla di consumo energetico, il chip o il modulo di un dispositivo ESP32 è solo una parte dell'elettronica. Per la sperimentazione, è probabile che venga utilizzata una scheda di sviluppo. Per progetti di elettronica più precisi, per l'IoT sarà necessaria una disposizione personalizzata di parti associate. Con una programmazione attenta, l'uso di un dispositivo ESP32 può essere molto efficiente dal punto di vista energetico, ma l'elettronica circostante necessita di un'attenta configurazione.
Per illustrare questo punto, ho collegato una scheda di sviluppo Adafruit HUZZAH32 ESP32 a una fonte di alimentazione e a un dispositivo per la misurazione della corrente, insieme a una scheda DFRobot DFR0478 ESP32. Entrambi sono presentati in questo post video composito ESP32 e si comportano in modo diverso in quello che può essere considerato un caso d'uso piuttosto di nicchia. Forse l'efficienza energetica dovrebbe dimostrarsi una caratteristica distintiva tra i due dispositivi.
Per testarlo, ho utilizzato uno schizzo di esempio del "TimerWakeUp" ESP32 Arduino che passa dalla modalità di sospensione profonda, alla riattivazione, all'accensione della luce LED integrata e infine ricomincia il ciclo partendo di nuovo dalla sospensione. Ogni riceveva 5,3 V da convertire nel livello di tensione di ~3,3 per l'ESP32. I consumi derivanti sono stati quelli indicati di seguito:
HUZZAH32: | sospensione = 6,6 mA | attività = 43,2 mA attività + LED = 44,6 mA |
DFR0478: | sospensione = 0,02 mA | attività = 39,7 mA attività + LED = 40,0 mA |
Per correttezza, per simulare meglio l'uso effettivo di IoT sarebbe stato opportuno misurare la corrente attraverso la porta della batteria. Tuttavia, sembra che in questo scenario la scheda DFR0478 FireBeetle sia di gran lunga più efficiente in modalità di sospensione rispetto alla controparte.
Il dispositivo HUZZAH32 ricava 7000 µA (7 mA) in fase di sospensione dall'alimentazione a batteria, all'incirca quella che ho misurato nel mio esperimento. Un'analisi di Andreas Spiess ha scoperto che il dispositivo DFR0478 ricava una corrente dichiarata di 53 µA (0,053 mA) dalla batteria in modalità di sospensione. Si tratta di una quantità nettamente superiore a quella misurata sul dispositivo DFR0478. Tuttavia, il suo report usa un ingresso diverso per l'alimentazione e una versione precedente della scheda (2.0 rispetto alla 4.0 da me provata). Tale misurazione va oltre i limiti inferiori di quello che il mio multimetro è in grado di segnalare, il che potrebbe influenzarne l'accuratezza. Come ultima osservazione, il FireBeetle testato usa un modulo WROOM-32D ESP32, mentre il dispositivo HUZZAH32 usa un modulo WROOM-32E.
Detto questo, la differenza tra le due schede testate è enorme, e questa è una buona rappresentazione del fatto che i circuiti che supportano un dispositivo ESP32 possono avere un effetto notevole sul consumo di corrente.
Riduzione del consumo di corrente del dispositivo ESP32 tramite le modalità di sospensione
L'ESP32 è un dispositivo incredibilmente potente che può richiedere una quantità di corrente relativamente grande per funzionare. Tuttavia, con una programmazione attenta, è possibile fare in modo che l'alimentazione a batteria duri per settimane, mesi o anche di più. La chiave sta nel comprendere il compromesso tra il design a basso consumo di corrente e ciò che è possibile trascurare pur ottenendo delle prestazioni accettabili.