#include <Wire.h>
#include <DHTesp.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 15
#define DHTTYPE DHT22
DHTesp dht;
LiquidCrystal_I2C lcd(0x27, 20, 4);
const int MIN_TEMP = 18;
const int MAX_TEMP = 25;
const int MIN_HUMIDITY = 40;
const int MAX_HUMIDITY = 60;
const int BACKLIGHT_PIN = 2;
void setup() {
dht.setup(DHTPIN, DHTesp::DHT22);
lcd.init();
lcd.backlight();
pinMode(BACKLIGHT_PIN, OUTPUT);
}
void loop() {
float temp, humidity;
bool success = readDHT(&temp, &humidity);
if (!success) {
displayError("Error al leer el sensor DHT!");
return;
}
bool tempInRange = isInRange(temp, MIN_TEMP, MAX_TEMP);
bool humidityInRange = isInRange(humidity, MIN_HUMIDITY, MAX_HUMIDITY);
updateDisplay(temp, humidity, tempInRange, humidityInRange);
updateBacklight(tempInRange, humidityInRange);
delay(2000);
}
bool readDHT(float* temp, float* humidity) {
float newTemp = dht.getTemperature();
float newHumidity = dht.getHumidity();
if (isnan(newTemp) || isnan(newHumidity)) {
return false;
}
*temp = newTemp;
*humidity = newHumidity;
return true;
}
void updateDisplay(float temp, float humidity, bool tempInRange, bool humidityInRange) {
lcd.setCursor(0, 0);
lcd.print("TEMP: ");
lcd.print(temp);
lcd.print((char)223);
lcd.print("C ");
lcd.print(tempInRange ? "OK " : "F/R");
lcd.setCursor(0, 1);
lcd.print("HUME: ");
lcd.print(humidity);
lcd.print(" % ");
lcd.print(humidityInRange ? "OK " : "F/R");
}
void updateBacklight(bool tempInRange, bool humidityInRange) {
bool backlightOn = tempInRange && humidityInRange;
digitalWrite(BACKLIGHT_PIN, backlightOn ? LOW : HIGH);
lcd.setBacklight(backlightOn ? LOW : HIGH);
}
void displayError(const char* message) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(message);
}
bool isInRange(float value, float minValue, float maxValue) {
return (value >= minValue && value <= maxValue);
}
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND
esp1:VIN
esp1:GND.2
esp1:D13
esp1:D12
esp1:D14
esp1:D27
esp1:D26
esp1:D25
esp1:D33
esp1:D32
esp1:D35
esp1:D34
esp1:VN
esp1:VP
esp1:EN
esp1:3V3
esp1:GND.1
esp1:D15
esp1:D2
esp1:D4
esp1:RX2
esp1:TX2
esp1:D5
esp1:D18
esp1:D19
esp1:D21
esp1:RX0
esp1:TX0
esp1:D22
esp1:D23
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
led1:A
led1:C