#include <WiFi.h>
#include <HTTPClient.h>
#include "ThingSpeak.h"
// Define Pins
#define SOIL_MOISTURE_PIN 34 // Potentiometer simulates soil moisture sensor
#define BUZZER_PIN 5 // Buzzer for alerts
#define RELAY_PIN 12 // Relay controls the pump LED
#define PUMP_LED_PIN 4 // Debugging LED to check relay status
// WiFi & ThingSpeak Credentials
const int MyChannelID = 2801800;
const char* API_KEY = "4HGU4M7QZJ3UJTH9";
const char* SSID = "Wokwi-GUEST";
const char* PASS = "";
WiFiClient client;
void setup() {
pinMode(SOIL_MOISTURE_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
pinMode(PUMP_LED_PIN, OUTPUT); // New debug LED
digitalWrite(RELAY_PIN, LOW); // Pump off initially
digitalWrite(PUMP_LED_PIN, LOW); // Debug LED off initially
Serial.begin(9600);
WiFi.begin(SSID, PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to WiFi");
ThingSpeak.begin(client);
// **Relay & Debug LED Test**
digitalWrite(RELAY_PIN, HIGH);
digitalWrite(PUMP_LED_PIN, HIGH);
delay(1000);
digitalWrite(RELAY_PIN, LOW);
digitalWrite(PUMP_LED_PIN, LOW);
}
void loop() {
int soilMoisture = analogRead(SOIL_MOISTURE_PIN);
Serial.print("Soil Moisture Level: ");
Serial.println(soilMoisture);
if (soilMoisture < 300) { // Adjust threshold based on real conditions
tone(BUZZER_PIN, 262, 500); // Short buzzer alert
digitalWrite(RELAY_PIN, HIGH); // Turn ON pump LED
digitalWrite(PUMP_LED_PIN, HIGH); // Turn ON debug LED
Serial.println("⚠️ Soil is dry! Watering...");
} else {
noTone(BUZZER_PIN); // Turn off buzzer
digitalWrite(RELAY_PIN, LOW); // Turn OFF pump LED
digitalWrite(PUMP_LED_PIN, LOW); // Turn OFF debug LED
Serial.println("✅ Soil moisture is sufficient.");
}
// Send data to ThingSpeak
ThingSpeak.setField(1, soilMoisture);
ThingSpeak.writeFields(MyChannelID, API_KEY);
delay(2000); // Wait 2 seconds before checking again
}