INTRODUCCIÓN
Thinger.io es una plataforma con librerías de código abierto que permite gestionar multitud de dispositivos (ESP8266, Arduino, Raspberry Pi, Intel Edinson…) a través de Internet.
Esta plataforma responde al concepto de Internet de las cosas (en inglés, Internet of Things, abreviado IoT) que es el concepto que se refiere a la interconexión digital de objetos cotidianos con Internet.
Esta aplicación nos permite:
- Almacenar y visualizar información recibida desde sensores: Podemos almacenar o graficar los datos para poder interpretarlos de una manera más sencilla. La aplicación también nos permite exportarlos para poder disponer de ellos de una manera directa y poder tratarlos con programas de análisis.
- Enviar información o instrucciones a dispositivos: Podemos configurar nuestros dispositivos a través de Internet (p.e. establecer una temperatura a la que se deba encender una caldera… o directamente hacer que una puerta se abra o cierre cuando lo deseemos).
- Interactuar con aplicaciones como IFTTT que permite crear conexiones con diversos servicios en línea: servicios de almacenamiento de archivos en la nube como Google Drive, Dropbox y Skydrive; redes sociales como Facebook, Twitter, YouTube, Tumblr, Instagram y Foursquare; canales RSS de blogs y páginas web; sitios de marcadores sociales, de correos electrónicos, de mensajes de texto, de datos climatológicos y más.
Thinger.io es gratuita para makers con las siguientes limitaciones:
- Permite conectar un máximo de 3 dispositivos.
- No existe limitación en cuanto a los recursos de cada dispositivo, es decir el número de parámetros a medir por los sensores que tenga conectados (más allá de su propia capacidad) o el número de parámetros a enviar a los dispositivos desde la plataforma.
- Los valores de los parámetros recibidos en la plataforma se pueden almacenar hasta en un máximo de 10 campos (Data Buckets) diferentes. Cada Data Bucket puede almacenar datos de múltiples sensores, con una frecuencia máxima de un minuto (un almacenamiento cada minuto). Estos datos son accesibles y actualmente no hay limitaciones ni respecto al tiempo ni al tamaño de los datos.
- Los valores de los sensores se pueden visualizar hasta un máximo de 10 pantallas gráficas de visualización de datos (Dashboards). Estos datos pueden proceder de los Data Buckets o ser lecturas que se empiezan a tomar desde el momento en que abrimos cada Dashboard.
- Se pueden establecer hasta 10 Endpoints que son las «marcas» para interactuar con las aplicaciones de los servicios en línea.
En esta práctica se van a explicar, partiendo de cero, el procedimiento para obtener y subir a la plataforma Thinger.io los datos de temperatura y humedad leídos por un sensor DHT22 conectado con una placa NodeMCU para poder gestionarlos correctamente.
ACCESO A LA PLATAFORMA Y CONFIGURACIÓN DE LA CONEXIÓN DE UN DISPOSITIVO
El primer paso para trabajar con thinger.io es darnos de alta en el Sign up introduciendo los datos de usuario y clave. Después de confirmar nuestra contraseña, al recibir el correo electrónico de confirmación, tendremos nuestra cuenta activa y podremos acceder a la plataforma y empezar a trabajar con ella.
Una vez que entramos, nos encontramos con el panel de control (Console Dashboard), en el que de una manera gráfica, podemos ver el estado de nuestra cuenta (Account Stats), la localización de los dispositivos conectados (Connected Devices Locations) y la cantidad de datos enviados y recibidos (Data Transmission) en las comunicaciones.
Es más sencillo entender el funcionamiento de la Console Dashboard (y por supuesto de thinger.io, en general) de una manera práctica, por lo que procederemos a configurar la conexión de un nuevo dispositivo (Device) con nuestra cuenta de thinger.io.
Para ello, seleccionamos Devices > Add Device e introducimos los datos del nuevo dispositivo:
- Device Id: es el nombre que elegimos para identificar la conexión de thinger.io con el dispositivo.
- Device description: una breve descripción de la conexión.
- Device credentials: la clave de seguridad para establecer la conexión entre thinger.io y el dispositivo.
Una vez realizado este paso, seleccionando Statistics, veremos que en la Console Dashboard ya tenemos habilitada la conexión del dispositivo, aparece que 1 de los 3 posibles dispositivos está en uso (1/3 devices).
CIRCUITO Y SKETCH
Los siguientes pasos son la construcción del circuito, instalar las librerías de thinger.io y el sensor de temperatura y humedad DHT22 en el IDE de Arduino y por último subir el sketch al procesador.
El circuito será el siguiente:
La librería de thinger.io la instalamos en el IDE de Arduino seleccionando Programa > Incluir Librería > Gestionar Librerías . En el Gestor de Librerías buscamos la última versión de la librería thinger.io by Alvaro Luis Bustamante y damos Instalar.
La librería del sensor DHT22 se instala de la mima manera. Seleccionamos Programa > Incluir Librería > Gestionar Librerías . En el Gestor de Liberías buscamos la última versión de la librería DHT sensor library by Adafuit y damos Instalar.
El skech a utilizar es el siguiente:
/* Lectura de datos de temperatura y humedad con sensor DHT22 y placa NodeMCU y monitorización en la plataforma www.thinger.io 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" #define device_credentials "B7#UXE#t8#7f" ThingerESP8266 thing(usuario, device_Id, device_credentials); // Parámetros de conexión WiFi const char WiFi_ssid[]="JAZZTEL"; //Nombre de red const char WiFi_password[]="sDFbsREs4yeqq"; //Clave de red // Parámetros del DHT #define DHTPIN D4 //Pin de conexión - GPIO02 #define DHTTYPE DHT22 //Modelo DHT dht(DHTPIN, DHTTYPE); 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); // Inicialización de la lectura de datos desde la API thing["dht22"] >> [](pson& out){ out["Temperatura"] = dht.readTemperature(); out["Humedad"] = dht.readHumidity(); }; } void loop() { thing.handle(); }
En nuestro sketch debemos 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.
Con este sketch la placa se convierte en esclava de la plataforma thinger.io, debiendo proporcionar datos de humedad y/o temperatura cuando se realice una petición desde la plataforma. Debemos entender que esta condición de esclava solo es relativa a las comunicaciones con thinger.io, es decir, que en la placa podríamos programar otras funciones ajenas a las misma sin ningún problema.
CONEXIÓN Y ALMACENAMIENTO DE DATOS
Una vez que el sketch está 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.
Si pulsamos sobre el dispositivo (en DHT22) tendremos más detalles de la conexión:
Teniendo conectado el dispositivo, ya podemos visualizar los datos que recibimos de temperatura y humedad, pero lo más adecuado es empezar a registrarlos, almacenándolos en un Data Bucket. Si no lo hiciéramos así, los datos se perderían.
Para ello seleccionamos Data Bucket y rellenamos todos los campos. Es importante saber que el Bucket ID que es el nombre de identificación de los datos que estamos almacenando de cara a la aplicación thinger.io, no debe estar separado por espacios o no podremos grabar el Data Bucket.
En el ejemplo anterior almacenamos los datos de humedad y temperatura suministrados por el dispositivo cada minuto (este es el periodo mínimo de almacenamiento).
Una vez realizado este paso, seleccionando Statistics, veremos que en la la Console Dashboard ya tenemos el Data Bucket activo. Aparece que uno de los 10 posibles Data Buckets está en uso (1/10 Data Buckets). También podremos ver en los apartados de Conected Devices Locations, la localización del dispositivo y en Data Transmission el volumen de datos utilizados en la comunicación con la plataforma.
Accedemos al Data Bucket seleccionado Data Buckets > DATOS_DHT22.
En esta pantalla podemos ver un registro de los últimos 100 datos almacenados.
También desde esta pantalla podremos exportar los datos almacenados, ya sea un periodo o la totalidad de datos. Esto es muy interesante porque nos facilita la posibilidad de guardar esos datos (como propietarios) o utilizarlos con programas de análisis.
MONITORIZACIÓN DE DATOS
Para crear una pantalla gráfica donde visualizar los datos seleccionamos Dashboards y rellenamos todos los campos. Debemos saber que el Dashboard ID, que es el nombre de identificación de la pantalla gráfica de cara a la aplicación thinger.io, no debe estar separado por espacios o no podremos grabar el Dashboard.
Una vez realizado este paso, seleccionando Statistics, veremos que en la Console Dashboard ya tenemos la pantalla gráfica activa. Aparece que 1 de los 10 posibles Dashboards está en uso (1/10 Dashboards).
Para acceder a la pantalla gráfica que hemos creado seleccionamos Dashboards > MONITORIZACIÓN_DHT22.
Dentro de la pantalla gráfica podremos insertar los siguientes elementos (Widget Setting) de representación gráfica:
- Time Series Chart: gráfico que une con una spline los valores medidos en un periodo de tiempo.
- Donut Chart: gráfico de donut para representar un único valor (p.e. el último valor medido).
- Progressbar: gráfico de barra para representar un único valor (p.e. el último valor medido).
- Google Map: mapa de Google Maps con la localización del dispositivo.
- Image/MJPEG: imagen desde una URL (p.e. imagenes obtenidas por una videocámara vía Internet).
- Text/Value: un único valor de texto o numérico (p.e. último valor medido).
- Clock: reloj.
Para insertar un Time Series Chart lo seleccionaremos y rellenaremos los diferentes campos:
El gráfico va a representar los datos de temperatura obtenidos desde el Data Bucket durante un periodo de 24 horas. Si todavía no se disponen de datos para completar las 24 horas se representan todos los datos disponibles.
Si utilizáramos datos leídos directamente desde el dispositivo podríamos tomar mediciones y representarlas gráficamente con una frecuencia máxima de un dato por segundo, pero una vez cerrado el Dashboard los datos se borrarían.
Este será el aspecto de la gráfica obtenida:
Y este es el aspecto de un Dashboard más completo:
COMENTARIOS