martes, 27 de diciembre de 2016

Integración de Blynk con la Estación Meteorológica Casera

En este artículo vamos a integrar Blynk con la Estación Meteorológica Casera publicada en el blog hace unos días. El esquema será el mismo pero en vez de utilizar thinger.io para mostrar los resultados utilizaremos Blynk:



Debemos añadir una nueva librería denominada SimpleTimer que se utiliza para  realizar una acción cada x milisengundos. Como no es una librería oficial tendremos que ir a su repositorio en GitHub, descargamos la librería en formato .zip y la incluimos en el IDE de Arduino.


Para ello hacemos click en Programa - Incluir librería - Añadir librería .ZIP y seleccionamos el fichero desscargado. Este se descomprimirá en nuestra carpeta libraries de Arduino automáticamente.


El código completo es el siguiente:

#include <SimpleTimer.h>
#include <ESP8266WiFi.h> // ESP8266
#include <BlynkSimpleEsp8266.h> //Blync
#include "DHT.h" //Sensor DHT
#include <Wire.h> // I2C
#include <Adafruit_BMP085.h> // Sensor BMP180

// Blynk
char auth[] = "5952699ea85e48518c6aa89e1ebc9d8d";
#define BLYNK_PRINT Serial

// Red WiFi
char ssid[] = "WLAN_E17C";
char pass[] = "ced0ccb58c84e525e35f";

// Sensor DHT11
#define dht_pin D7 // GPIO13
#define dht_type DHT22 // Seleccionamos el sensor
DHT dht(dht_pin, dht_type);

// Medida de la presión atmosférica
Adafruit_BMP085 bmp;

// Objeto timer de la clase SimpleTimer
SimpleTimer timer;

void setup() {
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  // Establecemos un intervalo de 1 segundo
  timer.setInterval(1000L, enviarValores);
  Wire.pins(D2, D3);
  Wire.begin(D2, D3); //Inicializa I2C en NodeMCU
  bmp.begin(); // Inicializamos el BMP180
}

void enviarValores() {
  // Lectura de humedad y temperatura
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  // Lectura de presión y altura
  float p = bmp.readPressure();
  float a = bmp.readAltitude(101500);

  // Asignamos los valores a los pins virtuales
  Blynk.virtualWrite(8, a);
  Blynk.virtualWrite(9, p/1000); // Ver nota
  Blynk.virtualWrite(10, t);
  Blynk.virtualWrite(11, h);
}

void loop() {
  Blynk.run();
  timer.run();
}


Nota: he dividido entre 1.000 el valor de la presión porque el valor máximo que nos permite el Gauge es de 9999:

Utilizamos "pins virtuales" para enviar información al servidor de Blynk, en este caso, los valores medidos por los sensores. Para mostrarlos utilizamos componentes Gauge aunque se pueden utilizar Label, Graph, LCD, etc. Los datos los enviamos al servidor cada segundo utilizando el objeto timer de la clase SimpleTimer. El resultado obtenido es el siguiente:


Para configurar cada uno de estos widget utilizamos los siguientes parámetros:




Fuentes:

Enlaces:

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.