Por Jeremy Cook
ESP32 es un dispositivo increíble: puede procesar información a cientos de megahercios, comunicarse a través de Wi-Fi y Bluetooth y realizar una amplia variedad de tareas mediante sus pines GPIO. Sin embargo, se podría decir que un gran poder conlleva un gran…consumo de energía.
Para ser justos, el consumo de energía de ESP32 es bastante bajo en comparación con dispositivos similares de hace una década. No obstante, para las modernas aplicaciones de IoT, especialmente cuando se trata de una batería, este puede ser un consumo de energía relativo, dado que se consumirán cientos de miliamperios de corriente cuando haya alimentación total.
La buena noticia es que ESP32 también cuenta con un sistema de modos de suspensión e hibernación. Cuando se usan con cuidado, estos modos permiten controlar la necesidad de energía de ESP, o al menos, limitarla a breves ráfagas de actividad.
Modos de suspensión
La suspensión profunda de ESP32 y otros modos de energía se describen en el cuadro a continuación; información extraída de la hoja de datos del producto:
ESP32 tiene cinco modos de baja potencia: ESP32 suspensión de módem, suspensión leve, suspensión profunda, hibernación y apagado. La suspensión de módem y la suspensión profunda tienen varios modos secundarios, con diferentes tasas de consumo de energía según las capacidades de procesamiento activas. La hibernación detiene casi todas las funciones del chip, excepto un RTC para activarlo después de un período de tiempo determinado. El modo de apagado se activa en respuesta a que el pin CHIP_PU se establece con un valor bajo y requiere interacción externa para comenzar a procesar nuevamente.
El resultado de todo esto es que los modos de baja potencia de ESP32 pueden consumir entre 68 mA y 5 µA, o 0,068 A y 0,000005 A respectivamente, sin tener en cuenta el apagado. La desventaja es que cada modo limita la utilidad de ESP32, como se indica a continuación:
Sin tener en cuenta los efectos de la tensión, una pequeña batería recargable de 3,7 V y 850 mAh podría alimentar un ESP32 con suspensión de módem durante aproximadamente 12,5 horas. En suspensión leve, podría durar más de 1000 horas. La hibernación en suspensión profunda de nivel medio ofrece 8500 horas de tiempo de ejecución (es decir, casi un año), mientras que un estado de hibernación teóricamente podría mantenerse durante casi 20 años. Por supuesto, el dispositivo deberá activarse de forma intermitente para resultar útil, pero con una planificación cuidadosa, una configuración de ESP32 puede ofrecer una vida útil extremadamente larga entre las cargas de la batería.
Diferencias entre las placas de desarrollo en suspensión profunda con ESP32
Cuando analizamos el consumo de energía, un módulo o chip ESP32 es solo una parte del panorama electrónico. Para experimentación, probablemente utilizaremos una placa de desarrollo. En diseños electrónicos más desarrollados, se necesitará una disposición personalizada de las partes asociadas para ejecutar un "elemento" de IoT. Si se lleva a cabo una programación cuidadosa, el uso de un ESP32 puede ser muy eficiente desde el punto de vista energético, pero se deberá prestar especial atención a los componentes electrónicos circundantes.
Para ilustrar este punto, conecté una placa de desarrollo Adafruit HUZZAH32 ESP32 a un suministro de energía y un equipo de medición de corriente, junto con una placa DFRobot DFR0478 ESP32. Estos elementos se presentaron en una publicación sobre un reloj de video compuesto con ESP32 y ambos se desempeñaron de manera diferente en lo que podría considerarse un caso de uso bastante especializado. Quizás la eficiencia energética también resultaría ser una característica distintiva entre ellos.
Para la prueba, utilicé un boceto de ejemplo de Arduino ESP32 llamado "TimerWakeUp" modificado que entra en modo de suspensión profunda, se activa, enciende la luz LED integrada y luego, comienza un nuevo ciclo al pasar otra vez al modo de suspensión. Se alimentaron 5,3 V a cada placa y este suministro se convirtió al nivel de tensión necesario de ~3,3 para ESP32. Los resultados de consumo fueron los siguientes:
HUZZAH32: | suspensión = 6,6 mA | activación = 43,2 mA; activación + LED = 44,6 mA |
DFR0478: | suspensión = 0,02 mA | activación = 39,7 mA; activación + LED = 40,0 mA |
Para ser justos, y a fin de obtener una mejor simulación del uso real de IoT, podríamos haber medido la corriente a través del puerto de la batería. No obstante, parece que en este escenario, la placa DFR0478 FireBeetle es mucho más eficiente en modo de suspensión que su contraparte.
Durante la suspensión profunda, HUZZAH32 consume 7000 µA (7 mA) de alimentación de la batería, aproximadamente lo que había medido en mi experimento. Un análisis realizado por Andreas Spiess reveló que DFR0478 consume un valor informado de corriente de 53 µA (0,053 mA) de la batería cuando está en suspensión profunda. Esto es significativamente más de lo que había medido en DFR0478. Sin embargo, en su informe se utiliza una entrada de energía diferente y una versión anterior de la placa (2.0 frente a 4.0, la cual probé). Esta medición también está superando los límites inferiores de lo que puede indicar mi multímetro, lo cual podría ser un factor en su precisión. Como salvedad final, el FireBeetle que probamos usa un módulo WROOM-32D ESP32, mientras que HUZZAH32 utiliza un WROOM-32E.
Dicho todo esto, encontramos órdenes de magnitud de diferencia entre las dos placas probadas, lo que es un buen ejemplo de que los circuitos que admiten un ESP32 pueden tener un efecto significativo en el consumo de energía.
Consumo de energía de ESP32 controlado mediante los modos de suspensión
ESP32 es un dispositivo increíblemente potente que puede requerir una cantidad relativamente grande de energía para funcionar. No obstante, si se lleva a cabo una programación cuidadosa, es posible que uno de estos dispositivos dure semanas, meses o incluso más con la energía de la batería. La clave es comprender las ventajas y desventajas involucradas en el diseño de baja potencia y lo que se puede omitir sin dejar de lograr un rendimiento aceptable.