/*************************************************************
This example shows how value can be pushed from Arduino to
the Blynk App.
NOTE:
BlynkTimer provides SimpleTimer functionality:
http://playground.arduino.cc/Code/SimpleTimer
App dashboard setup:
Value Display widget attached to Virtual Pin V5
*************************************************************/
/* Fill-in information from Blynk Device Info here */
#define BLYNK_TEMPLATE_ID "TMPL6fg1Y93Va"
#define BLYNK_TEMPLATE_NAME "Smart Irrigation System for Home Garden"
#define BLYNK_AUTH_TOKEN "Fn3PYpATLHnn7ZgG9ut11Ex-E_hABKJK" // Replace with your Auth Token
/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22
#define SOIL_MOISTURE_PIN 34
#define LDR_PIN 35
#define RAIN_SENSOR_PIN 32
#define WATER_PUMP_PIN 27
#define VALVE_PIN 26
DHT dht(DHTPIN, DHTTYPE);
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
void sendSensorData() {
float h = dht.readHumidity();
float t = dht.readTemperature();
int soilMoistureValue = analogRead(SOIL_MOISTURE_PIN);
int ldrValue = analogRead(LDR_PIN);
int rainValue = digitalRead(RAIN_SENSOR_PIN);
// Send data to Blynk
Blynk.virtualWrite(V0, t); // Send temperature to Blynk
Blynk.virtualWrite(V1, h); // Send humidity to Blynk
Blynk.virtualWrite(V2, soilMoistureValue); // Send soil moisture to Blynk
Blynk.virtualWrite(V3, ldrValue); // Send light intensity to Blynk
Blynk.virtualWrite(V4, rainValue); // Send rain sensor value to Blynk
// Print data to Serial Monitor
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C\t");
Serial.print("Soil Moisture: ");
Serial.print(soilMoistureValue);
Serial.print("\tLDR: ");
Serial.print(ldrValue);
Serial.print("\tRain: ");
Serial.println(rainValue);
// Control water pump and valve based on soil moisture and rain sensor
if (soilMoistureValue < 300 && rainValue == 0) {
digitalWrite(WATER_PUMP_PIN, HIGH); // Turn on the pump
digitalWrite(VALVE_PIN, HIGH); // Open the valve
} else {
digitalWrite(WATER_PUMP_PIN, LOW); // Turn off the pump
digitalWrite(VALVE_PIN, LOW); // Close the valve
}
}
BLYNK_WRITE(V6) {
int pumpState = param.asInt();
digitalWrite(WATER_PUMP_PIN, pumpState);
Serial.print("Water Pump: ");
Serial.println(pumpState ? "ON" : "OFF");
}
BLYNK_WRITE(V7) {
int valveState = param.asInt();
digitalWrite(VALVE_PIN, valveState);
Serial.print("Solenoid Valve: ");
Serial.println(valveState ? "OPEN" : "CLOSED");
}
void setup() {
// Debug console
Serial.begin(115200);
// Initialize the DHT sensor
dht.begin();
pinMode(SOIL_MOISTURE_PIN, INPUT);
pinMode(LDR_PIN, INPUT);
pinMode(RAIN_SENSOR_PIN, INPUT);
pinMode(WATER_PUMP_PIN, OUTPUT);
pinMode(VALVE_PIN, OUTPUT);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// Setup a function to be called every 20 seconds
timer.setInterval(20000L, sendSensorData);
}
void loop() {
Blynk.run();
timer.run(); // Initiates BlynkTimer
}