INTRODUCCIÓN
Thinger.io permite que el procesador (en función de la programación) sea quien determine cuando se debe enviar la información a la API para almacenarla y/o visualizarla –streaming resources-. En la anterior práctica por el contrario, la información, la solicitábamos desde la propia API.
Con dos ejemplos de uso podemos entender fácilmente la utilidad de este procedimiento:
- La podemos utilizar para controlar cuando un sensor detecta una variación superior a un valor establecido y enviar el dato a la API. Podemos encontrar un ejemplo de este uso en la propia documentación de thinger.io para el IDE de Arduino, en el apartado de streaming resources.
- Es especialmente útil combinada con el modo de ahorro de energía deep sleep de los procesadores ESP, en el que únicamente activamos el procesador cuando necesitamos enviar la información y desactivamos los periodos entre envíos de datos. Podemos entender que es mucho más funcional tener nuestras placas y sensores conectados a unas baterías, que a una fuente de alimentación, que depende de un enchufe y también que reducimos el funcionamiento de la placa al estrictamente necesario, alargaremos la duración de las baterías y por tanto, el tiempo que el dispositivo nos puede prestar servicio.
La limitación que nos ofrece thinger.io, es que solo almacena datos en los data buckets, en periodos superiores a 55 segundos si utilizamos este procedimiento. En el caso de que no almacenemos la información y queramos visualizarla en un dashboard, la recepción es prácticamente instantánea.
Esta práctica es otro paso hacia el Internet of Things, que nos ayuda a afianzar conocimientos y crear dispositivos más eficientes. Más adelante se explicará el potencial de thinger.io y cómo con una única cuenta de usuario, con uno, dos o tres dispositivos conectados con la plataforma, se pueden controlar decenas de dispositivos ESP aislados de una forma mucho más eficiente, desde el punto de vista de las comunicaciones y del consumo de energía. De esta forma podríamos tener el control completo de una vivienda o instalación. |
FUNCIONAMIENTO DEL SKETCH E INICIO DE LA CONFIGURACIÓN
Nuestro sketch funcionará de la siguiente manera:
- Cuando se encienda o reinicie la placa, se realizará una conexión WiFi tipo Station con nuestro router (Acces Point).
- A continuación se realizará la conexión con thinger.io.
- El sensor DHT22 tomará las lecturas de temperatura y humedad. Si alguna de las mediciones es errónea, tomará nuevas medidas (así evitamos subir datos erróneos a la plataforma).
- Una vez que dispongamos de datos correctos, estos se enviarán a la plataforma thinger.io, donde los almacenamos en un data bucket.
La función utilizada en el sketch para enviar los datos es thing.stream(), colocándose entre los paréntesis los datos que se desean enviar.
La función puede ir acompañada de las condiciones que establezcamos para el envío de datos, con la limitación de poder almacenar en cada data bucket datos cada 55 segundos. Como la placa únicamente va a estar encendida durante 10′ por ciclo, en el sketch no se pone ninguna restricción para poder garantizar el correcto funcionamiento.
- A los 10″ de haberse encendido la placa, esta entrará en modo deep sleep.
- A los 2’20» de permanecer en modo deep sleep la placa se reseteara y volverá a iniciarse el ciclo.
Dado que la placa solo permanece encendida 10″ por ciclo, únicamente tiene tiempo para enviar un dato al data bucket por ciclo.
Para iniciar la configuración deberemos acceder a thinger.io y añadir el nuevo dispositivo con el que vamos a enlazar. Seleccionamos Devices > Add Device e introducimos los datos del nuevo dispositivo:
CIRCUITO Y SKETCH
El sketch será el siguiente:
/* Lectura de datos de temperatura y humedad con sensor DHT22 y placa NodeMCU utilizando la función ESP.deepSleep() y monitorización en la plataforma www.thinger.io El tiempo que está el microprocesador en reposo es de 140*10^6 us = 140 segundos. El tiempo que se da para realizar la conexión WiFi, conexión con Thinger.io, realizar las medidas de temperatura y humedad y enviar los datos a la API es de 10000 ms = 10 segundos Este código de ejemplo es de público dominio. Dani No www.esploradores.com */ #include <ESP8266WiFi.h> //Librería de conexión WiFi del módulo ESP8266 #include <ThingerESP8266.h> //Librería de la plataforma thinger.io #include "DHT.h" //Librería de los sensores DHT11, DHT22, etc. // Parámetros del conexión con thinger.io #define usuario "ESPloradores" #define device_Id "DHT22_DEEPSLEEP" #define device_credentials "U2wJoJntju!y" ThingerESP8266 thing(usuario, device_Id, device_credentials); // Parámetros del DHT #define DHTPIN D4 //Pin de conexión - GPIO02 #define DHTTYPE DHT22 //Modelo DHT dht(DHTPIN, DHTTYPE); // Tiempo de Deep Sleep del ESP8266 (en microsegundos) uint32_t SLEEP_TIME = 140e6; // Parámetros de conexión WiFi const char WiFi_ssid[]="JAZZTEL"; //Nombre de red const char WiFi_password[]="fdg9ybIsyeUn"; //Clave de red // Variables globales float h; //Variable de humedad float t; //Variable de temperatura void setup() { // Inicialización del DHT22 dht.begin(); // Inicialización de la WiFi para comunicarse con la API thing.add_wifi(WiFi_ssid, WiFi_password); // Recurso que permite la lectura de datos desde la API thing["DHT22"] >> [](pson& out){ out["Temperatura"] = t; out["Humedad"] = h; }; } void loop() { thing.handle(); float t_NOverificada = dht.readTemperature(); float h_NOverificada = dht.readHumidity(); if (isnan(t_NOverificada) || isnan(h_NOverificada)) { //Verifica que las lecturas son correctas return; } else{ t = t_NOverificada; h = h_NOverificada; thing.stream(thing["DHT22"]); //Si las lecturas son válidas las envía a thing.io } if (millis() >= 10000){ ESP.deepSleep(SLEEP_TIME, WAKE_RF_DEFAULT); } }
No debemos olvidar cambiar los Parámetros de conexión con thinger.io y hacerlos coincidir con los que habíamos utilizado al introducir los datos del nuevo dispositivo en la plataforma.
También tendremos que cambiar los Parámetros de conexión WiFi y hacerlos coincidir con los de nuestra propia red WiFi (nombre de red -SSID- y clave de red).
Una vez hechos los cambios podremos subir el sketch a la placa.
CONEXIÓN Y ALMACENAMIENTO DE DATOS
Con el sketch funcionando, accedemos a thinger.io y seleccionamos Devices para comprobar si se ha iniciado la comunicación. Si se ha iniciado en el dispositivo aparecerá «Connected«, si no se ha iniciado, lo que aparecerá será «Disconnected» y tendremos que revisar los pasos anteriores para ver donde está el fallo.
Teniendo conectado el dispositivo, podremos empezar a registrar los datos en un Data Bucket. Para ello seleccionamos Data Bucket y rellenamos todos los campos.
Debemos recordar que el Bucket ID no debe estar separado por espacios o no podremos grabar el Data Bucket.
MONITORIZACIÓN DE DATOS
ESTIMACIÓN DE LA VIDA ÚTIL DE LAS BATERÍAS
Estimar la vida útil de las baterías es una operación muy sencilla, conociendo los consumos y tiempos de funcionamiento.
Utilizando dos pilas AA de 2.100 mAh de carga, con los siguientes consumos y tiempos de funcionamiento por ciclo:
- En modo deep-sleep 20 μA durante 140 segundos.
- Con el procesador funcionando 80 mA durante 10 segundos.
El consumo por ciclo será de:
0,020 mA*140 s + 80 mA*10 s = 802,8 mAs/ciclo
Y el número de ciclos que funcionará el dispositivo será de:
(2.100 mAh * 3.600 s/h) / 802, 8 mAs/ciclo = 9.417 ciclos
Sabiendo que cada ciclo dura 2,5 minutos, la vida útil será de 16,35 días.
Si enviáramos un dato cada hora, la vida útil del dispositivo sería de 1 año.
31 Comments
Leave your reply.