#include "DHTesp.h" // Incluye la librería para el sensor DHT (en este caso, DHT22) para obtener temperatura y humedad
#include <LiquidCrystal_I2C.h> // Incluye la librería para controlar un LCD con comunicación I2C
#define I2C_ADDR 0x27 // Define la dirección I2C del LCD (puede variar dependiendo del modelo)
#define LCD_COLUMNS 16 // Define el número de columnas del LCD (16 en este caso)
#define LCD_LINES 2 // Define el número de líneas del LCD (2 en este caso)
/*Declaración de variables Leds para indicadores de temperatura y humedad*/
int LedTempVerde = 32; // Pin del LED verde para temperatura (encendido si la temperatura es baja)
int LedTempRojo = 33; // Pin del LED rojo para temperatura (encendido si la temperatura es alta)
int LedHumedadVerde = 13; // Pin del LED verde para humedad (encendido si la humedad es baja)
int LedHumedadRojo = 14; // Pin del LED rojo para humedad (encendido si la humedad es alta)
const int DHT_PIN = 15; // Pin de conexión del sensor DHT22 al GPIO 15 del ESP32
DHTesp dhtSensor; // Crea una instancia de la clase DHTesp para controlar el sensor DHT22
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES); // Crea una instancia del LCD con la dirección I2C, columnas y líneas especificadas
void setup() {
Serial.begin(115200); // Inicializa la comunicación serie a 115200 baudios para depuración en el monitor serial
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // Inicializa el sensor DHT22 en el pin especificado (DHT_PIN)
lcd.init(); // Inicializa el LCD
lcd.backlight(); // Enciende la luz de fondo del LCD
/*Configuración de los pines de los LEDs como salida*/
pinMode(LedTempVerde, OUTPUT); // Configura el pin del LED verde de temperatura como salida
pinMode(LedTempRojo, OUTPUT); // Configura el pin del LED rojo de temperatura como salida
pinMode(LedHumedadVerde, OUTPUT); // Configura el pin del LED verde de humedad como salida
pinMode(LedHumedadRojo, OUTPUT); // Configura el pin del LED rojo de humedad como salida
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity(); // Lee la temperatura y la humedad del sensor DHT22 y guarda los datos en la variable 'data'
Serial.println("Temp: " + String(data.temperature, 1) + "°C"); // Imprime la temperatura leída en el monitor serial con un decimal
Serial.println("Humidity: " + String(data.humidity, 1) + "%"); // Imprime la humedad leída en el monitor serial con un decimal
Serial.println("---"); // Imprime una línea separadora para facilitar la lectura de los datos
/* Encender Leds de Temperatura */
if (data.temperature < 40.0) { // Si la temperatura es menor a 40°C
digitalWrite(LedTempVerde, HIGH); // Enciende el LED verde de temperatura (baja temperatura)
digitalWrite(LedTempRojo, LOW); // Apaga el LED rojo de temperatura
Serial.println("Led Verde Temp Encendido"); // Imprime en el monitor serial que el LED verde está encendido
} else { // Si la temperatura es 40°C o mayor
digitalWrite(LedTempRojo, HIGH); // Enciende el LED rojo de temperatura (alta temperatura)
digitalWrite(LedTempVerde, LOW); // Apaga el LED verde de temperatura
Serial.println("Led Rojo Temp Encendido"); // Imprime en el monitor serial que el LED rojo está encendido
}
/* Encender Leds de Humedad */
if (data.humidity < 70.0) { // Si la humedad es menor a 70%
digitalWrite(LedHumedadVerde, HIGH); // Enciende el LED verde de humedad (baja humedad)
digitalWrite(LedHumedadRojo, LOW); // Apaga el LED rojo de humedad
Serial.println("Led Verde Humedad Encendido"); // Imprime en el monitor serial que el LED verde de humedad está encendido
} else { // Si la humedad es 70% o mayor
digitalWrite(LedHumedadRojo, HIGH); // Enciende el LED rojo de humedad (alta humedad)
digitalWrite(LedHumedadVerde, LOW); // Apaga el LED verde de humedad
Serial.println("Led Rojo Humedad Encendido"); // Imprime en el monitor serial que el LED rojo de humedad está encendido
}
lcd.setCursor(0, 0); // Establece el cursor en la primera fila (fila 0, columna 0) del LCD
lcd.print(" Temp: " + String(data.temperature, 1) + "\xDF"+"C "); // Muestra la temperatura en el LCD con símbolo °C
lcd.setCursor(0, 1); // Establece el cursor en la segunda fila (fila 1, columna 0) del LCD
lcd.print(" Humidity: " + String(data.humidity, 1) + "% "); // Muestra la humedad en el LCD
lcd.print("Wokwi Online IoT"); // Muestra un mensaje adicional en el LCD para indicar que el proyecto está ejecutándose en Wokwi
delay(1000); // Espera 1 segundo antes de volver a ejecutar el ciclo, para no saturar la lectura
}