#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
DHT dht(16, DHT22);
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo shadeServo;
Servo waterServo;
int waterServoPin = 4;
int shadeServoPin = 15;
int hot = 30;
int dry = 10;
int normalTemp = 29;
float temp = normalTemp + 1; // Initialize to a value different from normalTemp
int humid;
void setup() {
Serial.begin(115200);
dht.begin();
delay(2000);
lcd.init();
lcd.backlight();
shadeServo.attach(waterServoPin);
waterServo.attach(shadeServoPin);
lcd.setCursor(3, 0);
lcd.print("Plant Care");
lcd.setCursor(5, 1);
lcd.print("System");
delay(3000);
lcd.clear();
}
void loop() {
float newTemp = dht.readTemperature();
int newHumid = dht.readHumidity();
if (newTemp != temp) {
temp = newTemp;
humid = newHumid;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temp);
lcd.setCursor(9, 0);
lcd.println("C");
lcd.setCursor(0, 1);
lcd.print("Humid: ");
lcd.print(humid);
lcd.setCursor(12, 1);
lcd.println("%");
}
if (temp >= hot) {
lcd.setCursor(0, 1);
lcd.print("Too Hot! Shading...");
shadeServo.write(90);
} else {
shadeServo.write(0);
}
if (humid <= dry) {
lcd.setCursor(0, 0);
lcd.print("Too Dry! Water...");
waterServo.write(90);
delay(2000);
waterServo.write(0);
} else {
waterServo.write(0);
}
}