En el artículo Introducción a thinger.io se indica que es la propia plataforma thinger quien solicita los datos a periodos determinados a nuestro módulo ESP8266 (el módulo actúa en modo esclavo) pero también podemos hacer que sea nuestro módulo quien tenga el control en el envío de los datos a la plataforma para su almacenamiento o visualización.
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.
En nuestro ejemplo vamos programar nuestro módulo para que envíe información a thinger.io cada 10 segundos ya que esta información no vamos a almacenarla, solo la mostraremos en el dashboard.
El esquema del circuito es el mismo que en ejemplos anteriores:
Para que sea el módulo quien controle el envío de información, los widget del dashboard se configuran con el modo de refresco en "Update by Device"
Por último, modificamos nuestro código para enviar la información cada 10 segundos.Esto se realiza utilizando stream()
void loop() {
thing.handle();
thing.stream(thing["sensores"]);
delay(10000);
}
thing.handle();
thing.stream(thing["sensores"]);
delay(10000);
}
El código completo es el siguiente:
#include <ESP8266WiFi.h> // ESP8266
#include <ThingerESP8266.h> // thinger.io
#include "DHT.h" //Sensor DHT
#include <Wire.h> // I2C
#include <Adafruit_BMP085.h> // Sensor BMP180
// thinger.io
// Parámetros del dispositivo ESP8266
#define username "USERNAME"
#define deviceId "DEVICE_ID"
#define deviceCredential "DEVICE_CREDENTIAL"
// Parámetros de nuestra red wifi
#define wifi_ssid "SSID"
#define wifi_password "PASSWORD"
// Parámetros del sensor DHT11
#define dht_pin D7 // GPIO13
#define dht_type DHT22 // Seleccionamos el sensor
DHT dht(dht_pin, dht_type);
// Creamos una instancia de la clase Adafruit_BMP085
Adafruit_BMP085 bmp;
ThingerESP8266 thing(username, deviceId, deviceCredential);
void setup() {
dht.begin(); //Inicializamos el sensor de temperatura
Wire.pins(D2, D3);
Wire.begin(D2, D3); //Inicializa I2C en NodeMCU
bmp.begin(); // Inicializamos el BMP180
thing.add_wifi(wifi_ssid, wifi_password);
thing["sensores"] >> [](pson & out) {
out["dht_humedad"] = dht.readHumidity();
out["dht_temperatura"] = dht.readTemperature();
out["bmp180_presion"] = bmp.readPressure();
out["bmp180_temperatura"] = bmp.readTemperature();
out["bmp180_altitud"] = bmp.readAltitude(101500);
};
}
void loop() {
thing.handle();
thing.stream(thing["sensores"]);
delay(10000);
}
#include <ThingerESP8266.h> // thinger.io
#include "DHT.h" //Sensor DHT
#include <Wire.h> // I2C
#include <Adafruit_BMP085.h> // Sensor BMP180
// thinger.io
// Parámetros del dispositivo ESP8266
#define username "USERNAME"
#define deviceId "DEVICE_ID"
#define deviceCredential "DEVICE_CREDENTIAL"
// Parámetros de nuestra red wifi
#define wifi_ssid "SSID"
#define wifi_password "PASSWORD"
// Parámetros del sensor DHT11
#define dht_pin D7 // GPIO13
#define dht_type DHT22 // Seleccionamos el sensor
DHT dht(dht_pin, dht_type);
// Creamos una instancia de la clase Adafruit_BMP085
Adafruit_BMP085 bmp;
ThingerESP8266 thing(username, deviceId, deviceCredential);
void setup() {
dht.begin(); //Inicializamos el sensor de temperatura
Wire.pins(D2, D3);
Wire.begin(D2, D3); //Inicializa I2C en NodeMCU
bmp.begin(); // Inicializamos el BMP180
thing.add_wifi(wifi_ssid, wifi_password);
thing["sensores"] >> [](pson & out) {
out["dht_humedad"] = dht.readHumidity();
out["dht_temperatura"] = dht.readTemperature();
out["bmp180_presion"] = bmp.readPressure();
out["bmp180_temperatura"] = bmp.readTemperature();
out["bmp180_altitud"] = bmp.readAltitude(101500);
};
}
void loop() {
thing.handle();
thing.stream(thing["sensores"]);
delay(10000);
}
El resultado es el siguiente:
Que sea el propio módulo el que controle el envío de información
puede ser interesante en proyectos donde, por ejemplo, solo se envíe
información en el caso de que se supere cierto umbral en cualquiera de los parámetros medidos.
Fuente:
Enlaces:
- thinger.io
- Introducción a thinger.io
- Estación meteorológica casera
- Almacenamiento de datos en thinger.io
- Streaming resources
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.