#define BLYNK_TEMPLATE_ID "YourTemplateID"
#define BLYNK_AUTH_TOKEN "YourAuthToken"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include "DHT.h"
char auth[] = "YourAuthToken"; // Blynk token
char ssid[] = "YourWiFiName"; // WiFi name
char pass[] = "YourWiFiPassword"; // WiFi password
#define DHTPIN 15
#define DHTTYPE DHT11
#define MOISTURE_PIN 34
#define PUMP_PIN 23
#define SWITCH_PIN 21
DHT dht(DHTPIN, DHTTYPE);
int threshold = 40; // Moisture % threshold
bool manualControl = false;
bool pumpState = false;
BLYNK_WRITE(V4) { // Manual control from app
manualControl = param.asInt();
}
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
dht.begin();
pinMode(PUMP_PIN, OUTPUT);
pinMode(SWITCH_PIN, INPUT_PULLUP); // Button with pull-up
digitalWrite(PUMP_PIN, HIGH); // Pump OFF initially
Serial.println("Smart Agriculture System Started...");
}
void loop() {
Blynk.run();
// Read soil moisture (simulate with potentiometer)
int moistureValue = analogRead(MOISTURE_PIN);
int moisturePercent = map(moistureValue, 0, 4095, 100, 0);
// Read DHT11 data
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Send data to Blynk
Blynk.virtualWrite(V1, moisturePercent);
Blynk.virtualWrite(V2, temperature);
Blynk.virtualWrite(V3, humidity);
Serial.print("Moisture: "); Serial.print(moisturePercent); Serial.print("% ");
Serial.print("Temp: "); Serial.print(temperature); Serial.print("°C ");
Serial.print("Humidity: "); Serial.println(humidity);
bool switchPressed = digitalRead(SWITCH_PIN) == LOW;
if (manualControl || switchPressed) {
pumpState = true; // Manual ON
} else if (moisturePercent < threshold) {
pumpState = true; // Auto ON
} else {
pumpState = false; // OFF
}
// Control pump (LED)
digitalWrite(PUMP_PIN, pumpState ? LOW : HIGH);
Blynk.virtualWrite(V5, pumpState);
Serial.print("Pump: ");
Serial.println(pumpState ? "ON" : "OFF");
delay(2000);
}