Icono del sitio Home Assistant Fácil

ThingSpeak y ESP8266

Si tuviera que resumir en una línea que es ThingSpeak te diría que es una plataforma para ahorrarte tiempo. Como todo lo que hay en la nube (o pretender ser). En el 2015 había 7, ahora hay 700 (por poner una magnitud), ahorrar código es ganar tiempo lo que tiene mucho valor, el tiempo es oro.

ThingSpeak es un ejemplo de esas plataformas que se han hecho un hueco en este mundillo. Trasladar la responsabilidad del tratamiento de datos es una opción para dedicarte a lo que te gusta que puede ser programar Arduinos y ESPs.

Pero lo que de verdad sorprende de ThingSpeak es su facilidad de uso, aquí los señores de MathWorks se lo han currado, créeme lo que te voy a decir, se tardan 10 minutos en darse de alta y crear un canal (la caja donde se almacenan los datos) y otros 15 en adecuar un código funcional que ya tengas escrito con datos de sensores.

Este artículo va justamente de eso, que veas la facilidad de uso. He simplificado al máximo la placa a utilizar, el código y los datos a subir a la nube, para centrarnos en ThingSpeak.

Adelante.

¿Qué es ThingSpeak?

ThingSpeak es una plataforma de Análisis de datos para Internet de las Cosas IoT, pero podría analizar cualquier tipo de dato numérico, está en la nube y te permite de una manera muy intuitiva agregar y visualizar datos.

Puedes hacer más cosas, si subes tu propio código, aunque, no va a ser nuestra opción, a no ser que seas un monstruo en MATLAB. Es el lenguaje que hace la magia en ThingSpeak.

Algunas características:

Si te resulta engorroso, construirte un entorno de análisis y visualización de datos, esta es una opción chula, fácil de implementar, lo verás en este artículo.

Si eres un desarrollador y creas páginas web, por ejemplo, es muy fácil añadir estos gráficos en tu página.

Tiene una API para almacenar y recuperar (escribir y leer) datos usando el protocolo HTTP.

Podremos subir datos desde cualquier sensor conectado a un Arduino, ESP32, ESP8266, Raspberry Pi y más, mediante una librería disponible para cada dispositivo y comunicarse con ThingSpeak en la nube, vía conexión HTTP o MQTT.

¿Es seguro este tráfico de datos?

Soporta TLS que permite el cifrado de tu transferencia de información entre dos puntos, tu dispositivo y ThingSpeak.

Una vez los datos estén subidos a ThingSpeak puede acceder a ellos a través de cualquier navegador (recomiendan Google Chrome) y tanto las Cookies, Pop-Ups y JavaScript deben estar activadas y lógicamente una conexión a Internet.

¿Es gratis?

Si y no, para nosotros usuarios domésticos que nos gustaría ver nuestros datos gráficamente sí que lo es, con alguna reserva que te detallo.

Tu opción es la licencia FREE que te permite hasta 3 millones de mensajes/año o 8200 mensajes/día. La siguiente opción personal es la licencia HOME que multiplica por 10 casi todos los conceptos.

Las restricciones que tiene la versión FREE abarca otros puntos importantes:

¿Cómo funciona ThingSpeak?

Parte ThingSpeak

Parte Dispositivo

El resumen: utilizando un Wemos D1 configurado en nuestro IDE Arduino, capturo cada 15/20 segundos los datos de latencia e intensidad wifi y los envío a ThingSpeak gracias a una librería desarrollada por la misma MathWorks. Previamente, te has dado de alta en ThingSpeak y configurado un canal. Una vez se empiece a subir datos, podrás visualizarlos vía la web de ThingSpeak.

Este es nuestro mapa

Ejemplo con ThingSpeak y ESP8266

Ya debes de tener claro la operativa. Si te parece vamos a empezar con la parte del ESP8266 y la extracción de datos que luego subiremos a ThingSpeak.

Ahora sí, empezamos a ensuciarnos las manos.

Paso 1. Comprar el dispositivo Wemos D1 mini

Tengo a mano un LOLIN D1 Mini V3.1.0, lo compré en el Lolin Official Store que tienen en AliExpress, pero ya no tiene ese mismo modelo, tienen el V4.

El V3 se puede encontrar en Amazon y también en AliExpress junto con otros modelos.

Paso 2. Configurar el dispositivo Wemos D1 mini ESP8266 en el IDE Arduino

Si no has trabajado nunca con un ESP8266 tienes que añadir la URL para tarjetas adicionales.

La URL es esta http://arduino.esp8266.com/stable/package_esp8266com_index.json

La añades en el IDE de Arduino, PREFERENCIAS + Gestor de URLs Adicionales de Tarjetas

Queda así:

Seleccionas la tarjeta en el menú de Herramientas + LOLIN(WEMOS) D1 R2 & mini

Abre un Archivo + Nuevo, el código por defecto nos viene bien, solo vas a probar que tienes comunicación con el ESP8266.

Eliges el puerto correcto Herramientas + Puerto + depende de tu sistema operativo /dev/xx para Linux, Mac y COMx para los usuarios de Windows.

Y finalmente subimos el programa a la tarjeta, debe de salirte algo parecido a esto:

Ya tienes conectado correctamente el ESP8266 en tu IDE de Arduino, vamos a añadirle código.

Paso 3. Programación de los datos a subir a ThingSpeak

Acuérdate, 2 tipos de datos que vamos a subir a ThingSpeak.

Intensidad de la señalCalificadorUsos adecuados
-30 dBmExcelenteEsta es la máxima intensidad de señal alcanzable y será apropiada para cualquier situación de uso.
-50 dBmExcelenteEste excelente nivel de señal es adecuado para todos los usos de la red.
65 dBmMuy buenoRecomendado para smartphones y tablets.
-67 dBmMuy buenoEsta intensidad de señal será suficiente para voz sobre IP y streaming de vídeo.
-70 dBmAceptableEste nivel es la intensidad mínima de la señal requerida para asegurar una entrega de paquetes fiable y le permitirá navegar por la web e intercambiar correos electrónicos.
-80 dBmMaloPermite la conectividad básica, pero la entrega de paquetes no es fiable.
-90 dBmMuy maloUn ruido que inhibe la mayoría de las funciones.
-100 dBmPeorRuido total.

Bien, vamos a por el código.

Lo único que debes de tener en cuenta es que la librería ESP8266Ping no viene por defecto en el IDE de Arduino tienes que instalarla.

Muy fácil, vete a su contenedor GitHub y descárgate la librería en un fichero ZIP.

Ten cuidado porque existe otra librería que se llama ESP8266-ping que incluye la librería Pinger.h que no es la que se utiliza aquí.

En la pagina web de GitHub clic en CODE + Download ZIP.

Se descarga este fichero ESP8266Ping-master.zip, puedes renombrarlo ESP8266Ping.zip

Ya solo queda incluirlo en el IDE de Arduino en Programa + Incluir Librería + Añadir biblioteca .ZIP, buscamos el fichero ESP8266Ping.zip con el explorador.

Y si todo te ha ido bien debe de aparecer ejemplos de código con esta librería en Archivo + Ejemplos.

Vamos al código, muy sencillo, lo he simplificado al máximo, simplemente cambiando los parámetros de tu conexión Wifi debe de funcionar. He comentado el código para que no te pierdas.

Subimos el código y aquí puedes ver los resultados desde el Serial Monitor del IDE Arduino.

Perfecto, esta parte está cerrada, ya tenemos a mano los datos que queremos subir a ThingSpeak.

Paso 4. Configurar el canal de ThingSpeak

Vas a crear una cuenta en ThingSpeak y configurar un canal. Su creación es muy simple, en un par de clics y rellenando una serie de datos lo tendremos disponible sin mayor complicación.

Creamos la cuenta en su página web pulsando en el botón Get Started For Free.

Clic en Create one!

Rellenas los datos que se piden

Verás un aviso, simplemente haz clic en la cajita si no tienes cuenta en MATLAB.

Te pide verificar tu correo electrónico y continuamos.

Añadimos una clave a nuestra cuenta, aceptamos el Acuerdo de Servicio (que nunca leemos) y continuamos.

Y termina el alta de la cuenta. Hasta aquí la parte alta en ThingSpeak.

Vamos a crear un canal para nuestros datos, clic en New Channel.

Rellena los datos, aparte del nombre y descripción del canal, lo que te interesa son los 8 campos de datos (Field 1….8). Tú en este caso solo vas a utilizar 2, que son los dos que debes de rellenar y clic en Save Channel (abajo del todo en la página).

Y ya lo tienes, configurar el entorno de ThingSpeak es muy sencillo.

De esta pantalla quedaros con 2 parámetros que son necesarios para subir datos desde tu Wemos D1 mini ESP8266 .

Y por el mismo precio os explico brevemente lo que estás viendo en esta pantalla:

Paso 5. Configurar Wemos ESP8266 para enviar datos a ThingSpeak

Un apunte, he modificado el código para que en vez de utilizar la función delay() utilices como temporizador la función millis(). Esta función nos permite acceder al reloj interno de Wemos D1 devolviendo el valor en milisegundos.

Esta es la actualización del código, el ejemplo vale para temporizar cualquier ejecución de tu programa. En este caso, tienes que modificar la variable intervaloEnvio indicando el tiempo en milisegundos.

Volvamos al tajo, la parte de extracción de datos ya la tienes hecha, también hemos mejorado la parte del intervalo de tiempo, acuérdate que la versión FREE que vamos a utilizar solo nos permite envío de datos cada 15 segundos.

Vamos a añadir la parte de ThingSpeak, lo primero que debes hacer es cargar la librería que ThingSpeak ha desarrollado para IoT.

Para ello solo la tienes que buscar en el Administrador de librerías del IDE de Arduino, clic en Herramientas + Administrador de Bibliotecas, rellenas el cambo de búsqueda y clic en Instalar.

Te cuento como va a ir esto:

Incluimos la librería ThingSpeak en el código.

Indicamos los datos de acceso a tu canal ThingSpeak

Creamos un objeto de la clase WifiClient, objeto que utilizara la clase ThingSpeak para crear la petición HTTP y enviar la info a la nube de ThingSpeak.

Inicializamos la comunicación con ThingSpeak.

Almacenamos los datos a enviar a ThingSpeak.

Acuérdate que hay un máximo de 8 campos de datos en variables de la clase ThingSpeak, como vamos a enviar dos tipos de datos tendremos dos líneas de código similares esta:

Enviamos datos a ThingSpeak con los datos del canal que configuramos.

numeroCanal -> Channel ID

writeAPIKey -> APIKeys

Ahora toca modificar el código, creo que ya te hueles un poco por donde van a ir los tiros ¿te atreves a seguir por tu cuenta?. Es una buena práctica enfrentarse solo a un problema, si no, sigue leyendo.

Aqui lo tienes completo, comentado para que no te pierdas.

La salida del Serial Monitor.

El resultado de todo nuestro trabajo.

Resumen sobre ThinkSpeak

El código tiene recorrido, para ser óptimo debe de tener una mejor gestión de errores, podríamos utilizar la librería Ticker para gestionar el temporizador y por supuesto añadirle sensores de todo tipo.

Pero como has podido ver, no tiene mucho misterio, sobre todo la parte ThingSpeak, pero si profundizas, el tratamiento de los datos que puede hacerse desde ThingSpeak, es brutal. Incluso tiene un conector para que recibas mensajes a tu cuenta de Twitter.

La versión FREE tiene limitaciones que se le pueden dar una vuelta, por ejemplo, tengo 4 ESP8266 con mediciones de temperatura y humedad ¿podría incluirlas en un único canal?

Yo creo que si, no lo he probado, pero si logro sincronizar los relojes de cada uno de los ESP8266 puedo escribir en mi canal cada 15 segundos utilizando números de campo diferentes desde cada ESP8266. Esto se puede hacer con un cliente NTP.

El servicio NTP (Network Time Protocolo) se emplea comúnmente en todos los sistemas informáticos que deban estar sincronizados a nivel horario, en nuestro caso para los Arduinos y ESPxx existe librerías que nos pueden dar este servicio. Si buscas por NTP en el gestor de librerías del IDE Arduino, lo verás.

Es un poco rebuscado, pero seguro que no soy el primero que lo piensa, te cuento: 4 canales por 8 campos por canal, son 32 campos/datos que puedes subir si no eres muy exigente con los intervalos, un ejemplo con 8 campos distribuidos por cada ESP8266:

Cada minuto lanzarías 4 paquetes de datos a ThingSpeak, uno desde cada ESP8266 y separados 15 segundos entre ellos, al mismo Channel ID y Write API Key. Lo dejo como una posible práctica.

Si no, la versión HOME tiene buena pinta, por 75 € anuales tienes 10 canales a tu disposición, todo depende de tus intereses, ahí no puedo entrar.

Gracias por tu tiempo que también es oro.

Gracias a Depositphotos por la cesión de las imágenes.

Salir de la versión móvil