#include "DHTesp.h" // Biblioteca para usar el sensor DHT22 de temperatura y Humedad
#include "LiquidCrystal_I2C.h" // Biblioteca para usar pantalla LCD
#include "HTTPClient.h" // Biblioteca para enviar peticiones HTTP
#include "WiFi.h" // Biblioteca para conectarse a una red WiFi
#include "ArduinoJson.h" // Biblioteca para manejar objetos JSON
const int DHT_PIN = 15; // Pin sensor de temperatura y Humedad
const int rele = 13; // Rele Calefaccion
int temperatura_consigna; // Temperatura de entrada
const char* endpoint = "https://eop4vxguo348a9g.m.pipedream.net"; // RequestBin URL endpoint
DHTesp dhtSensor; // Sensor de temperatura y humedad
TempAndHumidity reference = {0, 0}; //Estructura de datos para guardar la temperatura y la Humedad inicial
void setup () {
Serial.begin(115200); // Comunicacion serial 115200 baudios
Serial.println(" ");
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // Inicializacion del pin del sensor
pinMode(rele, OUTPUT); //Configuracion del PIN del rele como salida
digitalWrite(rele, LOW); // Por defecto, la calefaccion esta apagada
Serial.println("Introduce la Temperatura de Consigna");
while (Serial.available() == 0) {} // Esperar hasta que se defina la Temperatura de consigna
temperatura_consigna = atoi (Serial.readStringUntil('\n').c_str()); // Lee el valor ingresado por el usuario
Serial.println("Temperatura de control establecida en " + String(temperatura_consigna) + "°C"); // Muestra la Temperatura;
Serial.println(" ");
Serial.println("Conectando a la red WiFi....");
WiFi.begin("Wokwi-GUEST", "", 6); // Simulacion de conexion del dispositivos a la red WiFi especifica
while (WiFi.status() != WL_CONNECTED) { // Esperar hasta establecer correctamente la conexion
delay(100);
Serial.print(",");
}
Serial.println("Conectado con exito a la red WiFi");
Serial.print("Direccion IP Asignada: ");
Serial.println(WiFi.localIP());
Serial.println("\n--------------------------------\n\n");
}
void loop()
// Obtener los datos de temperatura y Humedad del sensor
TempAndHumidity sensor_data = dhtSensor.getTempAndHumidity();
// Imprimir los datos obtenidos en la consola serial
Serial.println("Temperatura: " + String(sensor_data.temperatura, 2) + "°C")
Serial.println("Humedad: " + String(sensor_data.humidity, 1) + "%");
// Llamar a la funcion control_temperatura con los parametros necesarios
DynamicJsonDocument data = control_temperatura(sensor_data, temperatura_consigna, rele);
// Serializacion de los datos en un objeto JSON;
data["temperatura"] = sensor_data.temperatura;
data["humidity"] = sensor_data.humidity;
String json_data;
serializeJson ("data, json_data");
// Enviar los datos al endpoint de RequestBin
// Protocolo HTTP -> Llamada de tipo POST
HTTPClient http;
http.begin(endpoint);
http.addHeader("Content-Type", "application/json");
int httpCode = http.POST(json_data);
if (httpCode = HTTP_CODE_OK) {
Serial.println("Datos enviados correctamente");
} else {
Serial.println("Se ha producidoun error");
}
http.end();
Serial.println("---");
// Esperar 3 segundos antes de volver a obtener los datos del sensor
delay(3000);
DynamicJsonDocument control_temperatura(TempAndHumidity sensor_data, int temperatura_consigna, int rele) {
DynamicJsonDocument data(1024);
//Verificar si la temperaturaha cambiado desde la ultima medicion
if (reference.temperature == sensor_data.temperature && reference.humidity == sensor_data.humidity) {
//Si no hay cambio en la temperatura, se informa al usuario
Serial.println("NO se ha producido un cambio en la temperatura");
else {
// SI la temperatura ha cambiado, se actualiza el valor de temperatura y Humedad inicial
reference = sensor_data;
if (sensor_data.temperature >= temperatura_consigna) {
// SI la Temperatura es mayor o igual a la temperaturade control, apaga el Rele
digitalWrite(rele, LOW);
Serial.println("Temperatura menor a " + String(temperatura_consigna) + "°C -> Calefaccion OFF");
data["calefaccion"] = "OFF";
} else {
// Si la temperatura es menor a la temperatura de control, encender el Rele
digitalWrite(rele, HIGH);
Serial.println("Temperatura menor a " + String(temperatura_consigna) + "°C -> Calefaccion ON");
data["calefaccion"] = "ON";
}
}
return data;
}