#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Arduino.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#define DHTPIN 4 // Especifica el pin de datos del sensor DHT
#define DHTTYPE DHT22 // Especifica el tipo de sensor DHT utilizado
DHT dht(DHTPIN, DHTTYPE);
int ledPin = 2; // Especifica el pin al que está conectado el LED
bool ledState = false; // Estado del LED (encendido / apagado)
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C de la pantalla LCD
/* Usuario y Contraseña */
const char* ssid = "ESP32";
const char* password = "12345678";
/* Detalles de las IP */
IPAddress local_ip(192,168,1,1);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
WebServer server(80);
void handleRoot() {
float temperatura = dht.readTemperature(); // Lee la temperatura del ambiente en grados Celsius
// Comprueba si la temperatura es un valor válido
if (isnan(temperatura)) {
server.send(200, "text/plain", "Error al leer la temperatura");
return;
}
String html = "<html><body><h1>Temperatura: ";
html += temperatura;
html += "C</h1></body></html>";
server.send(200, "text/html", html);
}
void setup() {
Serial.begin(115200);
lcd.init(); // Inicializa la pantalla LCD
lcd.backlight(); // Enciende la retroiluminación de la pantalla
dht.begin(); // Inicializa el sensor DHT
pinMode(ledPin, OUTPUT); // Establece el pin del LED como salida
/* Configuración del WiFi */
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid, password);
delay(100);
WiFi.softAPConfig(local_ip, gateway, subnet);
server.on("/", handleRoot);
server.begin();
}
void loop() {
float temperatura = dht.readTemperature(); // Lee la temperatura del ambiente en grados Celsius
// Comprueba si la temperatura es un valor válido
if (isnan(temperatura)) {
return;
}
// Muestra el valor de temperatura en la pantalla LCD
lcd.setCursor(0, 0);
lcd.print("Temperatura: ");
lcd.print(temperatura);
lcd.print("C");
// Comprueba si la temperatura está fuera del rango deseado
if (temperatura < 20 || temperatura > 25) {
// Hace parpadear el LED
for (int brightness = 0; brightness <= 255; brightness += 5) {
analogWrite(ledPin, brightness);
delay(10);
}
for (int brightness = 255; brightness >= 0; brightness -= 5) {
analogWrite(ledPin, brightness);
delay(10);
}
} else {
// Enciende el LED si no está encendido
if (!ledState) {
digitalWrite(ledPin, HIGH);
ledState = true;
}
}
// Conexión con el servidor web
WiFiClient client = server.client();
if (client) {
String request = client.readStringUntil('\r');
client.flush();
// Respuesta HTTP
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
// Envío de la temperatura al cliente
client.print("Temperatura actual: ");
client.print(temperatura);
client.println(" C");
delay(1);
client.stop();
}
delay(2000); // Espera 2 segundos antes de volver a leer los valores
}