#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
// Configuración de la red WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Configuración del servidor web
WebServer server(80);
// Configuración del sensor DHT22
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Configuración del LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Declaración de las variables de temperatura y humedad
float temperature = 0.0;
float humidity = 0.0;
// Manejador de la ruta /humidity
void handleHumidity() {
// Lectura de la humedad del sensor DHT22
humidity = dht.readHumidity();
// Comprobar si la lectura del sensor fue exitosa
if (isnan(humidity)) {
Serial.println("Error al leer la humedad desde el sensor DHT22");
server.send(500, "text/plain", "Error al leer la humedad desde el sensor DHT22");
return;
}
// Creación del contenido de la página web de respuesta
String html = "<html><head><title>ESP32 DHT22</title>";
html += "<style> body { font-family: Arial, Helvetica, sans-serif; }";
html += "h1 { text-align: center; }";
html += "table { border-collapse: collapse; width: 50%; margin: 0 auto; }";
html += "th, td { text-align: left; padding: 8px; }";
html += "th { background-color: #4CAF50; color: white; }";
html += "</style></head><body>";
html += "<h1>Información del sensor DHT22</h1>";
html += "<table><tr><th>Parámetro</th><th>Valor</th></tr>";
html += "<tr><td>Temperatura</td><td>" + String(temperature) + "C</td></tr>";
html += "<tr><td>Humedad</td><td>" + String(humidity) + "%</td></tr>";
html += "</table>";
html += "</body></html>";
// Envío de la respuesta al cliente
server.send(200, "text/html", html);
}
void setup() {
// Inicialización del puerto serial
Serial.begin(115200);
// Inicialización del sensor DHT22
dht.begin();
// Inicialización del LCD
lcd.init();
lcd.backlight();
// Conexión a la red WiFi
Serial.println();
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi conectado");
Serial.println("Dirección IP: ");
Serial.println(WiFi.localIP());
// Manejadores de ruta del servidor web
server.on("/", [](){
String html = "<html><head><title>ESP32 DHT22</title></head><body>";
html += "<h1>ESP32 DHT22</h1>";
html += "<ul>";
html += "<li><a href=\"/temperature\">Temperatura</a></li>";
html += "<li><a href=\"/humidity\">Humedad</a></li>";
html += "</ul>";
html += "</body></html>";
server.send(200, "text/html", html);
});
server.on("/temperature", [](){
// Lectura de la temperatura del sensor DHT22
temperature = dht.readTemperature();
// Comprobar si la lectura del sensor fue exitosa
if (isnan(temperature)) {
Serial.println("Error al leer la temperatura desde el sensor DHT22");
server.send(500, "text/plain", "Error al leer la temperatura desde el sensor DHT22");
return;
}
// Creación del contenido de la página web de respuesta
String html = "<html><head><title>ESP32 DHT22</title>";
html += "<style> body { font-family: Arial, Helvetica, sans-serif; }";
html += "h1 { text-align: center; }";
html += "table { border-collapse: collapse; width: 50%; margin: 0 auto; }";
html += "th, td { text-align: left; padding: 8px; }";
html += "th { background-color: #4CAF50; color: white; }";
html += "</style></head><body>";
html += "<h1>Información del sensor DHT22</h1>";
html += "<table><tr><th>Parámetro</th><th>Valor</th></tr>";
html += "<tr><td>Temperatura</td><td>" + String(temperature) + "C</td></tr>";
html += "<tr><td>Humedad</td><td>" + String(humidity) + "%</td></tr>";
html += "</table>";
html += "</body></html>";
// Envío de la respuesta al cliente
server.send(200, "text/html", html);
});
server.on("/humidity", handleHumidity);
server.begin();
}
void loop() {
// Manejo de conexiones entrantes del servidor web
server.handleClient();
// Lectura de la temperatura del sensor DHT22
temperature = dht.readTemperature();
// Actualización del LCD con la temperatura y humedad
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TEMP: ");
lcd.print(temperature);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("HUM: ");
lcd.print(humidity);
lcd.print("%");
// Espera de 2 segundos para evitar lecturas demasiado frecuentes del sensor
delay(2000);
}