#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <uri/UriBraces.h>
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define WIFI_CHANNEL 6
WebServer server(80);
// Configuración del Rele
#define RELEPIN 14
// Configuración del PIR
#define PIRPIN 13
// Configuración del Buzzer
#define Buzzer 4
// Configuración de la fotocelda
#define FOTOCELDAPIN 34
// Configuración del LED
#define LEDPIN 12
// Configuración del DHT22
DHT dht (23, DHT22);
LiquidCrystal_I2C lcd(0x27,16,2);
void sendHtml(float temp, float hum) {
String response = R"(
<!DOCTYPE html><html>
<head>
<title>ESP32 Web Server Demo</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
html { font-family: sans-serif; text-align: center; }
body { display: inline-flex; flex-direction: column; }
h1 { margin-bottom: 1.2em; }
h2 { margin: 0; }
</style>
</head>
<body>
<h1>ESP32 Web Server</h1>
<h2>Temperature: TEMP_VALUE °C</h2>
<h2>Humidity: HUM_VALUE %</h2>
</body>
</html>
)";
response.replace("TEMP_VALUE", String(temp));
response.replace("HUM_VALUE", String(hum));
server.send(200, "text/html", response);
}
void setup(){
dht.begin();
delay(3000);
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Temp y Humedad");
lcd.setCursor(0, 1);
lcd.print("Monitoreo");
delay(2000);
lcd.clear();
// Configuración del pin del sensor PIR
pinMode(PIRPIN, INPUT);
// Configuración del pin del módulo relé
pinMode(RELEPIN, OUTPUT);
digitalWrite(RELEPIN, LOW);
//Configuracion Buzzer
pinMode(Buzzer, OUTPUT);
digitalWrite(Buzzer, LOW);
// Configuración del pin del LED
pinMode(LEDPIN, OUTPUT);
digitalWrite(LEDPIN, LOW);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL);
Serial.print("Connecting to WiFi ");
Serial.print(WIFI_SSID);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
server.on("/", []() {
float Temperatura = dht.readTemperature();
float Humedad = dht.readHumidity();
sendHtml(Temperatura, Humedad);
});
server.begin();
Serial.println("HTTP server started");
}
void loop(){
float Temperatura = dht.readTemperature();
float Humedad = dht.readHumidity();
Serial.println("Temperatura: ");
Serial.println(Temperatura);
Serial.println(" C");
Serial.println("Humedad: ");
Serial.println(Humedad);
Serial.println(" % ");
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(Temperatura);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Hum: ");
lcd.print(Humedad);
lcd.print(" %");
delay(3000);
if (digitalRead(PIRPIN) == HIGH) {
digitalWrite(RELEPIN, HIGH);
digitalWrite(Buzzer, HIGH);
delay(5000);
} else {
digitalWrite(RELEPIN, LOW);
digitalWrite(Buzzer, LOW);
}
// Lectura de la fotocelda y control del LED
int luz = analogRead(FOTOCELDAPIN);
if (luz < 3000) {
digitalWrite(LEDPIN, LOW);
delay(1000);
} else {
digitalWrite(LEDPIN, HIGH);
delay(1000);
}
server.handleClient();
delay(2);
}