#define BLYNK_TEMPLATE_ID "TMPL3qVryWWv7"
#define BLYNK_TEMPLATE_NAME "soil nutrtion"
#define BLYNK_AUTH_TOKEN "87eJcpB2FP3Tx0tEoQQlGxCAlmi2lZs-"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#define SOIL_MOISTURE_PIN 32
#define TEMPERATURE_PIN 34
#define HUMIDITY_PIN 35
#define NITROGEN_PIN 33
#define PHOSPHORUS_PIN 36
#define POTASSIUM_PIN 39
#define WATER_PUMP_LED 12
#define BUZZER_LED 13
LiquidCrystal_I2C LCD(0x27, 16, 2);
const int moistThreshold = 60;
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST"; // Replace with your WiFi SSID
char pass[] = ""; // Replace with your WiFi Password
void setup() {
Serial.begin(115200);
pinMode(WATER_PUMP_LED, OUTPUT);
pinMode(BUZZER_LED, OUTPUT);
LCD.init();
LCD.backlight();
// Connect to Wi-Fi and Blynk
Blynk.begin(auth, ssid, pass);
}
void loop() {
Blynk.run();
int soilMoistureValue = analogRead(SOIL_MOISTURE_PIN);
int temperatureValue = analogRead(TEMPERATURE_PIN);
int nitrogenValue = analogRead(NITROGEN_PIN);
int phosphorusValue = analogRead(PHOSPHORUS_PIN);
int potassiumValue = analogRead(POTASSIUM_PIN);
float soilMoisture = map(soilMoistureValue, 0, 4095, 0, 100); // Simulated soil moisture
float temperature = map(temperatureValue, 0, 4095, 30, 50); // Simulated temperature
float nitrogen = map(nitrogenValue, 0, 4095, 0, 100); // Simulated nitrogen
float phosphorus = map(phosphorusValue, 0, 4095, 0, 100); // Simulated phosphorus
float potassium = map(potassiumValue, 0, 4095, 0, 100); // Simulated potassium
// Display values on LCD
LCD.clear();
LCD.setCursor(0, 0);
LCD.print("Moist: ");
LCD.print(soilMoisture);
LCD.print("%");
LCD.setCursor(0, 1);
LCD.print("Temp: ");
LCD.print(temperature);
LCD.print("C");
delay(1000); // Display for 2 seconds
LCD.setCursor(0, 1);
LCD.print("N: ");
LCD.print(nitrogen);
LCD.print("%");
delay(1000); // Display for 2 seconds
LCD.clear();
LCD.setCursor(0, 0);
LCD.print("P: ");
LCD.print(phosphorus);
LCD.print("%");
LCD.setCursor(0, 1);
LCD.print("K: ");
LCD.print(potassium);
LCD.print("%");
delay(1000); // Display for 2 seconds
// Send data to Blynk
Blynk.virtualWrite(V1, soilMoisture);
Blynk.virtualWrite(V0, temperature);
Blynk.virtualWrite(V2, nitrogen);
Blynk.virtualWrite(V3, phosphorus);
Blynk.virtualWrite(V4, potassium);
// Control water pump and buzzer
if (soilMoisture < moistThreshold) {
digitalWrite(WATER_PUMP_LED, HIGH);
digitalWrite(BUZZER_LED, HIGH);
} else {
digitalWrite(WATER_PUMP_LED, LOW);
digitalWrite(BUZZER_LED, LOW);
}
delay(1000); // Update every second
}