#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <BlynkSimpleEsp32.h>
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
const char* apiKey = "your_API_key"; // Weather API key
const char* server = "api.weatherapi.com"; // Weather API server
const char* location = "your_location"; // Location for weather data
const int moisturePin = 34; // Analog pin for soil moisture sensor
const int relayPin = 5; // Digital pin for relay
char auth[] = "your_Blynk_auth_token";
BLYNK_WRITE(V1) {
int pinValue = param.asInt();
if (pinValue == 1) {
digitalWrite(relayPin, HIGH);
Serial.println("Manual watering ON");
} else {
digitalWrite(relayPin, LOW);
Serial.println("Manual watering OFF");
}
}
void setup() {
Serial.begin(115200);
pinMode(moisturePin, INPUT);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW);
WiFi.begin(ssid, password);
Blynk.begin(auth, ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
}
void loop() {
Blynk.run();
int moistureLevel = analogRead(moisturePin);
Serial.print("Soil Moisture Level: ");
Serial.println(moistureLevel);
if (moistureLevel < 500) { // Adjust threshold as needed
digitalWrite(relayPin, HIGH);
Serial.println("Watering the garden...");
} else {
digitalWrite(relayPin, LOW);
Serial.println("Soil is sufficiently moist.");
}
// Get weather data
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = String("http://") + server + "/v1/current.json?key=" + apiKey + "&q=" + location;
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
Serial.println(payload);
DynamicJsonDocument doc(1024);
deserializeJson(doc, payload);
float rain = doc["current"]["precip_mm"];
Serial.print("Rainfall: ");
Serial.print(rain);
Serial.println(" mm");
if (rain > 0) {
digitalWrite(relayPin, LOW);
Serial.println("Rain detected, stopping watering.");
}
}
http.end();
}
delay(60000); // Wait for 1 minute before the next reading
}