#include "DHT.h" // incluir la libreria del sensor DHT22
// Definir el tipo de sensor DHT y el pin al que está conectado
#define DHTPIN 2 // Pin del sensor DHT22
#define DHTTYPE DHT22 // Tipo de sensor DHT22
// Definiciones de restricciones y rangos de temperatura y humedad
#define T_MAX 45 // Máxima temperatura (45°C)
#define H_MIN 25 // Mínima humedad (25%)
#define H_MAX 60 // Máxima humedad (60%)
// Asignaciones de pines en ESP32
#define LEDT 14 // LED de temperatura (verde)
#define LEDH 15 // LED de humedad (azul)
#define BOTON1 26 // botón verde
#define BOTON2 27 // botón azul
// Definición de objetos y variables globales
DHT dht(DHTPIN, DHTTYPE); // Objeto para el sensor DHT22
unsigned long tiempo1 = 0; // Variable para almacenar el último tiempo registrado
const long INTERVALO = 1000; // Intervalo de medición en milisegundos (1 segundo)
void setup() {
// Configuración de pines
pinMode(LEDT, OUTPUT); // LED de temperatura como salida
pinMode(LEDH, OUTPUT); // LED de humedad como salida
pinMode(BOTON1, INPUT_PULLUP); // Botón 1 como entrada con resistencia de pull-up interna
pinMode(BOTON2, INPUT_PULLUP); // Botón 2 como entrada con resistencia de pull-up interna
dht.begin(); // Inicializar el sensor DHT22
Serial.begin(9600); // Inicializar la comunicación serial a 9600 baudios
}
void loop() {
unsigned long tiempo2 = millis(); // Obtener el tiempo actual en milisegundos
// Verificar el intervalo de tiempo para realizar la lectura del sensor
if (tiempo2 - tiempo1 >= INTERVALO) {
tiempo1 = tiempo2; // Actualizar el último tiempo registrado
float temperatura = dht.readTemperature(); // Leer la temperatura del sensor en variable temperatura
float humedad = dht.readHumidity(); // Leer la humedad del sensor en variable temperatura
// Imprimir la temperatura actual en el monitor serial
Serial.print("Temperatura actual: ");
Serial.print(temperatura);
Serial.println(" °C");
Serial.print("humedad actual: ");
Serial.print(humedad);
Serial.println(" %");
// Controlar el LED de temperatura (verde) basado en la temperatura medida
if (temperatura > T_MAX) {
digitalWrite(LEDT, HIGH); // Encender LED de temperatura verde si la temperatura es alta
Serial.println("¡Temperatura fuera de rango!");
} else {
digitalWrite(LEDT, LOW); // Apagar LED de temperatura si la temperatura es aceptable
}
// Controlar el LED de humedad (azul) basado en la humedad medida
if (humedad < H_MIN || humedad > H_MAX) {
digitalWrite(LEDH, HIGH); // Encender LED de humedad azul si la humedad está fuera de rango
Serial.print("Humedad fuera del rango: ");
Serial.print(humedad, 1); // Imprimir la humedad con un decimal de precisión
Serial.println(" %");
} else {
digitalWrite(LEDH, LOW); // Apagar LED de humedad si la humedad está en el rango adecuado
}
}
// Apagar LEDs si se presiona alguno de los botones
if (digitalRead(BOTON1) == LOW || digitalRead(BOTON2) == LOW) {
digitalWrite(LEDT, LOW); // Apagar LED de temperatura
digitalWrite(LEDH, LOW); // Apagar LED de humedad
}
}