#include <DHT.h>
#include <WiFi.h>
#include <ThingerESP32.h>
#include <time.h> // Incluir la biblioteca de tiempo
// Definiciones de Thinger.io
#define USERNAME "cmacias5803"
#define DEVICE_ID "medidor_ambiental"
#define DEVICE_CREDENTIAL "cumb1234567"
// Pines de los sensores
#define DHT_PIN_AIRE 5 // Pin del sensor DHT22
#define MED_POLUCION 34 // Pin del sensor polucuion del aire
#define MED_CO2 32 //MEDIDOR DE CO2
#define MED_RUIDO 33 //MEDIDOR DE RUIDO
ThingerESP32 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);
// Instancia del sensor DHT22
DHT dht(DHT_PIN_AIRE, DHT22);
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32!");
dht.begin();
thing.add_wifi("Wokwi-GUEST", "");
// Configuración del servidor NTP
configTime(0, 0, "pool.ntp.org"); // Ajusta a tu zona horaria si es necesario
// Recurso Thinger.io para enviar datos de los sensores
thing["parametros_ambiental"] >> [](pson & out) {
out["Temperatura"] = dht.readTemperature();
out["Humedad"] = dht.readHumidity();
out["Polucion de Aire"] = map(analogRead(MED_POLUCION), 0, 4095, 0, 100);
out["Co2 del Aire"] = map(analogRead(MED_CO2), 0, 4095, 0, 100);
out["Nivel de Ruido"] = map(analogRead(MED_RUIDO), 0, 4095, 0, 100);
};
}
void loop() {
thing.handle();
// Lectura de sensores
float temperatura = dht.readTemperature();
float humedad = dht.readHumidity();
float polucionaire = map(analogRead(MED_POLUCION), 0, 4095, 0, 100);// Leer y mapear el valor del potenciómetro para simular polucion
float co2aire = map(analogRead(MED_CO2), 0, 4095, 0, 1000);// Leer y mapear el valor del potenciómetro para simular el co2 de aire
float nivelruido = map(analogRead(MED_RUIDO), 0, 4095, 0, 100); // Leer y mapear el valor del potenciómetro para simular el ruido del ambiente
Serial.print("Temperatura: ");
Serial.println(temperatura);
Serial.print("Humedad: ");
Serial.println(humedad);
Serial.print("Polucion de Aire: ");
Serial.println(polucionaire);
Serial.print("ppm de Co2 en el Aire: ");
Serial.println(co2aire);
Serial.print("NIvel de Ruido del Ambiente: ");
Serial.println(nivelruido);
// Enviar datos al bucket en Thinger.io
thing.write_bucket("DBC02", "parametros_ambiental");
Serial.println("Datos enviados...");
delay(10000);
// Obtener la fecha y hora actual
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Error al obtener la hora");
return;
}
char timeString[30];
strftime(timeString, sizeof(timeString), "%Y-%m-%d %H:%M:%S", &timeinfo);
// Enviar alarma si la humedad del suelo es baja
if (temperatura <= 33) {
pson data;
data["temperaturaAmbiente"] = temperatura;
data["FechaHora"] = String(timeString);
thing.call_endpoint("Temperatura_ambiente", data);
Serial.println("Envío de alarma de Temperatura Alta");
}
if (polucionaire <= 33) {
pson data;
data["Polucion de Aire"] = polucionaire;
data["FechaHora"] = String(timeString);
thing.call_endpoint("Alerta_Polucion", data);
Serial.println("Envío de alarma por Polucion de Aire elevada");
}
if (co2aire <= 400) {
pson data;
data["Co2Aire"] = co2aire;
data["FechaHora"] = String(timeString);
thing.call_endpoint("Co2Alto", data);
Serial.println("Envío de alarma contaminacion por Co2 Alto");
}
delay(5000); // Espera antes de la siguiente lectura
}