// DESARROLLO DE MONITOREO DE SENSORES DH22 PARA AUTOMATIZACION DE INVERNADERO
// Universidad Politecnica de Texcoco en alianza con la Universidad Autonoma de Chapingo
// JEAL, IRG, JARO
// 9MIR1
// Ingenieria Robotica
// ASESORES: Derlis Hernandez Lara (Parte Electronica)
// Roberto Rivera del Rio (Condiciones Agronomicas)
// -----------------------------------------------------------------------------------------------
// INCLUSION DE LIBRERIAS
#include "DHT.h" // Permite la deteccion de Sensores DHT22 para su uso
#include <WiFi.h> // Permite la activacion del modulo Wi-Fi del ESP32
// -----------------------------------------------------------------------------------------------
// Configuración de la red Wi-Fi
const char* ssid = "INFINITUM6ED9"; // Nombre de la red Wi-Fi
const char* password = "yx4CcfN2Ym"; // Contraseña de la red Wi-Fi
// -----------------------------------------------------------------------------------------------
// Pines de sensores DHT22
#define DHTPIN1 23
#define DHTPIN2 22
#define DHTPIN3 21
#define DHTPIN4 19
#define DHTPIN5 18
#define DHTTYPE DHT22
// -----------------------------------------------------------------------------------------------
// Pines de bombas
int bombas[] = {5, 17, 16, 4, 0, 25, 26, 27, 14, 12};
// ------------------------------------------------------------------------------------------------
// Variables de sensores
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE);
DHT dht3(DHTPIN3, DHTTYPE);
DHT dht4(DHTPIN4, DHTTYPE);
DHT dht5(DHTPIN5, DHTTYPE);
// --------------------------------------------------------------------------------------------------
// Configuración del servidor web
WiFiServer server(80);
// --------------------------------------------------------------------------------------------------
// Variables para almacenar los valores de sensores
float temp[5] = {0};
float hum[5] = {0};
bool estadoBombas[10] = {false};
// ---------------------------------------------------------------------------------------------------
void setup() {
// Iniciar la conexión Wi-Fi
Serial.begin(115200);
// Configuración de Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando a Wi-Fi...");
}
Serial.print("Conectado a Wi-Fi. Dirección IP: ");
Serial.println(WiFi.localIP());
// -----------------------------------------------------------------------------------------------------
// Iniciar servidor
server.begin();
// ----------------------------------------------------------------------------------------------------
// Configurar los pines de las bombas como salidas
for (int i = 0; i < 10; i++) {
pinMode(bombas[i], OUTPUT);
digitalWrite(bombas[i], LOW); // Apagar todas las bombas inicialmente
}
// Iniciar los sensores
dht1.begin();
dht2.begin();
dht3.begin();
dht4.begin();
dht5.begin();
}
// ---------------------------------------------------------------------------------------
// Funcionamiento del Sistema
void loop() {
// Lectura de sensores
temp[0] = dht1.readTemperature();
hum[0] = dht1.readHumidity();
temp[1] = dht2.readTemperature();
hum[1] = dht2.readHumidity();
temp[2] = dht3.readTemperature();
hum[2] = dht3.readHumidity();
temp[3] = dht4.readTemperature();
hum[3] = dht4.readHumidity();
temp[4] = dht5.readTemperature();
hum[4] = dht5.readHumidity();
// Validación de datos y control de bombas
for (int i = 0; i < 5; i++) {
if (isnan(temp[i]) || isnan(hum[i])) {
Serial.println("Error al leer el sensor " + String(i+1));
continue;
}
// Lógica de control para las bombas
if (temp[i] < 22) {
for (int j = 0; j < 10; j++) {
digitalWrite(bombas[j], LOW);
estadoBombas[j] = false;
}
} else if (temp[i] >= 22 && temp[i] <= 30) {
for (int j = 0; j < 10; j++) {
digitalWrite(bombas[j], LOW);
estadoBombas[j] = false;
}
} else {
for (int j = 0; j < 10; j++) {
digitalWrite(bombas[j], HIGH);
estadoBombas[j] = true;
}
delay(5000); // Mantener encendido durante 5 segundos
}
// -----------------------------------------------------------------------------
// Imprimir en el monitor serial
Serial.print("Sensor ");
Serial.print(i + 1);
Serial.print(" - Temperatura: ");
Serial.print(temp[i]);
Serial.print("°C, Humedad: ");
Serial.print(hum[i]);
Serial.println("%");
}
// ---------------------------------------------------------------------------------------
// Manejo de conexión de cliente para el servidor web
WiFiClient client = server.available();
if (client) {
Serial.println("Cliente conectado.");
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE html><html><body><h1>Estado de Sensores y Bombas</h1><table border='1'>");
for (int i = 0; i < 5; i++) {
client.println("<tr><th>Sensor " + String(i + 1) + "</th><td>Temperatura: " + String(temp[i]) + "°C</td><td>Humedad: " + String(hum[i]) + "%</td></tr>");
}
client.println("</table><br><h2>Estado de Bombas</h2><ul>");
for (int i = 0; i < 10; i++) {
client.println("<li>Bomba " + String(i + 1) + ": " + (estadoBombas[i] ? "Encendida" : "Apagada") + "</li>");
}
client.println("</ul></body></html>");
delay(1);
client.stop();
Serial.println("Cliente desconectado.");
}
delay(2000); // Espera 2 segundos antes de la siguiente lectura
}