Il consumo energetico dell'ESP32 può essere ridotto con le modalità di sospensione
L'ESP32 è un dispositivo incredibile: è in grado di elaborare informazioni a centinaia di megahertz, comunicare tramite WiFi e Bluetooth e svolgere una vasta gamma di compiti utilizzando i suoi pin GPIO. Tuttavia, si potrebbe dire che con grande potenza viene un grande... consumo di energia.
A essere onesti, il consumo energetico di ESP32 è effettivamente piuttosto basso rispetto a dispositivi simili di un decennio fa. Per le moderne applicazioni IoT, tuttavia — soprattutto quando è coinvolta una batteria — può essere un vorace di energia relativo, consumando centinaia di milliampere di corrente quando è completamente alimentato.
La buona notizia è che l'ESP32 dispone anche di un sistema di modalità di sonno e ibernazione. Quando utilizzate con attenzione, queste modalità permettono di domare l'appetito energetico di ESP — o almeno di limitarlo a brevi momenti di attività.
Modalità di riposo
ESP32 in modalità riposo profondo e altre modalità di alimentazione sono delineate nel grafico sottostante, tratto dal suo datasheet:
| Modalità di alimentazione | Descrizione | Consumo energetico | |
| Modem-sleep | La CPU è accesa. | 240 MHz (Chip dual-core) | 30 mA ~ 68 mA |
| 240 MHz (Chip single-core) | N/D | ||
| 160 MHz (Chip dual-core) | 27 mA ~ 44 mA | ||
| 160 MHz (Chip single-core) | 27 mA ~ 34 mA | ||
| Velocità normale: 80 MHz (Chip dual-core) | 20 mA ~ 31 mA | ||
| Velocità normale: 80 MHz (Chip single-core) | 20 mA ~ 25 mA | ||
| Light-sleep | - | 0.8 mA | |
| Deep-sleep | Il coproccessore ULP è acceso. | 150 µA | |
| Modello monitorato da sensore ULP | 100 µA @1% duty | ||
| Timer RTC + memoria RTC | 10 µA | ||
| Ibernazione | Solo timer RTC | 5 µA | |
| Spegnimento | CHIP_PU è impostato a livello basso, il chip è spento. | 1 µA | |
Schermata dal datasheet
L'ESP32 ha cinque modalità a basso consumo: ESP32 modem-sleep, light-sleep, deep-sleep, ibernazione e spegnimento. Modem-sleep e deep-sleep hanno diversi sottomodalità, con diversi tassi di consumo energetico basati sulle capacità di elaborazione attive. L'ibernazione interrompe quasi tutte le funzionalità del chip, tranne per un RTC che lo riattiva dopo un periodo di tempo impostato. La modalità di spegnimento è attivata in risposta al pin CHIP_PU impostato su basso e richiede un'interazione esterna per avviare nuovamente l'elaborazione.
Il vantaggio di tutto ciò è che le modalità a basso consumo dell'ESP32 possono consumare tra 68mA e 5µA, ovvero 0,068A e 0,000005A rispettivamente, escludendo lo spegnimento. Lo svantaggio è che ogni modalità limita l'utilità dell'ESP32, come indicato di seguito:
- Modem-sleep: La comunicazione wireless è interrotta.
- Light-sleep: Il processore viene sospeso ma gli stati di memoria vengono conservati.
- Deep-sleep: Spegne la memoria principale dell'ESP32. Una quantità limitata di memoria RTC (real-time clock) viene conservata e può essere utilizzata al risveglio. Il processore ULP (ultra-low power) è attivo in due delle tre sottomodalità deep-sleep, consentendo l'esecuzione di compiti semplici e il monitoraggio degli input.
- Ibernazione: Mantiene attivi solo l'RTC e un numero limitato di pin GPIO per il risveglio. Non viene conservata alcuna memoria.
- Spegnimento: Deve essere riattivato esternamente. Il consumo di energia di 1µA è trascurabile nella maggior parte delle situazioni.
Ignorando gli effetti della tensione, una piccola batteria ricaricabile da 3,7V, 850mAh sarebbe in grado di alimentare un ESP32 in modem-sleep per circa 12,5 ore. Light-sleep potrebbe funzionare per oltre 1000 ore. Dormienza profonda di livello medio ibernazione offre 8500 ore di autonomia, circa un anno, mentre uno stato di ibernazione potrebbe teoricamente essere mantenuto per quasi 20 anni. Ovviamente il dispositivo avrà bisogno di svegliarsi intermittentemente per essere utile, ma con una pianificazione attenta, un setup ESP32 può risultare in una vita estremamente lunga tra le ricariche della batteria.
Differenze tra le schede di sviluppo ESP32 in modalità sleep profondo
Screencap dal foglio dati
Quando si discute di consumo energetico, un chip o modulo ESP32 è solo una parte del quadro elettronico. Per sperimentare, probabilmente utilizzerai una scheda di sviluppo. Per progetti elettronici più sviluppati, sarà necessario un arrangiamento personalizzato delle parti associate per far funzionare un “oggetto” IoT. Con una programmazione attenta, l'uso di un ESP32 può essere molto efficiente in termini di energia, ma l'elettronica circostante richiede un'attenta considerazione.
Per illustrare questo punto, ho collegato una scheda di sviluppo Adafruit HUZZAH32 ESP32 a un alimentatore e attrezzature di misurazione della corrente, insieme a una scheda DFR0478 ESP32 di DFRobot. Entrambi sono stati presentati in questo articolo sul clock video composito ESP32 e si sono comportati diversamente in quello che potrebbe essere considerato un caso d'uso piuttosto di nicchia. Forse l'efficienza energetica si rivelerebbe anche una caratteristica distintiva tra i due.
Per testare questo, ho utilizzato un esempio di sketch Arduino ESP32 "TimerWakeUp" modificato che va in modalità sleep profondo, si sveglia, accende la luce LED integrata e poi ricomincia il ciclo andando a dormire. Sono stati forniti 5,3V a ciascuna scheda per essere convertiti al livello di tensione di ~3,3 necessario per l'ESP32. I risultati del consumo erano i seguenti:
HUZZAH32: sonno = 6,6mA sveglia = 43,2mA sveglia + LED = 44,6mA
DFR0478: sonno = 0,02mA sveglia = 39,7mA sveglia + LED = 40,0mA
Per essere equi, una simulazione migliore dell'uso effettivo dell'IoT poteva essere quella di misurare la corrente tramite la porta della batteria. Tuttavia, sembra che in questo scenario, la scheda DFR0478 FireBeetle sia molto più efficiente in modalità di sospensione rispetto alla sua controparte.
La HUZZAH32 assorbe 7000µA (7mA) durante la sospensione profonda dall' alimentazione a batteria, circa quanto ho misurato nel mio esperimento. Un'analisi di Andreas Spiess ha rilevato che la DFR0478 assorbe un valore riportato di 53µA (.053mA) di corrente dalla batteria quando è in sospensione profonda. Questo è significativamente più di quanto ho misurato sulla DFR0478, tuttavia, il suo rapporto utilizza un input di alimentazione diverso e una versione precedente della scheda (2.0 vs 4.0 che ho testato). Questa misura sta anche spingendo i limiti inferiori di ciò che il mio multimetro può segnalare, il che potrebbe influire sulla sua precisione. Come ultimo avvertimento, la FireBeetle testata utilizza un modulo WROOM-32D ESP32, mentre la HUZZAH32 utilizza un WROOM-32E.
Detto questo, ci sono ordini di grandezza di differenza tra le due schede testate, il che è una buona illustrazione del fatto che il circuito che supporta un ESP32 può avere un effetto drammatico sul consumo energetico.
Il consumo energetico di ESP32 è ridotto dalle modalità di sospensione
L'ESP32 è un dispositivo incredibilmente potente che può richiedere una quantità relativamente grande di energia per funzionare. Tuttavia, con una programmazione attenta, è possibile far durare uno di questi dispositivi con l'alimentazione a batteria per settimane, mesi o anche di più. La chiave è comprendere i compromessi coinvolti nel design a basso consumo energetico e cosa può essere omesso ottenendo comunque prestazioni accettabili.
Newsletter
Sei nella lista?
Iscriviti per ricevere offerte esclusive, annunci di prodotti e le ultime notizie del settore.

Tag articolo