Como usar os modos de suspensão do ESP8266 no MicroPython

Cómo usar los modos de suspensión ESP8266 en MicroPython

Las aplicaciones de red consumen mucha energía. Si dichas aplicaciones funcionan con batería, existe el riesgo de que la batería se agote debido a las altas demandas de energía de las funciones de red.

A menudo, la energía también se desperdicia en actividades no esenciales del microcontrolador. Por ejemplo, la alimentación puede permanecer encendida para múltiples periféricos integrados, independientemente de su uso o relevancia en la aplicación. Afortunadamente, las placas de desarrollo Wi-Fi como ESP8266 y ESP32 ofrecen modos de suspensión para ahorrar consumo neto de energía, que se recomiendan en aplicaciones de red.

Esto ahorra energía de la batería para la aplicación en lugar de desperdiciarla en los periféricos del controlador. Aquí discutiremos los modos de suspensión en las placas ESP8266 y ESP32 y exploraremos cómo se pueden usar en MicroPython.

Modos de sueño
En ESP8266, hay tres modos de suspensión:

1. Suspensión del módem. El Wi-Fi se apaga en el modo de suspensión del módem mientras la CPU, el reloj del sistema y el RTC permanecen encendidos. En este estado, la corriente del sustrato consumida por el SoC es de 15 mA.

Si cada baliza transmite el mensaje de indicación de tráfico de entrega (DTIM) a través del módulo Wi-Fi, el consumo de energía será de aproximadamente 16,2 mA. Si cada tres balizas transmiten DTIM, el consumo de energía será de aproximadamente 15,4 mA. Y si el DTIM se transmite cada 10 balizas, el consumo de energía será de aproximadamente 15,2 mA.

Tenga en cuenta que el módulo Wi-Fi transmite el mensaje DTIM cada tres balizas de forma predeterminada.

2. Sueño ligero
La CPU permanece en modo de suspensión suave cuando el Wi-Fi y el reloj del sistema están apagados. El RTC encargado de mantener la fecha y hora permanece activado. En este estado, la corriente del sustrato consumida por el SoC es de 0,4 mA. Si cada baliza transmite el DTIM a través del módulo Wi-Fi, el consumo de energía será de aproximadamente 1,8 mA. Si cada tres balizas transmiten DTIM, el consumo de energía será de aproximadamente 0,9 mA. Y si el DTIM se transmite cada 10 balizas, el consumo de energía será de aproximadamente 0,55 mA.

Nuevamente, el valor DTIM predeterminado en la configuración de red es tres.

3. Sueño profundo
En el modo de suspensión profunda, la CPU, el reloj del sistema y el Wi-Fi se apagan y solo RTC permanece encendido para mantener la fecha y la hora. El controlador permanece en estado inactivo y no se transmite ningún DTIM. Las operaciones normales del controlador se reanudan sólo cuando el controlador "se despierta" del sueño profundo. En este modo, la corriente consumida por el SoC ESP8266 se reduce a 20 uA.

Sólo el ESP8266 ofrece todos los modos de suspensión. De forma predeterminada, MicroPython solo admite modos de suspensión ligera y profunda. Por lo tanto, se requiere un módulo ESP específico para el modo de suspensión del módem.

Si un SoC entra en modo de suspensión profunda, el consumo neto de energía de una placa de conexión puede estar en mA. Los componentes y periféricos integrados (como LED, reguladores de potencia, chips serie USB y otras interfaces) aún pueden consumir una cantidad significativa de energía independientemente del hecho de que el propio SoC esté en un estado inactivo, consumiendo solo unos pocos microamperios de corriente.

Despertando en ESP8266

Dependiendo del puerto, están disponibles diferentes fuentes de activación. Por ejemplo, en ESP8266, solo hay dos fuentes de activación disponibles: temporizador y externa.

En el despertador con temporizador, el RTC incorporado se utiliza para despertar
el SoC entra en suspensión profunda después de un período específico.

Al activarse externamente, el SoC entra en modo de suspensión profunda hasta que se presiona el botón de reinicio. En el ESP8266, el botón de reinicio debe estar conectado a GPIO16 para que la placa se active. En una placa de conexión, es posible que el botón de reinicio ya esté conectado al GPIO16 integrado o requiera una conexión externa.

El ciclo del sueño profundo

El modo de suspensión profunda es útil en aplicaciones de red que funcionan con baterías. Luego, el chip permanece en sueño profundo o inactivo, y solo se despierta periódicamente para realizar las tareas asignadas. Las tareas pueden incluir tomar lecturas de un sensor, enviar los datos del sensor a un servidor a través de un protocolo de IoT (como MQTT o CoAP) y realizar una acción en el sitio basada en las lecturas del sensor o los conocimientos recibidos a través de la red.

Una vez que la aplicación del usuario realiza la tarea, el chip vuelve a entrar en modo de suspensión. Este ciclo de sueño profundo, despertar, realizar tareas integradas/IoT y volver a dormir continúa y sigue.

MicroPython
El módulo de la máquina MicroPython proporciona estas funciones para la administración de energía de las placas compatibles.

machine.lightsleep((time_ms)): pone el puerto en modo de suspensión ligera. Si se especifica el tiempo en milisegundos como argumento, el modo de suspensión suave dura el tiempo máximo especificado. El puerto puede activarse antes del tiempo de espera si una fuente lo activa. Si no se pasan argumentos, el sueño suave dura hasta que lo interrumpe una fuente de vigilia.

machine.deepsleep((time_ms)): pone el puerto en modo de suspensión profunda. Si se especifica el tiempo en milisegundos como argumento, el modo de suspensión profunda dura el tiempo máximo especificado. El puerto puede activarse antes del tiempo de espera si una fuente lo activa. Si no se pasan argumentos, el sueño profundo continúa hasta que lo interrumpe una fuente de vigilia. Despertar del modo de suspensión profunda es lo mismo que un reinicio completo.

machine.wake_reason: este método devuelve la fuente de activación. El valor de retorno puede ser machine.WLAN_WAKE, machine.PIN_WAKE o machine.RTC_WAKE, dependiendo de si la fuente de activación es WLAN, cambio de PIN o RTC. Este método se puede utilizar para registrar el motivo de activación en una variable o imprimir el motivo de activación en la consola.

Sin embargo, la fuente de activación debe configurarse antes de solicitar un sueño ligero o profundo. Además, solo se puede llamar a machine.wake_reason después de solicitar un sueño ligero o profundo.

El módulo de la máquina ofrece otra función útil para la gestión de la energía del puerto. Esto es máquina.idle. Llamar a este método bloquea el reloj de la CPU, lo que hace que el puerto entre en modo de suspensión, donde el puerto se activa cuando se recibe una interrupción.

Modos de suspensión de MicroPython en ESP8266

Se puede acceder al modo de suspensión del ESP8266 utilizando las funciones relacionadas con la energía del módulo de la máquina o las funciones del ESP8266, que están disponibles a través del módulo especial .

Estas funciones solo permiten al usuario colocar el ESP8266 en modo de suspensión ligera o profunda (como se mencionó anteriormente). Pero las funciones específicas del módulo ESP permiten al usuario poner el ESP8266 en modo de suspensión ligero, profundo o módem.

El módulo especial se puede importar a un script MicroPython usando esta declaración: import esp

El módulo especial proporciona estas funciones para poner el ESP8266 en diferentes modos de suspensión...

esp.sleep_type((sleep_type)): establece u obtiene el modo de suspensión ESP8266. Si se llama al método con un argumento, configura el ESP8266 en el modo de suspensión especificado. Si el método se llama sin argumentos, el ESP8266 vuelve a dormir.

Los parámetros se pueden definir utilizando estos argumentos: SLEEP_NONE, SLEEP_MODEM y SLEEP_LIGHT. Si se configura en SLEEP_NONE, el ESP8266 permanece en modo activo o reanuda el modo activo desde el modo de suspensión. Si se configura en SLEEP_MODEM, el ESP8266 se coloca en modo de suspensión del módem. Si se configura en SLEEP_LIGHT, el ESP8266 se pone en modo de suspensión ligera.

esp.deepsleep(time_us=0, /): pone el ESP8266 en suspensión profunda durante un tiempo específico (en microsegundos). Si se especifica un tiempo de suspensión, el RTC incorporado se utilizará como temporizador. Si no se especifica el tiempo como argumento, el ESP8266 entra en modo de suspensión profunda hasta que se produce un despertar externo.

Ya sea que el ESP8266 entre en sueño profundo o ligero usando las funciones relacionadas con la energía del módulo de la máquina o las funciones del módulo especial , el GPIO16 debe estar conectado al botón de reinicio para que funcione el temporizador de despertador. Esto generalmente se hace mediante una conexión de circuito externo en la mayoría de las placas de conexión ESP8266.

Trabajando el temporizador del despertador

Para despertarse con el temporizador, conecte GPIO16 al botón de reinicio ESP8266.

Para detectar el despertar, un LED parpadeará después de que el ESP8266 se despierte de cualquier modo de suspensión. Para que esto funcione, conecte un LED a GPIO2 como se muestra a continuación.

Para poner el ESP8266 en modo de suspensión del módem y luego reactivarlo con un temporizador, use el módulo especial . Este script MicroPython pone el ESP8266 en modo de suspensión del módem y hace parpadear un LED, que está conectado a GPIO2, cada vez que el ESP8266 se activa debido al temporizador.

importar especialmente
Pin de importación de máquina
del tiempo importa dormir
led = Pin (2, Pin.OUT)

def modem_sleep(mseg):
rtc = máquina.RTC
rtc.irq(disparador=rtc.ALARM0, despertar=máquina.DEEPSLEEP)
rtc.alarm(rtc.ALARM0, mseg)
esp.sleep_type(SLEEP_MODEM)

#LED parpadea
valor.led(1)
dormir (1)
valor.led(0)
dormir (1)

# espere 5 segundos para que pueda activar el ESP para establecer comunicación en serie más tarde
# debes eliminar esta línea de suspensión en tu script final
dormir (5)
print('Estoy despierto, pero me voy a dormir con el módem')

#dormir durante 10 segundos (10.000 milisegundos)
módem_sleep(10000)

Para poner el ESP8266 en modo de suspensión suave y luego despertarlo del temporizador, use el módulo especial o las funciones relacionadas con la energía del módulo de la máquina. Este script MicroPython pone el ESP8266 en un modo de suspensión suave usando el módulo especial y hace parpadear un LED, que está conectado a GPIO2, cada vez que el ESP8266 se despierta debido al temporizador.

importar especialmente
Pin de importación de máquina
del tiempo importa dormir
led = Pin (2, Pin.OUT)
def light_sleep(mseg):
rtc = máquina.RTC
rtc.irq(disparador=rtc.ALARM0, despertar=máquina.DEEPSLEEP)
rtc.alarm(rtc.ALARM0, mseg)
esp.sleep_type(SLEEP_LIGHT)

#LED parpadea
valor.led(1)
dormir (1)
valor.led(0)
dormir (1)

# espere 5 segundos para que pueda activar el ESP para establecer comunicación en serie más tarde
# debes eliminar esta línea de suspensión en tu script final
dormir (5)

print('Estoy despierto, pero voy a dormir un poco')

#dormir durante 10 segundos (10.000 milisegundos)
sueño_luz(10000)

Este script MicroPython pone el ESP8266 en modo de suspensión suave usando el módulo de la máquina, haciendo parpadear un LED conectado a GPIO2 cada vez que el ESP8266 se activa debido al temporizador.

máquina de importación
Pin de importación de máquina
del tiempo importa dormir
led = Pin (2, Pin.OUT)
def light_sleep(mseg):
rtc = máquina.RTC
rtc.irq(disparador=rtc.ALARM0, despertar=máquina.DEEPSLEEP)
rtc.alarm(rtc.ALARM0, mseg)
máquina.sueño ligero

#LED parpadea
valor.led(1)
dormir (1)
valor.led(0)
dormir (1)

# espere 5 segundos para que pueda activar el ESP para establecer comunicación en serie más tarde
# debes eliminar esta línea de suspensión en tu script final
dormir (5)

print('Estoy despierto, pero voy a dormir un poco')

#dormir durante 10 segundos (10.000 milisegundos)
sueño_luz(10000)

Para poner el ESP8266 en modo de suspensión profunda y luego despertarlo del temporizador, use el módulo especial o las funciones relacionadas con la energía del módulo de la máquina. Este script MicroPython pone el ESP8266 en modo de suspensión profunda usando el módulo especial y hace parpadear un LED, que está conectado a GPIO2 cada vez que el ESP8266 se despierta debido al temporizador.

importar especialmente
Pin de importación de máquina
del tiempo importa dormir
led = Pin (2, Pin.OUT)
def sueño_profundo(mseg):
rtc = máquina.RTC
rtc.irq(disparador=rtc.ALARM0, despertar=máquina.DEEPSLEEP)
rtc.alarm(rtc.ALARM0, mseg)
esp.sueño profundo

#LED parpadea
valor.led(1)
dormir (1)
valor.led(0)
dormir (1)

# espere 5 segundos para que pueda activar el ESP para establecer comunicación en serie más tarde
# debes eliminar esta línea de suspensión en tu script final
dormir (5)

print('Estoy despierto, pero voy a dormir profundamente')

#dormir durante 10 segundos (10.000 milisegundos)
sueño_profundo(10000)

Este script MicroPython pone el ESP8266 en modo de suspensión profunda usando el módulo de la máquina y hace parpadear un LED, conectado a GPIO2, cada vez que el ESP8266 se despierta debido al temporizador.

máquina de importación
Pin de importación de máquina
del tiempo importa dormir
led = Pin (2, Pin.OUT)
def sueño_profundo(mseg):
rtc = máquina.RTC
rtc.irq(disparador=rtc.ALARM0, despertar=máquina.DEEPSLEEP)
rtc.alarm(rtc.ALARM0, mseg)
máquina.sueñoprofundo

#LED parpadea
valor.led(1)
dormir (1)
valor.led(0)
dormir (1)

# espere 5 segundos para que pueda activar el ESP para establecer comunicación en serie más tarde
# debes eliminar esta línea de suspensión en tu script final
dormir (5)

print('Estoy despierto, pero voy a dormir profundamente')

#dormir durante 10 segundos (10.000 milisegundos)
sueño_profundo(10000)

Trabajando en el despertar externo

En ESP8266, el despertador externo se activa cada vez que se presiona el botón de reinicio. Este despertar sólo es útil cuando el ESP8266 está en modo de suspensión profunda. El botón de reinicio en el tablero de ruptura se puede presionar para activación externa o se puede conectar un botón pull-up al pin de reinicio.

Para poner el ESP8266 en modo de suspensión profunda y luego despertarlo a través de un dispositivo externo, use el módulo especial o las funciones relacionadas con la energía del módulo de la máquina. Este script MicroPython pone el ESP8266 en modo de suspensión profunda usando el módulo especial y hace parpadear un LED, conectado a GPIO2, cada vez que el ESP8266 se despierta de un reinicio externo.

importar especialmente
Pin de importación de máquina
del tiempo importa dormir
led = Pin (2, Pin.OUT)

#LED parpadea
valor.led(1)
dormir (1)
valor.led(0)
dormir (1)

# espere 5 segundos para que pueda activar el ESP para establecer comunicación en serie más tarde
# debes eliminar esta línea de suspensión en tu script final
dormir (5)
print('Estoy despierto, pero voy a dormir profundamente')
dormir (1)
esp.sueño profundo

Este script MicroPython pone el ESP8266 en modo de suspensión profunda usando el módulo de la máquina y hace parpadear un LED, conectado a GPIO2, cada vez que el ESP8266 se despierta de un reinicio externo.

máquina de importación
Pin de importación de máquina
del tiempo importa dormir
led = Pin (2, Pin.OUT)

#LED parpadea
valor.led(1)
dormir (1)
valor.led(0)
dormir (1)

# espere 5 segundos para que pueda activar el ESP para establecer comunicación en serie más tarde
# debes eliminar esta línea de suspensión en tu script final
dormir (5)
print('Estoy despierto, pero voy a dormir profundamente')
dormir (1)
máquina.sueñoprofundo

Para un reinicio externo, los métodos esp.deepsleep o machine.deepsleep se llaman sin argumentos. Estas llamadas colocan al ESP8266 en un sueño profundo hasta que se detecta un despertar externo mediante el botón de reinicio. Se debe levantar el botón conectado al botón de reinicio del despertador externo.

Aprenda a utilizar los modos de suspensión y activación de ESP32 en MicroPython aquí .

Conteúdo Relacionado

¿Cuál es el papel de los sensores automotrices en los vehículos modernos?
En cada vehículo hay una red de sensores integrada...
Cómo elegir un controlador de bicicleta eléctrica
El controlador del motor es uno de los componentes...
Cómo solucionar problemas comunes de ESP32-CAM
ESP32-CAM es un módulo de cámara compacto que combina...
Una guía de estándares USB desde 1.0 hasta USB4
La evolución de los estándares USB ha sido fundamental...
Schurter mejora la serie de selectores de voltaje con revestimiento de plata
SCHURTER anuncia una mejora de su popular serie SWZ...
Los versátiles tubos de luz rígidos de 3 mm de VCC, que se ofrecen en versión de montaje inverso
Visual Communications Company (VCC) ha anunciado sus nuevos tubos...
A interface serial PCI fornece conectividade confiável em ambientes extremos
A Sealevel Systems anuncia o lançamento da Interface Serial...
STMicroelectronics expande portfólio de conversão de energia com diodos Trench Schottky de 100 V
A STMicroelectronics introduziu Diodos retificadores Schottky de trincheira de...
O que são Sistemas Globais de Navegação por Satélite (GNSS) e como são usados?
Determinar uma localização precisa é necessário em várias indústrias...
O conversor GaN de 50 W da STMicroelectronics permite projetos de energia de alta eficiência
O novo VIPerGaN50 da STMicroelectronics simplifica a construção de...
Samsung e Red Hat farão parceria em software de memória de próxima geração
A Samsung Electronics, fornecedora de tecnologia de memória avançada,...
Primeiro MPU single-core com interface de câmera MIPI CSI-2 e áudio
O mercado embarcado tem uma necessidade de soluções de...
Decodificación fluida en motor de inducción para mejor rendimiento.
Probablemente se haya encontrado con el término " resistencia...
Comprensión de los aisladores de soporte en sistemas eléctricos
Probablemente tenga un aislante de soporte si ha notado...
Explore Stay Insulator: seguridad, instalación y mantenimiento
Probablemente haya visto un aislante colocado en postes de...
Más seguridad y eficiencia con el aislador de grilletes
Probablemente hayas visto aisladores de grillete entronizados en postes...
Descubra el poder de los relés de enclavamiento para lograr eficiencia energética y más
Probablemente hayas experimentado situaciones en las que controlar un...
Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.