Dormir nuestro controlador esp32 es la forma más fácil de ahorro de energía que podemos implementar en nuestros sensores de IOT.
En mucho desarrollos con arduino o con similares, como el esp32, por ejemplo. La mayoría de las veces no hace falta que esté constantemente enviando datos o procesándolos. Y si además nuestro dispositivo es autónomo la variable de ahorro de energía cobra mayor importancia.
En los sistemas basados en ESP32 tenemos una forma fácil y sencilla de que nuestro dispositivo IOT pueda ahorrar energía. Para ello solo tenemos que añadir el código para indicarle que pase a modo «durmiente» y conectar la salida D0 al pin de reset.
El comando que necesitamos para dormir el ESP32 es el siguiente.
ESP.deepSleep(tiempo_milisegundos, modo reinicio)
Modos de uso para dormir el ESP32
Los modos que podemos usar son:
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.. El consumo típico en este modo es de 15mA.
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.. El consumo típico pasa a ser de unos 0,5 mA.
deep-sleep: 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 (Real Time Clock o RTC) para poder reiniciarla cuando haya finalizado el tiempo de reposo. El consumo típico pasa a ser de unos 10 uA.
Además de dispones de los siguientes modos de reinicio.
WAKE_RF_DEFAULT: Calibración de señal de radio si es necesario
WAKE_RFCAL: Calibración de señal de radio siempre
WAKE_NO_RFCAL: Sin calibración de la señal de radio
WAKE_RF_DISABLED: Deshabilita la señal de radio después del reencendido
El modo en el que más ahorro de energía conseguiremos es en el modo WAKE_RF_DEFAULT, ya que este modo es el que desactiva todos los sistemas no esenciales del ESP32.
En el siguiente enlace, podemos obtener más información de estos modos de uso y reinicio:
La otra condición que tenemos que establecer, es el de conectar el pin D0 con el pin de reset. Ya que una vez que transcurra el tiempo que hemos indicado, este enviara una señal por el pin D0 para activar el reinicio del dispositivo.
Puente entre D0 y reset para el reinicio
Código de ejemplo
Para la gestión podemos usar el siguiente ejemplo:
// Deep sleep mode
if (millis() >= (time_sleep + start_time)) {
// Deep sleep mode, the ESP8266 wakes up by itself when GPIO 16 (D0 in NodeMCU board) is connected to the RESET pin
Serial.print("I'm awake, but I'm going into deep sleep mode for ");
El Internet de la cosas (IoT) a puesto de moda el conectar cualquier cosa a internet. Y nuestros proyectos con arduino no iban a ser menos.
En el mercado, hay multitud de shield que nos dan la posibilidad de añadir conexión wifi a nuestro arduino, pero estas placas tienen un precio demasiado alto, la mayoría de ellos ha un precio elevado. Estos precios de los sistemas wifi contrastan con el precio habitual que suelen tener los demás accesorios para arduino.
Modulo wifi ESP8266
Pero además de los shield tenemos otros método de poder añadir conectividad wifi a nuestro proyectos de arduino. Este es el modulo Wifi ESP8266 nos ofrece conexión wifi de una manera sencilla y barata.
Ademas de la conexión wifi, este modulo permite una configuración muy fácil mediante el uso de comandos AT, dispone a su vez de un pequeño servidor web, que nos facilitara la conexión a él mediante el uso de un simple navegador.
Conectar el modulo wifi ESP8266 con arduino
La conexión del modulo ESP8266 con arduino es muy simple, solo tendremos que conectar los pines RX y TX del modulo, a los pines RC y TX de muestro arduino, si lo preferimos, como es mi caso, los podemos conectar a cualquier otros pines y utilizar la librería de emulación de comunicaciones serie.
Luego tendremos que conectar el pin marcado como RST a la alimentación de 3.3v de muestro arduino. La alimentación del modulo la tendremos que realizar utilizando un fuente de 3.3 v externa.
La salida de voltaje del arduino solo ofrece una alimentación de 50 mAmp, el modulo wifi ESP8266, en el arranque consume un poco más. Para pruebas podemos conectarlo a la salida de 3.3 v del arduino, pero si tienes la posibilidad de contar con una fuente externa, es mejor que lo conectes a ella. Solo queda conectar el pin GND a la fuente externa o a uno de los pines GND del arduino.
Alimentación a través de Arduino del modulo ESP8266
Circuito con alimentación exterior del modulo wifi.
Alimentación del modulo ESP8266 mediante fuente externa
Código para leer los datos desde el puesto serie del módulo ESP8266 y escribirlos al puerto serie de la consola, y viceversa.
#include <SoftwareSerial.h>
// Creamos un puerto serie virtual para la conexión con el modulo Wifi
SoftwareSerial Wifi(3, 2); // Pin RX, Pin TX
void setup()
{
// Creamos la conexion serie para el control desde la consola
Serial.begin(9600);
// Creamos la conexión con el modulo Wifi
Wifi.begin(115200);
}
void loop()
{
// Si hay datos desde el modulo Wifi
if (Wifi.available())
{
// Leemos un caracter
char c = BT1.read() ;
// Y lo escribimos en el puerto de la consola
Serial.print(c);
}
// Si Hay datos disponibles desde la consola
if (Serial.available())
{
// Leemos un caracter
char c = Serial.read();
// Y lo escribimos en el modulo Wifi
Wifi.print(c);
}
}
Es simple código nos va ha permitir comprobar el estado de nuestro modulo ESP8266 y realizar las configuraciones básicas.
Comprobar el funcionamiento del modulo Wifi ESP8266
Al arrancar el modulo, este nos tiene que devolver un mensaje de «Ready»
[Vendedor:www.ai-thinker.com Version:0.9.2.4]
ready
Para verificar que tenemos conexión con el modulo, desde la ventana de consola, escribimos AT, si todo es correcto y tenemos conexión con el modulo. Este nos devolverá un «OK»
[Vendedor:www.ai-thinker.com Version:0.9.2.4]
ready AT OK
Este modulo permite 3 modos de funcionamiento:
Modo 1: Modo estandar, en este modo de funcionamiento, el módulo se comporta como si fuera un router. Modo servidor.
Modo 2: Modo dispositivo / AP, en cambio en este modo, es módulo se comporta como si fuera un dispositivo que se va ha conectar con un router. Modo cliente.
Modo 3: Esta forma de funcionamiento, es la mezcla de los dos anteriores. Funciona lo mismo de cliente como de servidor.
Para ver en que modo esta funcionando nuestro ESP8266, le enviamos el siguiente comando AT.
AT+CWMODE?
+CWMODE:3
OK
En este caso, nos indica que esta funcionando en el modo 3. Si no sabemos muy bien como queremos que funcione nuestro modulo ESP8266, lo podemos dejar en este modo para asegurarnos su correcto funcionamiento.
Para cambiar el modo de funcionamiento, le tendremos que enviar el siguiente comando AT.
AT+CWMODE=3
no change
En este caso, como ya estaba en este modo de funcionamiento, no indica que no se ja producido ninguna cambio. Si el modo de funcionamiento no fuese el ya establecido, no devolvería un «OK».
Conexión con la red wifi con el ESP8266
Mediante otro comando AT, podemos obtener la lista de conexiones wifi al alcance del modulo.
La información que nos aparece es, posición en la lista, el SSID de la conexión wifi, potencia de la señal, y la MAC del router.
Para conectar el modulo ESP8266, a nuestra red wifi, utilizaremos otro comando AT. En este caso, el comando AT+CWJAP=»SSID_nuestra_conexión», «contraseña»
AT+CWJAP="SSID_nuestra_conexión", "contraseña"
OK
Si la conexión se ha realizado con existo, nos devolverá como siempre un «OK».
Obtener información de nuestra conexión con ESP8266
Al establecer conexión, con nuestro router o el servidor de DHCP que tengamos instalado en nuestra, este le tiene que asignar una dirección IP a nuestro modulo. Para conocer la ip asignado a nuestro modulo wifi utilizaremos el siguiente comando AT.
AT*CIFSR
192.168.1.1
192.168.1.201
OK
Este comando AT nos devolverá, en una primera linea, la dirección ip del router, y en una segunda, la dirección ip que se le ha asignado al modulo.
Activar servidor TCP en el modulo wifi ESP8266
Con esto, ya podríamos conectarnos al ESP8266, pero para poder interactuar con el debemos activar el servidor disponible en modulo. Para activar este servidor volvemos a tirar de comando AT.
AT+CIPSERVER=1, 80
OK
Esto activara el servidor TCP en el puerto 80.
Para desactivar el servidor solo tendremos que repetir el mismo comando cambiado el 1 por un 0.
AT+CIPSERVER=0, 512
OK
Una vez que tengamos el servidor TCP activado en el modulo, podremos interactuar con el estableciendo una conexión en la dirección ip asignada y mediante el puerto activado.
Tabla con los comandos AT disponibles en el modulo wifi ESP8266
Comandos
Descripción
Tipo
Configuración / Ejecución
Estado
Prueba
Parámetros y ejemplos
AT
general test
basic
–
–
–
–
AT+RST
restart the module
basic
–
–
–
–
AT+GMR
check firmware version
basic
–
–
–
–
AT+CWMODE
wifi mode
wifi
AT+CWMODE=<mode>
AT+CWMODE?
AT+CWMODE=?
1= Sta, 2= AP, 3=both, Sta is the default mode of router, AP is a normal mode for devices
AT+CWJAP
join the AP
wifi
AT+ CWJAP =<ssid>,< pwd >
AT+ CWJAP?
–
ssid = ssid, pwd = wifi password
AT+CWLAP
list the AP
wifi
AT+CWLAP
AT+CWQAP
quit the AP
wifi
AT+CWQAP
–
AT+CWQAP=?
AT+ CWSAP
set the parameters of AP
wifi
AT+ CWSAP= <ssid>,<pwd>,<chl>, <ecn>
AT+ CWSAP?
ssid, pwd, chl = channel, ecn = encryption; eg. Connect to your router: AT+CWJAP=»www.electrodragon.com»,»helloworld»; and check if connected: AT+CWJAP?
AT+CWLIF
check join devices’ IP
wifi
AT+CWLIF
–
–
AT+ CIPSTATUS
get the connection status
TCP/IP
AT+ CIPSTATUS
<id>,<type>,<addr>,<port>,<tetype>= client or server mode
id = 0-4, type = TCP/UDP, addr = IP address, port= port; eg. Connect to another TCP server, set multiple connection first: AT+CIPMUX=1; connect: AT+CIPSTART=4,»TCP»,»X1.X2.X3.X4″,9999
AT+CIPMODE
set data transmission mode
TCP/IP
AT+CIPMODE=<mode>
AT+CIPSEND?
0 not data mode, 1 data mode; return «Link is builded»
eg. send data: AT+CIPSEND=4,15 and then enter the data.
AT+CIPCLOSE
close TCP or UDP connection
TCP/IP
AT+CIPCLOSE=<id> or AT+CIPCLOSE
AT+CIPCLOSE=?
AT+CIFSR
Get IP address
TCP/IP
AT+CIFSR
AT+ CIFSR=?
AT+ CIPMUX
set mutiple connection
TCP/IP
AT+ CIPMUX=<mode>
AT+ CIPMUX?
0 for single connection 1 for multiple connection
AT+ CIPSERVER
set as server
TCP/IP
AT+ CIPSERVER= <mode>[,<port> ]
mode 0 to close server mode, mode 1 to open; port = port; eg. turn on as a TCP server: AT+CIPSERVER=1,8888, check the self server IP address: AT+CIFSR=?
AT+ CIPSTO
Set the server timeout
AT+CIPSTO=<time>
AT+CIPSTO?
<time>0~28800 in second
+IPD
received data
For Single Connection mode(CIPMUX=0): + IPD, <len>:
For Multi Connection mode(CIPMUX=1): + IPD, <id>, <len>: <data>
Este sitio emplea cookies como ayuda para prestar servicios. Al utilizar este sitio, estás aceptando el uso de cookies.AceptarReject
Privacy & Cookies Policy
Privacy Overview
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.