#include "DHTesp.h"
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <WiFi.h>
#include <WebServer.h>
// Configuración de la red Wi-Fi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const int DHT_PIN = 23;
const int SM_PIN = 13;
const int FR_PIN = 34;
const int RL_PIN = 12;
const int LD_PIN = 14;
int luz=500;
int pirState = LOW;
int val = 0;
DHTesp dhtSensor;
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Crear un servidor web en el puerto 80
WebServer server(80);
// Función para manejar la raíz del servidor web
void handleRoot() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
String html = "<!DOCTYPE html><html>";
html += "<head><meta name='viewport' content='width=device-width, initial-scale=1.0'>";
html += "<title>ESP32 Sensor Data</title></head>";
html += "<body><h1>Sensor Data</h1>";
html += "<p><strong>Temperaturas:</strong> " + String(data.temperature, 2) +"°C"+ "</p>";
html += "<p><strong>Humedad:</strong> " + String(data.humidity, 1) +"%"+ "</p>";
html += "<p><a href='/update'>Update Data</a></p>";
html += "</body></html>";
server.send(200, "text/html", html);
}
// Función para manejar la actualización de datos
void handleUpdate() {
server.sendHeader("Location", "/");
server.send(303);
}
void setup() {
Serial.begin(115200);
//pinMode(FR_PIN, INPUT);
pinMode(SM_PIN, INPUT);
pinMode(LD_PIN, OUTPUT);
pinMode(RL_PIN, OUTPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
Wire.begin(21, 22);
lcd.init();
lcd.backlight();
// Conectar a la red Wi-Fi
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Configurar rutas del servidor web
server.on("/", handleRoot);
server.on("/update", handleUpdate);
// Iniciar el servidor web
server.begin();
Serial.println("HTTP server started");
}
void loop() {
// Manejar las solicitudes del cliente
server.handleClient();
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temperatura: " + String(data.temperature, 2) + "°C");
Serial.println("Humedad: " + String(data.humidity, 1) + "%");
Serial.println("---");
// mostar temperatura en grados centigrados y humedad en la pantalla lcd
lcd.setCursor(0, 0);
lcd.print("Tempera: " + String(data.temperature, 2) + " C");
lcd.setCursor(0, 1);
lcd.print("Humedad: " + String(data.humidity, 1) + "%");
//FOTOCELDA
int valorFR = analogRead(FR_PIN);
//SENSOR DE MOVIMIENTO
int valorSM = digitalRead(SM_PIN); // read input value
// Variable para controlar el estado del LED y el relé
bool ledState = LOW;
bool relayState = LOW;
// Condición para el sensor PIR
if (valorSM == HIGH) {
ledState = HIGH; // Encender el LED
relayState = HIGH; // Activar el relé
} else {
// Condición para la fotorresistencia
if (valorFR >= luz) {
ledState = HIGH; // Encender el LED
relayState = HIGH; // Activar el relé
}
}
// Establecer el estado del LED y el relé
digitalWrite(LD_PIN, ledState);
digitalWrite(RL_PIN, relayState);
delay(2000);
}