ESP32 e le sue modalità di funzionamento per il risparmio energetico
Introduzione
Se il nostro sistema è connesso alla rete elettrica il problema di limitare il consumo energetico del dispositivo è sicuramente poco rilevante.
Se invece il nostro sistema è alimentato con una batteria, per esempio un sistema IOT installato in un’area remota dove non è presente l’energia elettrica di rete, oppure, considerate i sistemi come i sensori montati su un dispositivo d’allarme con connessione wireless.
In queste condizioni è indispensabile centellinare il consumo di energia, affinché si possa prolungare la durata media della batteria e quindi diminuire la frequenza della sua sostituzione.
Modalità di funzionamento
Il microcontrollore ESP32, come indicato nel datasheet, può essere configurato con ben cinque modalità differenti di funzionamento, e ognuna di esse ha un consumo proporzionale alle periferiche attive.
- Active
- Modem-Sleep
- Light-Sleep
- Deep-Sleep
- Hibernation
Modalità Active
Nella modalità “Active”, tutti i dispositivi inclusi CPU, Bluetooth, Wi-Fi, RTC e coprocessore ULP sono alimentati. Questa è la modalità di alimentazione più inefficiente, ed è usata principalmente quando il dispositivo è alimentato tramite la rete elettrica. Per questa modalità di funzionamento il datasheet riporta i seguenti consumi: 95-240 mA, che dipendo da quante periferiche contemporaneamente sono in attive e in funzione.
Modalità Modem-Sleep
Il blocco radio, WIFI e Bluetooth, sono le periferiche che hanno un maggior assorbimento di potenza e in questa modalità sono disattivate, in questo modo l’assorbimento di corrente è compreso tra 2-50 mA.
Modalità Light-Sleep
Nella modalità Light-Sleep, le periferiche digitali, la maggior parte della memoria RAM sono spente mentre la CPU è viene messe in pausa, e il suo stato è memorizzato nella parte di memoria RAM ancora attiva per poi recuperarlo quando il microcontrollore esce dalla stato di pausa. Con questa modalità di funzionamento il microcontrollore ha un assorbimento di corrente di circa 0,8 mA.
Modalità Deep-Sleep
Questa modalità di funzionamento ha un assorbimento di corrente molto basso, poiché la CPU è nello stato spento, a differenza della modalità precedente dove la CPU è in pausa. Sono attive solo il coprocessore ULP, RTC e la sua memoria. L’unico codice in esecuzione gira in ULP e memorizzato nel modulo RTC, e possiamo riattivare il sistema utilizzando il timer o un interrupt esterno. L’assorbimento di corrente è di circa 10-150uA.
Modalità Hibernation
In questa modalità tutte le periferiche e le CPU sono spente tranne i timer RTC e alcuni pin GPIO che possono essere usati per riattivare il sistema. Quando il microcontrollore si trova in questo stato, non è possibile salvare i dati e lo stato della CPU prima del suo spegnimento, a differenza delle precedenti modalità, quindi il sistema quando è riattivato riparte come se il microcontrollore fosse stato resettato. L’assorbimento di corrente è di circa 5 uA.
Ho scritto un articolo che tratta il risparmio energetico del microcontrollore ESP32 da un punto di vista pratico, fornendo un esempio concreto (link).