#define BLYNK_TEMPLATE_ID "TMPL3iJfsm3Im"
#define BLYNK_TEMPLATE_NAME "Agro Smart Irrigation"
#define BLYNK_AUTH_TOKEN "EzMPFfTXFAWJ8GapCRkx7jPJzPq1_jPd"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// -------- WiFi --------
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// -------- LCD --------
LiquidCrystal_I2C lcd(0x27, 16, 2);
// -------- DHT --------
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// -------- PINS --------
#define SOIL_PIN 34
#define RELAY_PIN 5
// -------- THRESHOLD --------
int soilThreshold = 2000;
void setup() {
Serial.begin(115200);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // Pump OFF initially
dht.begin();
// LCD Setup
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Connecting WiFi");
// Blynk Connection
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
lcd.clear();
lcd.print("Connected!");
delay(1000);
lcd.clear();
}
void loop() {
Blynk.run();
// -------- SENSOR READINGS --------
int soilValue = analogRead(SOIL_PIN);
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// -------- DECISION LOGIC --------
bool pumpState;
if (soilValue > soilThreshold) {
digitalWrite(RELAY_PIN, HIGH); // Pump ON
pumpState = 1;
} else {
digitalWrite(RELAY_PIN, LOW); // Pump OFF
pumpState = 0;
}
// -------- SEND TO BLYNK --------
Blynk.virtualWrite(V0, soilValue);
Blynk.virtualWrite(V1, temperature);
Blynk.virtualWrite(V2, humidity);
Blynk.virtualWrite(V3, pumpState);
// -------- LCD DISPLAY --------
lcd.setCursor(0, 0);
lcd.print("Soil:");
lcd.print(soilValue);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(pumpState ? "PUMP: ON " : "PUMP: OFF");
delay(2000);
}