#include <WiFi.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#define RELAY_PIN 5
#define DHTPIN 4
#define DHTTYPE DHT22
#define SOIL_PIN 34
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
float temp = 0.0;
float humid = 0.0;
int soilMoisture = 0;
int motorStatus = 0;
unsigned long lastDisplayTime = 0;
int displayState = 0;
unsigned long lastSensorTime = 0;
void sendSensorData() {
temp = dht.readTemperature();
humid = dht.readHumidity();
soilMoisture = analogRead(SOIL_PIN);
}
void updateLCD() {
unsigned long currentTime = millis();
if (currentTime - lastDisplayTime >= 2000) {
lastDisplayTime = currentTime;
lcd.clear();
switch (displayState) {
case 0:
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temp);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humid);
lcd.print("%");
break;
case 1:
lcd.setCursor(0, 0);
lcd.print("Soil Moisture:");
lcd.setCursor(0, 1);
lcd.print(soilMoisture);
break;
case 2:
lcd.setCursor(0, 0);
lcd.print("Motor Status:");
lcd.setCursor(0, 1);
if (motorStatus == 1)
lcd.print("ON");
else
lcd.print("OFF");
break;
}
displayState = (displayState + 1) % 3;
}
}
void setup() {
Serial.begin(115200);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
dht.begin();
lcd.init();
lcd.backlight();
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - lastSensorTime >= 2000) {
lastSensorTime = currentMillis;
sendSensorData();
// Simulate motor ON/OFF logic
if (soilMoisture < 2000) {
digitalWrite(RELAY_PIN, HIGH);
motorStatus = 1;
} else {
digitalWrite(RELAY_PIN, LOW);
motorStatus = 0;
}
}
updateLCD();
}