Buenas tardes, estoy realizando un proyecto para monitorizar las plantas (humedad ambiental, temperatura, presion atmosferica etc), y actuar sobre ellas, riego, luz, ventiladores, deshumidificador...
Todo esto lo he hecho con un wemos pro mini, una placa de reles, dht22, bme280.
El programa lo tengo realizado ya, y aparentemente funciona, digo aparentemente, porque mientras estoy con la app en el movil abierta, todo funciona correctamente, pero en el momento que salgo de la app (sin llegar a cerrarla, ejecutandola en segundo plano), deja de responder a las condiciones (el widget eventor por ejemplo). Ya no se si es tema de software, o tema de configuración del smartphone (poco x3 nfc). Dejo por aqui el programa.
#include "DHT.h" // DHT Sensor
#include <ESP8266WiFi.h>
#include <Blynk.h>
#define BLYNK_PRINT Serial
#include <BlynkSimpleEsp8266.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SEALEVELPRESSURE_HPA (1007.8)
//Setup connection of the sensor
Adafruit_BME280 bme; // I2C
char auth[] = "ZD6rUdonhyXNQBdwWDY-JVUxkd9t7bUu";
char ssid[] = "MGME";
char pass[] = "945281783";
BlynkTimer timer;
DHT dhtA(15, DHT22); // DHT instance named dhtA, D8 and sensor type
//Variables
float pressure; //To store the barometric pressure (Pa)
float temperature; //To store the temperature (oC)
float humidity; //To store the humidity (%)
int altimeter; //To store the humidity (%) (you can also use it as a float variable)
const int riego1 = D7;
const int riego2 = D0;
int riego1State = 0;
int riego2State = 0;
void setup() {
Serial.begin(9600);
Serial.println("ArduPlantas:");
Blynk.begin(auth, ssid, pass);
dhtA.begin(); // Starting the DHT-22
bme.begin(0x76); //Begin the sensor
pinMode(riego1, INPUT);
pinMode(riego2, INPUT);
digitalWrite(riego1, riego1State);
digitalWrite(riego2, riego2State);
digitalWrite(0,HIGH);
digitalWrite(2,HIGH);
digitalWrite(12,HIGH);
digitalWrite(14,HIGH);
timer.setInterval(5000L, ReadSensors); // read sensor every 5s
}
void ReadSensors(){
//Read values from the sensor:
pressure = bme.readPressure();
temperature = bme.readTemperature();
humidity = bme.readHumidity ();
altimeter = bme.readAltitude (1010);
Blynk.virtualWrite(V2, pressure/100); // write pressure to V1 value display widget
Blynk.virtualWrite(V3, temperature); // write temperature to V2 value display widget
Blynk.virtualWrite(V4, altimeter); //write altimeter to V3 value display widget
Blynk.virtualWrite(V5, humidity);// write humidity to V4 value display widget
//Print values to serial monitor:
Serial.print(F("Pressure: "));
Serial.print(pressure);
Serial.print(" Mb");
Serial.print("\t");
Serial.print(("Temp: "));
Serial.print(temperature);
Serial.print(" °C");
Serial.print("\t");
Serial.print("Humidity: ");
Serial.print(humidity); // this should be adjusted to your local forcase
Serial.println(" %");
Serial.print("Altimeter: ");
Serial.print(altimeter); // this should be adjusted to your local forcase
Serial.println(" m");
//delay(2000); //Update every 5 sec
}
void climateRoutine() {
byte h1 = dhtA.readHumidity(); // f1 and h1 are celsius and humidity readings
// byte t1 = dhtA.readTemperature(true); // for temperature in farenheits
byte t1 = dhtA.readTemperature(); // from DHT/A
Blynk.virtualWrite(V0, t1); // Set Virtual Pin 0 frequency to PUSH in Blynk app
Blynk.virtualWrite(V1, h1); // Set Virtual Pin 1 frequency to PUSH in Blynk app
}
void loop() {
Blynk.run();
timer.run();
climateRoutine(); // Climate routine
riego1State = digitalRead(riego1);
riego2State = digitalRead(riego2);
}
BLYNK_READ(V7)
{
if (riego1State == HIGH){
Blynk.virtualWrite(V7, 1);
}
else
{
Blynk.virtualWrite(V7, 0);
}
}
BLYNK_READ(V8)
{
if (riego2State == HIGH){
Blynk.virtualWrite(V8, 1);
}
else
{
Blynk.virtualWrite(V8, 0);
}
delay(4700); // 4.7 sec between routines
}