¿Te gustaría aprender más sobre MicroPython y cómo utilizarlo en el ESP32? En este artículo, exploraremos las fuentes de activación y la suspensión profunda en este microcontrolador de manera detallada. Sigue leyendo para descubrir cómo aprovechar al máximo las capacidades de MicroPython en el ESP32.
Este tutorial muestra cómo poner el ESP32 en modo de suspensión profunda y reactivarlo usando varias fuentes de activación con el firmware MicroPython. Cubrimos el despertar con temporizador y el despertar externo.
El ESP32 también se puede despertar del sueño profundo usando los pines táctiles definiendo un umbral. Aunque esta característica ya está implementada en MicroPython, no funciona correctamente al momento de escribir este tutorial. Actualizaremos este artículo una vez que funcione.
El sueño profundo con el ESP8266 funciona de manera ligeramente diferente que con el ESP32. Por lo tanto, hemos creado un artículo dedicado al sueño profundo con ESP8266 usando MicroPython.
Si tiene un ESP8266, le recomendamos leer nuestra Guía de fuentes de activación y suspensión profunda de MicroPython ESP8266.
requisitos
Para seguir este tutorial, debe tener instalado el firmware MicroPython en sus placas ESP32 o ESP8266. También necesitarás un IDE para escribir el código y subirlo a tu placa. Recomendamos utilizar Thonny IDE o uPyCraft IDE:
- IDE de Thonny:
- Instalación y primeros pasos con Thonny IDE
- Actualización del firmware MicroPython con esptool.py
- IDE de UpyCraft:
- Comenzando con uPyCraft IDE
- Instale uPyCraft IDE (Windows, Mac OS X, Linux)
- Flashear/cargar firmware MicroPython a ESP32 y ESP8266
Obtenga más información sobre MicroPython: Programación de MicroPython con ESP32 y ESP8266 eBook
Introducción al sueño profundo
No es ideal hacer funcionar su ESP32/ESP8266 en modo activo con baterías ya que la energía de las baterías se agota muy rápidamente.
Poner su ESP32 en modo de suspensión profunda reducirá el consumo de energía y hará que sus baterías duren más. Cuando el ESP32 está en modo de suspensión profunda, las actividades que consumen más energía durante el funcionamiento se pausan, pero queda suficiente actividad para despertar el procesador cuando sucede algo interesante.
En modo de suspensión profunda, el ESP32 consume corriente en el rango de μA. Con una placa hecha a medida y cuidadosamente diseñada se puede conseguir un consumo mínimo de tan solo 5 μA. Sin embargo, si utiliza una placa de desarrollo ESP32 con todas las funciones con un programador incorporado, LED incorporados, etc. (como la placa ESP32 DOIT), aunque no puede lograr un consumo de energía tan bajo, aún puede ahorrar energía.
Fuentes de despertar
Después de poner el ESP32 en modo de suspensión profunda, hay varias formas de reactivarlo:
- Puedes utilizar el… Temporizador: activa el ESP32 después de períodos de tiempo predefinidos.
- tu puedes uno despertar externo: Esto significa que el ESP32 se puede activar cuando cambia el estado de un pin.
- Puedes utilizar el… Alfileres táctiles: implementado, pero no funcionaba como se esperaba al momento de escribir este artículo, por lo que no lo abordaremos en este momento;
- Puede utilizar el coprocesador ULP para activarse: aún no hemos probado esta función.
Temporizador de despertador
El ESP32 puede entrar en modo de suspensión profunda y luego despertarse en momentos predefinidos. Esta característica es particularmente útil cuando se ejecutan proyectos que requieren marcas de tiempo o tareas diarias mientras se mantiene bajo el consumo de energía.
Para poner el ESP32 en modo de suspensión profunda durante un número específico de segundos, todo lo que necesita hacer es presionar el botón sueño profundo() función de la máquina Módulo. Esta función acepta como argumentos el tiempo de sueño en milisegundos de la siguiente manera:
machine.deepsleep(sleep_time_ms)
Veamos un ejemplo sencillo para ver cómo funciona. En el código siguiente, el ESP32 está en modo de suspensión profunda durante 10 segundos, luego se despierta, parpadea un LED y vuelve al modo de suspensión.
# Complete project details at https://RandomNerdTutorials.com/micropython-programming-with-esp32-and-esp8266/
from machine import deepsleep
from machine import Pin
from time import sleep
led = Pin (2, Pin.OUT)
#blink LED
led.value(1)
sleep(1)
led.value(0)
sleep(1)
# wait 5 seconds so that you can catch the ESP awake to establish a serial communication later
# you should remove this sleep line in your final script
sleep(5)
print('Im awake, but Im going to sleep')
#sleep for 10 seconds (10000 milliseconds)
deepsleep(10000)
Cómo funciona el código
Primero importe las bibliotecas requeridas:
import machine
from machine import Pin
from time import sleep
Crear un… Bolígrafo Objeto que se refiere a GPIO2 llamado CONDUJO. Esto se refiere al LED integrado.
led = Pin (2, Pin.OUT)
Los siguientes comandos harán que el LED parpadee.
led.value(1)
sleep(1)
led.value(0)
sleep(1)
En este caso, estamos haciendo parpadear un LED con fines de demostración, pero la idea es agregar su código principal en esta sección del script.
Antes de ir a dormir le añadimos un retraso de 5 segundos e imprimimos un mensaje para indicar que se va a dormir.
sleep(5)
print('Im awake, but Im going to sleep')
Es importante incluir un retraso de 5 segundos antes de dormir cuando desarrollamos los guiones. Si desea cargar un código nuevo al tablero, debe estar activo. Entonces, a menos que tenga un retraso, será difícil activarlo para cargar código nuevo más tarde. Una vez que tengas el código final, podrás eliminar este retraso.
Finalmente, ponga el ESP32 en modo de suspensión profunda durante 10 segundos (10.000 milisegundos).
machine.deepsleep(10000)
Después de 10 segundos, el ESP32 se activará y ejecutará el código desde el principio, similar a cuando presiona el botón EN/RST.
demostración
Copie el código proporcionado en el principal.py Archivo de tu ESP32. Cargue el nuevo código y presione el botón EN/RST después de cargarlo.
El ESP32 debería hacer parpadear el LED integrado e imprimir un mensaje. Luego se va a dormir. Esto se repite una y otra vez.
Si no sabes cómo cargar el script, sigue este tutorial si estás usando Thonny IDE o este si estás usando uPyCraft IDE.
despertar externo
El ESP32 también se puede despertar del modo de suspensión cuando cambia el estado de un pin. Hay dos formas de activar el ESP32 externamente: ext0 Y ext1.
En modo ext0 puedes usar un GPIO como fuente de activación. En el modo ext1, puede configurar varios GPIO como fuentes de activación al mismo tiempo.
Solo los GPIO RTC se pueden utilizar como fuente de activación. Los GPIO de RTC están resaltados con un rectángulo naranja en el siguiente diagrama.
Obtenga más información sobre los GPIO ESP32: Referencia de distribución de pines ESP32: ¿Qué pines GPIO debería utilizar?
Despertador externo – ext0
Para ilustrar cómo utilizar la llamada de alarma externa ext0, utilizaremos un pulsador como fuente de alarma. El ESP32 se activará cuando presione el botón.
Para este ejemplo necesita los siguientes componentes:
- ESP32 (leer Las mejores placas de desarrollo ESP32)
- Presionar el botón
- resistencia de 10k ohmios
- tablero de circuitos
- Cables de puente
Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!
Representación esquemática
Conecte el circuito siguiendo el siguiente esquema. En este ejemplo utilizamos GPIO14 para activar el ESP32, pero puedes usar cualquier otro RTC GPIO.
guion
El siguiente script muestra cómo funciona ext0: Utiliza un GPIO como fuente de activación externa.
# Complete project details at https://RandomNerdTutorials.com/micropython-programming-with-esp32-and-esp8266/
import esp32
from machine import Pin
from machine import deepsleep
from time import sleep
wake1 = Pin(14, mode = Pin.IN)
#level parameter can be: esp32.WAKEUP_ANY_HIGH or esp32.WAKEUP_ALL_LOW
esp32.wake_on_ext0(pin = wake1, level = esp32.WAKEUP_ANY_HIGH)
#your main code goes here to perform a task
print('Im awake. Going to sleep in 10 seconds')
sleep(10)
print('Going to sleep now')
deepsleep()
Así es como funciona el código
Primero necesita importar los módulos requeridos. Tienes que esp32 Módulo que contiene los métodos para establecer un pin como fuente de activación.
Después de importar los módulos necesarios, defina un pin de activación. En este caso utilizamos GPIO14 y lo llamamos guardia1Este GPIO debe configurarse como entrada (Enchufar).
wake1 = Pin(14, mode = Pin.IN)
Luego configure ext0 como fuente de activación mediante wake_on_ext0() Método de la siguiente manera:
esp32.wake_on_ext0(pin = wake1, level = esp32.WAKEUP_ANY_HIGH)
El wake_on_ext0() El método acepta el pin y el nivel como argumentos:
- Bolígrafo: un objeto de tipo Bolígrafo (el GPIO que actúa como fuente de activación)
- nivel: define el estado del GPIO que activa el ESP32. El nivel puede ser uno de los siguientes parámetros:
- DESPERTAR_ANY_HIGH
- DESPERTAR_ALL_LOW
En este caso utilizamos el DESPERTAR_ANY_HIGH Método que activa el ESP32 cuando el GPIO pasa a nivel ALTO.
Su código principal para ejecutar una tarea debe aparecer después de definir la fuente de activación y justo antes de dormir.
Agregamos un retraso de 10 segundos antes de ir a dormir. Para poner el ESP32 en sueño profundo, solo necesita sueño profundo() Método de la siguiente manera:
machine.deepsleep()
demostración
Sube el código al ESP32. principal.py Archivo. Presione el botón EN/RESET para ejecutar el código. El ESP32 debería irse a dormir.
Ahora puedes presionar el botón para despertarlo del sueño profundo.
Activación externa – ext1
La activación externa ext1 funciona de manera muy similar a ext0, pero le permite especificar más de un GPIO como fuente de activación. Para demostrar cómo funciona, usaremos dos botones conectados a diferentes GPIO.
Para este ejemplo necesita los siguientes componentes:
- ESP32 (leer Las mejores placas de desarrollo ESP32)
- 2x Presionar el botón
- 2x resistencia de 10k ohmios
- tablero de circuitos
- Cables de puente
Representación esquemática
Conecte el circuito siguiendo el siguiente diagrama de cableado.
En este caso utilizamos GPIO14 Y GPIO12. Puede utilizar cualquier otro GPIO adecuado, pero deben ser RTC GPIO; de lo contrario, este método no funcionará.
guion
El siguiente script muestra cómo funciona ext1: Utiliza dos GPIO como fuente de activación externa, pero puedes usar más si es necesario.
# Complete project details at https://RandomNerdTutorials.com/micropython-programming-with-esp32-and-esp8266/
import esp32
from machine import deepsleep
from machine import Pin
from time import sleep
wake1 = Pin(14, mode = Pin.IN)
wake2 = Pin(12, mode = Pin.IN)
#level parameter can be: esp32.WAKEUP_ANY_HIGH or esp32.WAKEUP_ALL_LOW
esp32.wake_on_ext1(pins = (wake1, wake2), level = esp32.WAKEUP_ANY_HIGH)
#your main code goes here to perform a task
print('Im awake. Going to sleep in 10 seconds')
sleep(10)
print('Going to sleep now')
deepsleep()
Así es como funciona el código
El código es similar al ejemplo ext0 pero usa el despertar_on_ext1() método en su lugar.
esp32.wake_on_ext1(pins = (wake1, wake2), level = esp32.WAKEUP_ANY_HIGH)
El despertar_on_ext1() El método acepta los pines y el nivel como argumentos:
- patas: una tupla o lista de objetos de tipo Bolígrafo (los GPIO que actúan como fuente de activación)
- nivel: define el estado de los GPIO que activan el ESP32. El nivel puede ser uno de los siguientes parámetros:
- DESPERTAR_ANY_HIGH
- DESPERTAR_ALL_LOW
Después de definir la fuente de activación, puede poner el ESP32 en modo de suspensión profunda:
machine.deepsleep()
Envolver
Esperamos que este tutorial sobre el sueño profundo con ESP32 usando MicroPython le haya resultado útil. Hemos cubierto el despertador con temporizador y el despertador externo. También existe la opción de activar el ESP32 usando los pines táctiles. Aunque esto ya está disponible en el último firmware de MicroPython, no funciona como se esperaba, por lo que no lo hemos incluido en el tutorial. Mientras tanto, puedes usar ESP32 Touch Wake Up con Arduino IDE.
Si desea obtener más información sobre la programación de las placas ESP32 y ESP8266 con MicroPython, consulte nuestro libro electrónico: Programación MicroPython con ESP32 y ESP8266.
Tenemos otros tutoriales sobre el sueño profundo que podrían interesarte:
- Registrador de datos de estación meteorológica de bajo consumo (MicroPython)
- Fuentes de activación y suspensión profunda ESP32 (Arduino IDE)
- ESP8266 Sueño profundo (Arduino IDE)
- Fuentes de activación y suspensión profunda ESP8266 (MicroPython)
Gracias por leer.
MicroPython: Fuentes de activación y suspensión profunda ESP32
Preguntas frecuentes
- ¿Qué es la suspensión profunda en ESP32?
- ¿Cómo despertar el ESP32 de la suspensión profunda?
- ¿Cuál es la diferencia entre la activación de ext0 y ext1?
- ¿Cómo usar la activación externa en ESP32?
La suspensión profunda en ESP32 es un modo de bajo consumo de energía que ayuda a prolongar la duración de la batería al reducir el consumo de energía del dispositivo. Al poner el ESP32 en modo de suspensión profunda, se detienen las actividades que consumen más energía, pero se mantienen en funcionamiento con suficiente actividad para despertar el procesador cuando sucede algo interesante.
Existen varias formas de despertar el ESP32 de la suspensión profunda, como el temporizador, la activación externa, los pines táctiles y el coprocesador ULP. Cada método tiene sus propias ventajas y aplicaciones específicas.
La activación de ext0 en ESP32 permite usar un solo GPIO como fuente de activación, mientras que la activación de ext1 permite configurar múltiples GPIO como fuente de activación al mismo tiempo. Esto brinda mayor flexibilidad en el diseño de aplicaciones que requieren activación externa.
Para utilizar la activación externa en ESP32, es necesario conectar un pin GPIO a una fuente de activación, como un pulsador. Luego, se debe configurar el pin GPIO apropiadamente y utilizar los métodos adecuados en el código de MicroPython para activar el dispositivo cuando se produzca un cambio en el estado del pin.
Para más información detallada sobre la activación y la suspensión profunda en ESP32 usando MicroPython firmware, puedes revisar nuestro tutorial completo sobre programación con MicroPython en ESP32 y ESP8266.
Para obtener más tutoriales y recursos relacionados con la suspensión profunda en ESP32 y ESP8266, te recomendamos revisar nuestro eBook: Programación con MicroPython en ESP32 y ESP8266.
¡Gracias por compartir este artículo! Me ayudó a resolver algunas dudas que tenía sobre cómo gestionar la activación y suspensión profunda en ESP32 con MicroPython. ¡Muy útil!
Interesante artículo, muy útil para entender mejor cómo funcionan las fuentes de activación y suspensión profunda en ESP32. ¡Gracias por compartir!
¡Me encantó este artículo! Me ayudó a comprender mejor cómo gestionar la activación y suspensión profunda en ESP32 con MicroPython. ¡Muy informativo! ¡Gracias por publicarlo!