Icono del sitio Programar fácil con Arduino

ESP8266 Deep Sleep, cuánto consumen NodeMCU y Wemos D1 Mini

El modo del ESP8266 deep sleep (sueño profundo) consigue que este SoC o microcontrolador, consiga un consumo de unos 20 µA. Y wow, esto te puede parecer una pasada y un bajo consumo.

Sin embargo, que un dispositivo se considere de bajo consumo o no, depende exclusivamente de la aplicación y no tanto del propio consumo.

Me explico.

Imagínate un proyecto con un Arduino o un ESP8266 con un consumo medio del orden de 100 µA (0,1 mA). Si utilizas una batería de 2.000 mAh y haciendo un cálculo rápido supone una duración de 833 días más o menos.

Esto viene a ser unos 2,3 años de funcionando sin tener que cambiar la batería. Ojo, que esto es un caso ideal. Una batería de 2.000 mAh jamás entregará esa energía ni en el mejor de los casos.

Lo que vengo a decir es que un consumo de 100 µA está bien para una batería de 2.000 mAh pero si la batería es de 100 mAh, la duración será entorno a unos 46 días que es bastante menos que 833.

Esto puede ser un inconveniente o no. Si por ejemplo se puede acceder fácilmente al dispositivo y puedes cambiar las pilas o baterías con comodidad, no será mucho problema hacerlo una vez cada mes y medio.

Ahora, ¿qué pasa si ese dispositivo no es tan accesible? Imagínate una aplicación que controla los movimientos de un ave. Un águila por ejemplo.

En esta situación, tener que cambiar la batería cada 46 días o cada 833 días puede ser un gran inconveniente. Lo ideal sería que durara toda la vida del águila ¿no crees?

Lo que quiero decir con todo esto es que el concepto de bajo consumo no está atado a un valor concreto de intensidad o de potencia. El bajo consumo está ligado al tipo de aplicación que quieras desarrollar.

Dicho esto, en este artículo hablaré de cómo calcular el consumo de un microcontrolador, cómo saber la vida útil de una batería, los modos de ahorro de energía de un ESP8266 y la importancia del modo ESP8266 deep sleep.

Ponte cómodo que empezamos.

Cómo medir el consumo de un microcontrolador como el ESP8266

La energía total que consume un microcontrolador como el ESP8266 puede dividirse en dos: energía dinámica y energía estática.

Todo esto tiene que ver con cómo funcionan los circuitos integrados basados en CMOS. Pero esto se sale fuera de este artículo.

Lo importante, y con lo que quiero que te quedes, es que hay dos tipos de energía.

La energía dinámica es aquella energía que consume un microcontrolador cuando está activo y cuando mediante la programación, accedemos a componentes analógicos como ADC, osciladores, módulo WiFi, etc…

El mero hecho de llamar a la función analogRead(…) o WiFi.begin(…) en un ESP8266 produce un consumo energético que en ocasiones, es bastante elevado.

Por el contrario, la energía estática es aquella energía que consume el microcontrolador cuando está en estado de reposo (o en standby). En este estado, aunque esté conectado a la fuente de energía, tiene un bajo consumo.

Por lo tanto, para saber cuánto consume un microcontrolador como el ESP8266, se suman dos intensidades obteniendo lo que se conoce como intensidad promedio.

Ipromedio = Iestática + Idinámica

En realidad lo que representa esta ecuación es la suma entre la media de la intensidad en reposo y la media de intensidad en activo durante un periodo de tiempo.

La intensidad promedio es una estimación del consumo del ESP8266, o cualquier microcontrolador, durante un periodo de tiempo. Pero no deja de ser eso, una estimación.

Si el dispositivo se encuentra mucho más tiempo en reposo que activo, la intensidad promedio baja. En caso contrario, cuando está más activo que en reposo, la intensidad promedio aumenta.

Por lo tanto, si quieres tener un bajo consumo con tus dispositivos, debes hacer que esté el mayor tiempo posible en estado de reposo y que solo esté activo lo extrictamente necesario.

Lo típico es que un ESP8266 mida algún tipo de magnitud como la temperatura con un DS18B20 o un sensor infrarrojo MLX90614, envíe la información a través de la red WiFi y luego entre en modo de reposo durante un periodo largo de tiempo, dependiendo de cada aplicación.

Así es como se consigue que el ESP8266 tenga un bajo consumo.

Y con esto más o menos ha quedado claro en qué consume la energía un ESP8266 pero ¿cuánto consume realmente un ESP8266?

Antes de responder a esta pregunta hay que tener claro cómo alimentar una placa de prototipado como NodeMCU o Wemos basadas en el ESP8266.

Cómo alimentar una placa NodeMCU o Wemos D1 Mini basada en un ESP8266

Por fin has terminado de montar y programar tu proyecto basado en las placas NodeMCU o Wemos las cuales incorporan un módulo ESP8266. Ha quedado genial e incluso se lo has enseñado a tu cuñado para fardar.

Y llega la hora de la verdad. Necesitas alimentar tu proyecto y donde tienes pensado dejarlo no hay una toma de corriente así que te aventuras a utilizar una pila o batería.

Lo primero que te debes plantear es ¿dónde se conecta la batería en un ESP8266?

En las placas típicas como NodeMCU y Wemos hay tres formas de alimentar un ESP8266:

No he encontrado grandes diferencias de consumo cuando se alimenta por el pin de 5V o de 3,3V sin embargo, todo hace pensar que de alguna manera el pin de 5V está conectado al regulador de tensión.

Para que el ESP8266 funcione si se alimenta por el pin de 5V necesita un voltaje de más de 4,5V y eso es debido al regulador de tensión. Sin embargo por el pin de 3V3 esto no sucede.

Por lo tanto, un posible esquema de conexión con el pin de alimentación podría ser este.

Ojo, que este esquema puede no ser cierto ya que dependerá de cada fabricante.

Antes de conectar tu batería o pila a la placa es importante conocer el rango de voltaje que admite un ESP8266. Porque aunque veas muchos componentes dispersos por la placa, no hay que perder el foco de lo que estamos haciendo.

Todos esos componentes de las placas de prototipado están puestos ahí por un motivo: programar un microcontrolador. En concreto en este caso es el ESP8266. Esto determina cómo se debe alimentar cualquier placa basada en el ESP8266.

En la hoja de características técnicas puedes ver el voltaje de operación e incluso el consumo medio del ESP8266.

El voltaje de operación está entre 2,5V y 3,6V. Cualquier voltaje por debajo de este rango hará que el ESP8266 no funcione correctamente y cualquier voltaje por encima, podrá dañarlo.

También nos informa que el consumo medio es de 80 mA. Esto incluye la corriente estática y dinámica que hemos visto antes.

Por lo tanto, necesitas una fuente de alimentación (pila o batería) que proporcione un voltaje entre 2,5V y 3,6V. Deberá ir conectado al pin 3V3 y no te olvides de conectar el polo negativo de la pila o batería al pin GND de la placa.

Bien, vamos avanzando. Ya tenemos todo conectado y ahora te surje otra duda ¿cuánto puede durar una batería?

Esto depende de muchos factores pero los dos más importantes, son la capacidad de la batería y el consumo de tu proyecto.

Cómo determinar la duración de una batería recargable

Con esta sección no pretendo crear cátedra. Lo único que quiero hacer es dar una visión aproximada de cómo calcular la vida útil de una batería recargable.

Esto se puede saber utilizando un fórmula muy simple donde se tiene en cuenta la capacidad de la batería y el consumo medio del ESP8266. Ojo, que es una aproximación.

Lo primero que tenemos que saber es la capacidad de la batería. Normalmente viene escrito en alguna parte o en las especificaciones técnicas.

Por ejemplo, las baterías LiPo lo traen impreso en un lado.

Estas baterías suministran 3,7V y se salen fuera del rango de voltaje del ESP8266 (de 2,5V a 3,6V). No se deben conectar al pin de 3V3 a no ser que utilices un regulador de tensión. Si utilizas un voltaje mayor del rango recomendado, seguramente no dañes el ESP8266 pero el consumo, por alguna extraña razón, se dispara si te pasas un poco por arriba del voltaje máximo.

Las baterías Li-FePo4 también suelen traer escrito la capacidad en algún lado.

Elegir una batería u otra depende del tipo de aplicación. Las que mejor funcionan y mejor resultado dan son las Li-FePo4 aunque también son las más caras. Puedes encontrar todas estas baterías en Amazon.

El tema de las baterías y pilas da para otro artículo y se sale fuera de este tutorial así que continuemos.

Creo que lo mejor es ver un caso práctico de cómo calcular la duración de una batería recargable.

Imagínate que tienes una batería con una capacidad de 3.200 mAh. Esta medida indica que la batería puede proporcionar 3.200 mA en una hora (3,2 A) antes de quedarse agotada. Vamos, antes de quedarse seca como la mojama.

Por lo tanto, si consumes menos intensidad significa que la batería dura más porque tarda más en descargarse. Más o menos es así como funcionan las baterías y las pilas.

Bien, pues si sabes la intensidad promedio, puedes calcular la vida útil de la batería usando la siguiente fórmula:

Duración (horas) = (Capacidad batería (mAh) / Ipromedio) x 0,7

Vuelvo a repetir que esto es una aproximación e incluso se podría calcular el peor de los casos si en vez de utilizar la intensidad promedio se utiliza la intensidad dinámica.

El factor de 0,7 que se aplica a la capacidad de la batería es debido a que hay factores externos que afectan a la vida útil de la propia batería y por lo tanto, es difícil que una batería entregue el 100% de su capacidad.

Entonces, si tomamos el consumo medio de 80 mA de un ESP8266 como indica la hoja de características técnicas, la duración de una batería con una capacidad de 3.200 mAh sería

Duración (horas) = (3.200 / 80) x 0,7 = 28 horas

Esto viene a ser un día y cuatro horas, un tiempo realmente insuficiente comparado con otros dispositivos que pueden durar meses e incluso años.

Pero eso es debido a que un consumo de 80 mA, aunque parezca poco, es mucho para un dispositivo de bajo consumo. Si por ejemplo pretendes que tu batería dure un mes con este consumo, debería tener una capacidad de

Capacidad batería (mAh) = (Duración (horas) x Ipromedio)/0,7 = 720 x 80 / 0,7 = 82.285 mAh

Vamos, una batería bien hermosa.

Por lo tanto, si quieres aumentar la duración de la batería, es complicado (y caro) ampliar la capacidad de la batería. En estas situaciones lo más práctico para conseguir un bajo consumo con un ESP8266 es reducir el consumo dinámico y aumentar el consumo estático o en reposo.

En la siguiente sección vamos a ver cómo se puede hacer esto con un ESP8266 gracias a los modos de bajo consumo como el ESP8266 deep sleep.

Cuánto consume un ESP8266

El ESP8266 fue diseñado con un sistema de gestión de energía avanzado que opera en diferentes modos de consumo. En concreto puede funcionar en 4 modos. 1 modo activo y 4 modos de bajo consumo:

El consumo en cada modo depende del uso que se haga. Por ejemplo, en el modo activo el consumo es menor si no se utiliza WiFi que si se utiliza.

Lo mismo para el resto de modos salvo para el modo ESP8266 deep sleep donde el consumo se mantiene constante hasta que se despierta.

En la siguiente tabla puedes ver los consumos medios en cada uno de los modos del ESP8266.

ModoConsumo
ActivoEntre 56 mA y 170 mA
Modem sleep15 mA
Light sleep0,9 mA
Deep sleep20 µA

Datos obtenidos del datasheet del ESP8266

Modos bajo consumo del ESP8266

Los modos modem sleep (modem suspendido) y light sleep (sueño ligero) son útiles cuando necesitas que el ESP8266 siga funcionando pero con solo algunas opciones activas.

Se pueden configurar fácilmente gracias a la función setSleepMode().

Donde:

Sin embargo, si realmente quieres hacer un dispositivo de bajo consumo debes utilizar el modo del ESP8266 deep sleep o sueño profundo.

Utilizando el modo ESP8266 deep sleep, la ejecución del código de un proyecto que funcione con pilas o baterías podría seguir estos pasos:

  1. Realiza una acción como leer un sensor y enviar los datos a una plataforma del IoT como ThingSpeak.
  2. Activar el modo de bajo consumo del ESP8266 deep sleep durante un tiempo configurado.
  3. Despertar el ESP8266.

Para poder utilizar el modo del ESP8266 deep sleep hay que utilizar la función deepSleep().

Donde:

Bien, ahora vamos a ver cómo implementar el modo ESP8266 deep sleep en la práctica con el caso más básico.

ESP8266 deep sleep, ejemplo básico

El proceso que sigue la ejecución de código que hemos visto antes es la siguiente:

  1. Realizar una acción
  2. Modo ESP8266 deep sleep
  3. Despertar

Las dos primeras partes del proceso se realizan a nivel de programación pero la tercera, se hace a través de los pines GPIO 16 (D0) y el pin RST (reset).

El esquema eléctrico para NodeMCU y Wemos D1 Mini sería el siguiente.

Solo hay que conectar el pin RST con el pin GPIO 16 (D0) para que en el modo ESP8266 deep sleep pueda despertar el microcontrolador..

La explicación de esta conexión es que el pin GPIO 16 es un pin especial y se suele etiquetar como WAKE (despertar).

Cuando el ESP8266 se despierta del modo ESP8266 deep sleep hace que el pin GPIO 16, que está siempre en estado HIGH, pase a estado LOW.

Por otra parte, el pin RST siempre está en estado HIGH. Cuando recibe una señal LOW reinicia el microcontrolador.

Por lo tanto, cuando se despierta del modo ESP8266 deep sleep se reinicia el microcontrolador y vuelve al principio del proceso, realizar una acción y luego entrar en modo sueño profundo durante el tiempo configurado.

Código ESP8266 deep sleep

El código sería el siguiente.

Antes de cargar el código desconecta el pin RST del pin GPIO 16 ya que esto no permite que el código se cargue en la placa desde el IDE de Arduino.

Carga el código, abre el monitor serie y cuando empiece a ejecutarse el programa, conecta el pin RST al GPIO 16. Esto hará que tras 10 segundos en el modo ESP8266 deep sleep se despierte.

En el monitor serie aparecerá algo parecido a esto.

Puedes comprobar cómo cada 10 segundos se reinicia y empieza la ejecución desde el principio del programa.

Todo el código que está después de llamar a la función ESP.deepSleep(20e6), no se ejecuta ya que una vez entra en el modo ESP8266 deep sleep, el microcontrolador se duerme y deja de ejecutar las siguientes sentencias. Cuando se despierta, empieza por el principio del código.

Y así de sencillo es utilizar el modo ESP8266 deep sleep donde se consiguen unos consumos entorno a los 20 µA.

Sin embargo, una pregunta que me he hecho con los años ha sido

Placas como NodeMCU o Wemos D1 mini ¿son capaces de alcanzar estos consumos tan bajos?

La respuesta es no. En la siguiente sección te presento una comparativa entre diferentes placas todas ellas basadas en el ESP8266.

Comparativa placas prototipado basadas en el ESP8266

Una de las incógnitas que quiero resolver con esta última sección del artículo es si todas las placas que hay en el mercado (o un gran número de ellas) son capaces de alcanzar los 20 µA del modo ESP8266 deep sleep.

Para poder hacer esta investigación he utilizado las siguientes herramientas:

Las placas y módulos que he utilizado han sido las siguientes:

El esquema de conexión de todas las herramientas y componentes sería el siguiente.

La alimentación de las placas NodeMCU y Wemos se hace a través del pin 3V3 de las placas. La toma de tierra de la fuente a un pin GND de la placa.

En la parte del PC, he creado un script en Python que recoge las medidas que se obtienen del Current Ranger a través del puerto serie.

Debido a que en el modo ESP8266 deep sleep la diferencia es de 1.000 veces menor (en modo activo consume miliamperios y en modo ESP8266 deep sleep consume microamperios), el Current Ranger dispone de un modo que cambia de escala automáticamente.

Todo esto queda registrado en un archivo CSV que posteriormente trato adecuadamente para obtener las gráficas y así poder sacar mis propias conclusiones.

Pero antes veamos el código con el que vamos a probar todas las placas basadas en el ESP8266.

Código para medición consumo del ESP8266

El código para probar el consumo de un ESP8266 es el siguiente.

Es un código muy sencillo que hace las siguientes operaciones.

Se establece el modo estación y se inicia la conexión con la red WiFi. Esta parte es donde más va a consumir el ESP8266.

La siguiente parte del código hace una petición HTTP.

La última parte hace que el microcontrolador entre en modo ESP8266 deep sleep.

Como puedes ver en el código he utilizado llamadas a la función Serial.println() para enviar información por el monitor serie, en realidad no hay una conexión entre el puerto serie del ESP8266 y el ordenador.

Esto es debido a que en las pruebas realizadas, al conectar un FTDI a los pines RX y Tx, se producía un consumo extra debido a alguna corriente parásita.

Es del orden de cientos de microamperios y por este motivo, en las pruebas finales, he decidido no incluir esta parte en el esquema de conexión.

A continuación te muestro los resultados obtenidos divididos por placas y por modo de funcionamiento: modo activo y modo ESP8266 deep sleep.

Vamos a empezar por los módulos ESP-01 y ESP-12

Consumo de un ESP-01 y ESP-12

El módulo ESP-01 fue el primer módulo que venía con un ESP8266. Es el origen de todo lo que ha vendido después.

Uno de los grandes inconvenientes es que no está accesible el pin GPIO 16 a través de los módulos. Esto imposibilita poder conectar este pin con el RST siendo así imposible despertar al microcontrolador.

Sin embargo, si que se puede acceder al pin GPIO 16 através del propio ESP8266. Se puede conectar un cable del pin GPIO 16 al pin RST directamente.

Ojo, que si lo sueldas directamente hay alguna ocasión donde al intentar subir el código fallará y tendrás que desconectarlo, mejor poner un pulsador para desconectar el pin GPIO 16 del RST.

No es una tarea sencilla pero se puede hacer.

Necesitas un FTDI o conversor serie USB para cargar un progrma.

El módulo ESP-12 es el módulo que llevan gran parte de las placas basadas en Wemos D1 Mini y NodeMCU.

Para poder programarlo hay que utilizar un FTDI y poner el ESP8266 en modo carga de programa.

Todo esto se sale fuera de este tutorial y lo dejo para un próximo artículo.

Lo importante son las pruebas de consumo. Empezamos con el consumo del ESP-01 y ESP-12 en modo activo.

Consumo modo activo ESP-01 y ESP-12

Se puede ver que más o menos el consumo medio ronda los 67 mA y cabe destacar que el ESP-01 (rojo) tiene unos picos de consumo de 80 mA.

En la siguiente tabla tienes un resumen de los datos.

ESP-01ESP-12
Mínimo65,26 mA70,9 mA
Máximo80,57 mA63,65 mA
Media67,41 mA66,93 mA

Consumo modo ESP8266 deep sleep ESP-01 ESP-12

Aquí es donde está la gran diferencia entre estos dos módulos, en el consumo en el modo ESP8266 deep sleep.

Mientras que el ESP-01 consume 365 µA, el ESP-12 consigue un bajo consumo de 18 µA. Todo un logro.

En la siguiente tabla tienes un resumen de los datos más relevantes.

ESP-01ESP-12
Mínimo364 µA16 µA
Máximo365 µA19 µA
Media365 µA18 µA

A continuación vamos con la comparativa entre placas NodeMCU.

Consumo de una placa NodeMCU

He utilizado dos placas NodeMCU v2 de distintos fabricantes. Hay una placa de la marca Amica y otra que no tiene el nombre del fabricante. A esta última la he llamado clon.

En todas ellas se utiliza el regulador de tensión AMS1117. Y aunque el pin 3V3 no tendría que pasar por dicho regulador, la realidad es que los consumos en modo ESP8266 deep sleep se disparan.

Esto hace sospechar que realmente el pin 3V3 está conectado al regulador de tensión.

Veamos los resultados.

Consumo modo activo NodeMCU

En el modo activo no hay grandes diferencias con los módulos ESP-01 y ESP-12 aunque el consumo medio aumenta en torno a 10 mA.

NodeMCU AmicaNodeMCU clon
Mínimo74,12 mA74,93 mA
Máximo79,76 mA78,96 mA
Media76,17 mA76,27 mA

Consumo modo ESP8266 deep sleep NodeMCU

Aquí es donde realmente encontramos la diferencia con los módulos y con las placas Wemos, como veremos después. Pasa de consumir µA a consumir mA en el modo ESP8266 deep sleep.

Y esto es algo inaceptable si quiere alimentar una placa NodeMCU con una pila o batería.

NodeMCU AmicaNodeMCU clon
Mínimo8,06 mA8,06 mA
Máximo8,86 mA8,06 mA
Media8,84 mA8,06 mA

Consumo de una placa Wemos D1 Mini

Las placas Wemos D1 Mini son de mis favoritas. Son pequeñas, se pueden acoplar shields fácilmente y además, como veremos a continuación, con la placa Lolin se consiguen unos consumos en modo ESP8266 deep sleep muy buenos.

Sin tener en cuenta los módulos ESP-01 y ESP-12, son la mejor elección que puedes hacer.

He probado 3 placas de diferentes marcas: Wavgat, Lolin y otra sin marca que he llamado clon. Muy original :)

Los resultados obtenidos son los siguientes.

Consumo modo activo Wemos D1 Mini

Todas las placas Wemos D1 Mini tienen un consumo medio parecido sin embargo, se pueden apreciar picos de consumo tanto en la placa Wavgat como en la clon.

Esto puede ser debido al propio ruido en la medición y no suponen un consumo excesivo.

Estos son los datos obtenidos de la gráfica anterior.

Wemos D1 Mini clonWemos D1 Mini LolinWemos D1 Mini Wavgat
Mínimo65,26 mA63,65 mA66,87 mA
Máximo88,62 mA66,06 mA94,26 mA
Media69,53 mA65,04 mA69,47 mA

Consumo modo ESP8266 deep sleep Wemos D1 Mini

Las grandes diferencias de estas tres placas las encontramos en el modo ESP8266 deep sleep ya que se consiguen consumos algo dispares.

Esto es debido a que la placa Wemos D1 Mini clon y Wavgat utilizan el regulador de tensión 4A2D. La placa Lolin utiliza un regulador S2RH que parece ser un clon del LP2983.

De aquí la diferencia de consumo. Incluso puede que la placa Lolin se salte el regulador y alimente directamente el ESP8266 a través del pin 3V3.

Los datos obtenidos son los siguientes.

Wemos D1 Mini clonWemos D1 Mini LolinWemos D1 Mini Wavgat
Mínimo144 µA75 µA206 µA
Máximo147 µA80 µA214 µA
Media156 µA78 µA209 µA

Conclusiones ESP8266 deep sleep

He vivido obsesionado con los consumos del ESP8266 durante mucho tiempo. Siempre he sido un fiel defensor de poder utilizar los módulos ESP-01 y ESP-12 y las placas Wemos D1 Mini y NodeMCU con baterías o pilas.

Pero nunca había tenido la posibilidad de saber el consumo real aproximado de cada placa basada en el ESP8266 hasta que he adquirido un Current Ranger.

Una cosa es lo que aparece en la hoja de características técnicas y otra bien diferente la realidad.

El módulo con el que más bajo consumo se ha conseguido ha sido el módulo ESP-12 consiguiendo una media de 18 µA en modo ESP8266 deep sleep y de 66,93 mA en modo activo.

Esto nos permite utilizar el módulo ESP-12 con baterías y conseguir una duración de meses e incluso, si haces un uso extensivo del modo deep sleep, se podría alargar hasta un año.

Todo está en cómo lo programes y los requerimientos de tu proyecto.

Por otro lado, si tu opción es utilizar una placa porque te resulta más sencillo, te recomiendo utilizar una Wemos D1 Mini de la marca Lolin. Con diferencia son las que menos consumen.

En modo ESP8266 deep sleep consume 78 µA y en modo activo 65,04 mA.

Y con esto me despido. Espero te haya gustado el artículo y cualquier duda, pregunta o comentario, lo puedes hacer aquí abajo.

Salir de la versión móvil