Hoy vamos a ver cómo enviar datos (específicamente temperatura y humedad) recogidos del sensor DHT22 a Adafruit.
Lo que usaremos para enviar los datos será la tarjeta NodeMCU ESP8266, aunque el código explicado aquí funciona para muchas más tarjetas.
Librerías necesarias
Te recomiendo usar VSCode con PlatformIO para programar la tarjeta. Mostraré la guía para instalar las librerías desde PlatformIO, pero si usas el IDE de Arduino puedes encontrarla por el mismo nombre.
Vamos a leer la temperatura con el DHT22, así que por favor mira este post en donde se indica cómo instalar las librerías y descargar el encabezado faltante, no es muy largo.
También necesitamos las librerías de Adafruit.
Busca adafruit communication e instala Adafruit IO Arduino.
Busca adafruit mqtt e instala Adafruit MQTT Library.
Finalmente busca ArduinoHttpClient e instala ArduinoHttpClient.
Al final debe verse así:

Configuración de Adafruit
Veremos todo lo que se tiene que hacer en el sitio web de Adafruit.
Dashboard
Vamos a crear un dashboard en donde mostraremos una gráfica de la temperatura y la humedad. Comenzamos creando un escritorio o dashboard.
Ve al sitio de adafruit: https://io.adafruit.com/ (si no tienes cuenta, crea una y todo eso, ¿ya sabes, no?)
Ahora en Dashboards selecciona View All y más tarde en Actions elige Create a new Dashboard:

Ponle un nombre y descripción que quieras. Luego haz click en Create.
Feeds
Necesitamos dos feeds, uno de temperatura y otro de humedad. Más tarde vamos a poner estos feeds en el escritorio creado anteriormente.
Ve a Feeds > View All y en Actions haz click en Create a new Feed:

Elige el nombre que gustes, pero recuérdalo. Yo creé uno con el nombre Temperatura y otro con el nombre Humedad.
Repite el paso para crear el Feed de humedad. No olvides los nombres, pues más tarde los vamos a usar.
Gráfica Line Chart
Como último paso regresa a Dashboards > View All y haz click en el que creamos anteriormente. En la parte derecha selecciona create a new block, en el tipo selecciona Line Chart:

Después de eso, elige los feeds creados anteriormente:

En la siguiente ventana puedes dejar todo intacto o configurarlo a tu gusto. Yo lo he dejado así:

Claves de Adafruit IO
En la parte derecha hay un apartado que dice AIO KEY, al hacer click en el mismo te dará tu usuario y clave. Hay que copiarlas para usarlas más tarde.

Eso es todo lo necesario en la parte de Adafruit.
Código fuente
Veremos ahora la parte para conectarnos a Adafruit, crear los feeds y enviarlos al servidor para graficarlos. Recuerda que vamos a leer el sensor DHT22.
Archivo de configuración config.h
Según los ejemplos de Adafruit podemos colocar nuestra clave en el archivo config.h
, el mío se ve así:
Configuramos dos cosas: las claves de acceso a Adafruit, y las claves para conectar a la red WiFi, pues obviamente necesitamos internet para acceder.
Por cierto, aquí se crea una variable llamada io
, que es de tipo AdafruitIO_Wifi
pasándole nuestras credenciales.
Creación de feeds en código
Dentro del código vamos a crear igualmente los feeds; son de tipo AdafruitIO_Feed
y al instanciarlos deben tener los nombres que te dije que tenías que anotar:
Nota: con el plan gratuito y todo eso, no deberíamos alimentar a los feeds en menos tiempo de 5 segundos. Es decir, hay que enviar datos cada 5 (o más) segundos.
Leer temperatura
Ahora leemos el sensor y enviamos los datos. La parte importante es cuando invocamos al método save
del feed, pasándole el valor.
No olvides lo del sensor DHT22 y el pin D8, que ya expliqué anteriormente pero en resumen si usas el D8 debes desconectar el sensor al subir el código. Eres libre de usar otro pin igualmente.
Poniendo todo junto
El código main.cpp
se ve así:
Demostración
Hay que subir el código al ESP8266 y conectar el sensor como normalmente se hace.

Después puedes ir a la página de Adafruit y ver los resultados en el dashboard, que se irán actualizando cada 5 segundos:

Si quieres verlo en vivo puedes entrar a mi dashboard, solo que no te garantizo que se vea al momento de que leas esto, pues probablemente ya habré desconectado el sensor.
Conclusión
Adafruit es un buen servicio para ver nuestros datos en tiempo real, aunque yo prefiero crear servidores propios, pero es cosa de cada persona.
Vimos cómo leer el sensor, pero realmente podemos hacer muchas cosas más. Por ejemplo, encender y apagar una bombilla usando un relevador… solo que eso es cosa de otro post.