INTRODUCCIÓN
El consumo de energía de los procesadores ESP8266 es muy elevado, los podemos resumir rápidamente como «devoradores de energía». El motivo fundamental es la energía necesaria para realizar las conexiones WiFi, pero en multitud de proyectos la facilidad de conexión WiFi es el motivo por el que resultan útiles estos procesadores.
Es necesario conocer los modos de ahorro de energía de que disponen para poder construir proyectos que en situaciones ideales duren años, sin tener que cambiar las baterías o depender del uso de enchufes.
Con esta práctica se empieza una trilogía dedicada a los modos de ahorro, analizando en detalle en cada una de ellas, cada modo:
- Deep-Sleep: como podrá ver a continuación, es el modo que genera mayor ahorro, pero a costa de dejar la placa en suspenso. La única parte de la placa que funciona durante este modo es reloj en tiempo real, para poder reiniciarla cuando haya finalizado el tiempo de reposo.
- Modem-Sleep: este modo de ahorro permite desactivar la conexión WiFi de tipo Station , establecida con un punto de acceso (router), cuando no sea necesario su uso y volver a activarla cuando se necesite.
- Light-Sleep: este modo de ahorro permite mantener la conexión WiFi de tipo Station, pero reduce el consumo de energía en los momentos en los que no hay envío de información.
Es muy interesante ver el siguiente vídeo publicado Andreas Spiess en su canal de YouTube.
En el vídeo se puede ver como con un microprocesador ESP8266 (ESP07) lee el voltaje que le queda a la pila que lo alimenta y envía el dato a las plataformas data.sparkfun.com y ubidots.com.
Haciéndolo una vez cada hora, con una pila de botón LIR2450, que tiene una capacidad de 100mAh, logra hacerlo durante 17 días.
Con dos pilas AA de 1,5 V, con una capacidad de 2.220mAh, estima que se puede hacer durante 425 días.
MODO DE AHORRO DE ENERGÍA DEEP-SLEEP
Como ya hemos comentado, el modo de ahorro de energía deep-sleep es uno de los tres modos que disponen los microprocesadores ESP (modem-sleep, light-sleep y deep-sleep).
Es el procedimiento que genera mayor ahorro, pero a costa de desactivar la WiFi, el reloj del sistema –System Clock– y la unidad central de proceso –Central Process Unit o CPU-, por lo que la placa queda en suspenso, finalizando todos los procesos activos.
Únicamente permanece en funcionamiento el reloj en tiempo real –Real Time Clock o RTC-, que será quien envíe la señal para que se pueda reiniciar el microprocesador, cuando finalice la cuenta atrás de tiempo de suspenso que hayamos establecido.
Es por este motivo por el que se debe conectar con un cable el pin GPIO16 (D0) con el pin de Reset (RST). Si no se hiciera la placa no se reiniciaría.
El consumo del microprocesador en modo deep-sleep baja de un consumo medio de 80/100 miliamperios a ˜20 microamperios conforme indica la guía técnica de Espressif de Low Power Solutions.
FUNCIÓN DEEP-SLEEP: ESP.deepSleep()
La función ESP.deepSleep() tiene dos variables: ESP.deepSleep (tiempo_en_us, modo_reinicio)
- tiempo_en_us (uint32_t): tiempo en microsegundos que de debe estar el microprocesdor en suspenso.
El tiempo máximo que se puede mantener el microprocesador en suspenso es de aproximadamente 71 minutos y 30 segundos. Esto se debe a que los microprocesadores ESP8266 trabajan a 32 bits, por lo tanto el número más alto que admiten es 232 = 4.294.967.295. Dado que el tiempo de suspenso se da en microsegundos (μs) tenemos que:
4.294.967.295 μs = 4.294,967295 s ≈ 71′ 30»
- modo_reinicio: indica como se debe proceder cuando se reinicia el microprocesador con la calibración de la señal de radio para la WiFi. Existen cuatro posibilidades:
- WAKE_RF_DEFAULT: cuando se reinicia el microprocesador, únicamente se calibra la señal de radio si el chequeo da error (init data byte 108>0).
- SLEEP_TIME, WAKE_RFCAL: cuando se reinicia el microprocesador siempre se calibra la señal de radio. Esto incrementa el consumo.
- SLEEP_TIME, WAKE_NO_RFCAL: cuando se reinicia el microprocesador no se calibra la señal de radio. Esto reduce el consumo.
- WAKE_RF_DISABLED: cuando se reinicia el microprocesador se deshabilita la señal de radio (como en el modo modem sleep). Este es el modo con menor consumo, pero no permite ni enviar ni recibir datos vía WiFi.
EJEMPLO PRÁCTICO
Para hacer uso de la función deep-sleep se propone un ejemplo muy sencillo, el control de encendido y apagado de un LED (blink), pero el tiempo que el LED esté apagado, en vez de estar el microprocesador ESP8266 funcionando, estará en modo deep-sleep.
Así mismo haremos que cada vez que se reinicie el microprocesador se deshabilite la señal de radio (WAKE_RF_DISABLED) ya que no será necesario ni el envío ni la recepción de datos vía WiFi.
El tiempo que se ha establecido que debe permanecer el LED encendido es de 1 segundo y apagado 5 segundos.
El material necesario para realizar la práctica será el siguiente:
CIRCUITO Y SKETCH
El sketch será el siguiente:
/* NodeMCU Uso del modo DEEP-SLEEP por DaniBits www.ESPloradores.com Enciende un LED durante 1 segundo y lo mantiene apagado 5 segundos dejando el microprocesador en modo DEEP-SLEEP. Al no requerirse uso de red WiFi no se habilita cuando se enciende el microprocesador (WAKE_RF_DISABLED). IMPORTANTE: Es necesario desconectar el cable GPIO16(D0)-RST para subir el sketch a la placa y reconectarlo para que funcione su ejecución. Este código de ejemplo es de público dominio. */ int LED = 2; // Pin LED GPIO02 (D4) uint32_t TIEMPO_DeepSleep = 5e6; // Tiempo en modo deep-sleep en microsegundos uint8_t TIEMPO_Referencia; // Tiempo de referencia para encender 1 segundo el LED void setup() { pinMode(LED, OUTPUT); // Inicializa el LED_aparpadear como una salida digitalWrite(LED, HIGH); // Enciende el LED TIEMPO_Referencia = millis(); } void loop() { if (millis()-TIEMPO_Referencia > 1000){ //ESP.deepSleep(TIEMPO_DeepSleep, WAKE_RF_DEFAULT); // Calibración de señal de radio si es necesario //ESP.deepSleep(TIEMPO_DeepSleep, WAKE_RFCAL); // Calibración de señal de radio siempre //ESP.deepSleep(TIEMPO_DeepSleep, WAKE_NO_RFCAL); // Sin calibración de la señal de radio ESP.deepSleep(TIEMPO_DeepSleep, WAKE_RF_DISABLED); // Desabilita la señal de radio después del reencendido } }
ESTIMACIÓN DE LA VIDA ÚTIL DE LAS BATERÍAS
Estimar la vida útil de las baterías es una operación muy sencilla, conociendo los consumos y tiempos de funcionamiento.
Utilizando dos pilas AA de 2.100 mAh de carga, con los siguientes consumos y tiempos de funcionamiento por ciclo:
- En modo deep-sleep 20 μA durante 5 segundos.
- Con el procesador funcionando 60 mA de media durante 1 segundo (no habilitamos la red WiFi).
El consumo por ciclo será de:
0,020 mA*5 s + 60 mA*1 s = 60,1 mAs/ciclo
Y el número de ciclos que funcionará el dispositivo será de:
(2.100 mAh * 3.600 s/h) / 60,1 mAs/ciclo = 125.790 ciclos
Sabiendo que cada ciclo dura 6 segundos, la vida útil será aproximadamente de 8 días y 17 horas.
40 Comments
Leave your reply.