Existe una plataforma online llamada Thingspeak que permite la representación de datos registrados por dispositivos IoT. Thingspeak sorprende por su facilidad de uso. Apenas necesitamos de unos minutos para darnos de alta en su plataforma y comenzar a subir los datos de temperatura y humedad. Comencemos.
Lo primero que hay que decir es que vamos a usar la versión Free (gratis) de Thingspeak, por lo que tendremos algunas limitaciones, aunque éstas no nos van a restar nada de potencia, pues nuestras necesidades son realmente asequibles. No te preocupes puesto que no hay que dar ningún dato bancario ni nada por el estilo, además usaremos nuestra cuenta educarex.
Vamos con la creación de esa cuenta:
El programa que grabamos en nuestro Wemos es el siguiente:
#include <ESP8266WiFi.h>
#include <ThingSpeak.h>
#include <DHT.h>
const char* ssid = "xxxxxx"; // your network SSID (name)
const char* password = "xxxxxx"; // your network password
unsigned long IDCanal = xxxxxx; //
const char * APIkeyCanal= "xxxxxx"; //
const int TiempoEspera= 900; //seconds 15min=15*60=900seconds
WiFiClient cliente;
DHT dht(D2, DHT11);
void setup() {
dht.begin();
WiFi.mode(WIFI_STA);
ThingSpeak.begin(cliente); // Initialize ThingSpeak
}
void loop() {
if(WiFi.status() != WL_CONNECTED){
while(WiFi.status() != WL_CONNECTED){
WiFi.begin(ssid, password);
delay(5000);
}
}
float h = dht.readHumidity();
float t = dht.readTemperature();
ThingSpeak.setField(1, t);
ThingSpeak.setField(4, h);
ThingSpeak.writeFields(IDCanal, APIkeyCanal);
ESP.deepSleep(TiempoEspera*1000000); //deepSleep funciona en microsegundos
}
Expliquemos un poco en qué consiste este programa:
Librerías:
#include <ESP8266WiFi.h>
#include <ThingSpeak.h>
#include <DHT.h>
Necesitaremos para comunicarnos con Thingspeak dos librerías; la primera ESP8266Wifi.h se instaló en la unidad anterior con la configuración de nuestras placas Wemos. La segunda; Thingspeak.h la instalaremos igual que hicimos con la librería para nuestros sensores DHT, es decir; pinchamos en Programa -> Incluir Librería -> Administrar Bibliotecas y buscamos "thingspeak", instalando la desarrollada por Mathwork.
Declaramos todas las variable que vamos a utilizar:
const char* ssid = "xxxxxx"; // your network SSID (name)
const char* password = "xxxxxx"; // your network password
unsigned long IDCanal = xxxxxx; //
const char * APIkeyCanal= "xxxxxx"; //
const int TiempoEspera= 900; //seconds 15min=15*60=900seconds
WiFiClient cliente;
DHT dht(D2, DHT11);
Las dos primeras variables ssid, password son las credenciales de nuestra Wifi, esto es, nombre y contraseña. Os diré que configurar estas credenciales usando los protocolos de nuestros centros públicos es algo complejo, por lo que os recomiendo hacerlo a través de otro medio.
Las siguientes dos variables; IDCanal y APIKeyCanal son respectivamente el número del canal (sin comillas) y el código entre comillas de la API tal y como os comenté que deberíais guardar una vez habéis configurado Thingspeak.
El TiempoEspera es el tiempo que tenemos nuestro Wemos dormido entre lectura y lectura. Yo le he puesto 900 segundos para que cada 15 minutos nos de una lectura.
Por otro lado, necesitamos dos variables más; cliente y dht que respectivamente se conectarán al canal de Thingspeak y a nuestro sensor DHT.
Setup
void setup() {
dht.begin();
WiFi.mode(WIFI_STA);
ThingSpeak.begin(cliente); // Initialize ThingSpeak
}
En nuestro setup iniciamos el sensor DHT, la conexión Wifi y el canal Thingspeak a través de los comandos mostrados.
Loop
void loop() {
if(WiFi.status() != WL_CONNECTED){
while(WiFi.status() != WL_CONNECTED){
WiFi.begin(ssid, password);
delay(5000);
}
}
float h = dht.readHumidity();
float t = dht.readTemperature();
ThingSpeak.setField(1, t);
ThingSpeak.setField(4, h);
ThingSpeak.writeFields(IDCanal, APIkeyCanal);
ESP.deepSleep(TiempoEspera*1000000); //deepSleep funciona en microsegundos
}
Por último en nuestro loop nos conectamos a la Wifi a través de las credenciales marcadas en las variables ssid y password.
A continuación leemos la temperatura y humedad y las almacenamos en dos variables h y t.
Por último enviamos, en este caso al campo 1 la temperatura y al campo 4 la humedad. Estos campos están en el orden en el que configuramos la cuenta Thingspeak, por lo que coinciden con la temperatura y humedad de la sala 1. Evidentemente esta es la programación del IoT de la sala 1. Para el IoT de la sala dos, estos números serían 2 y 5 y para el IoT de la sala 3 estos números serían el 3 y 6 respectivamente.
El último comando hace que nuestro Wemos entre en suspensión hasta 15 minutos después.
Si hemos configurado todo adecuadamente veremos que nuestros canales Thingspeak comienzan a recibir datos.
NOTA IMPORTANTE: Si usamos Wemos, para poder hacer que se duerma durante 15 minutos, es necesario hacer una conexión (después y sólo después de programar el módulo) entre los pines RST y D0. Esta conexión con un simple cable, hace que se despierte y siga enviando datos.