#define BLYNK_TEMPLATE_ID "TMPL3jWswVLgx"
#define BLYNK_TEMPLATE_NAME "Soil monitor"
#define BLYNK_AUTH_TOKEN "BCppPSohahNgOQ_uTxFfq4i8K0Zkd7gB"
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <DHT.h>
#include <LiquidCrystal.h>
// Pin definitions
#define DHT_PIN 16
#define BUZZER_PIN 17
#define MOISTURE_PIN A0
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);
// LCD pin definitions
LiquidCrystal lcd(2, 4, 5, 18, 19, 21);
// LED pin definitions
int red_led = 25;
int green_led = 26;
int blue_led = 27;
// Virtual pin definitions
#define VIRTUAL_PIN_TEMP V0
#define VIRTUAL_PIN_HUMIDITY V1
#define VIRTUAL_PIN_MOISTURE V2
#define VIRTUAL_PIN_NITROGEN V3
#define VIRTUAL_PIN_PHOSPHOROUS V4
#define VIRTUAL_PIN_POTASSIUM V5
char auth[] = "BCppPSohahNgOQ_uTxFfq4i8K0Zkd7gB";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
void setup() {
dht.begin();
pinMode(BUZZER_PIN, OUTPUT);
Serial.begin(115200);
pinMode(red_led, OUTPUT);
pinMode(green_led, OUTPUT);
pinMode(blue_led, OUTPUT);
Blynk.begin(auth, ssid, pass);
while (Blynk.connect() == false) {
Serial.println("Couldn't connect to Blynk.");
}
ledcSetup(0, 5000, 8);
ledcSetup(1, 5000, 8);
ledcSetup(2, 5000, 8);
ledcAttachPin(red_led, 0);
ledcAttachPin(green_led, 1);
ledcAttachPin(blue_led, 2);
}
void loop() {
Blynk.run();
byte val1, val2, val3;
val1 = random(0, 350);
delay(250);
val2 = random(0, 350);
delay(250);
val3 = random(0, 330);
delay(250);
Serial.println();
Serial.print("Nitrogen: ");
Serial.print(val1);
Serial.println(" mg/kg");
Serial.print("Phosphorous: ");
Serial.print(val2);
Serial.println(" mg/kg");
Serial.print("Potassium: ");
Serial.print(val3);
Serial.println(" mg/kg");
int moistureValue = analogRead(MOISTURE_PIN);
String moistureLevel;
if (moistureValue <= 300) {
moistureLevel = "Low";
} else {
moistureLevel = "High";
}
Serial.print("Moisture Level: ");
Serial.println(moistureLevel);
delay(2000);
if (moistureLevel == "Low") {
led_color(255, 0, 0);
} else {
led_color(0, 255, 0);
}
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (temperature > 30.0 || temperature < 0.0) {
digitalWrite(BUZZER_PIN, HIGH);
tone(BUZZER_PIN, 1000);
} else {
digitalWrite(BUZZER_PIN, LOW);
noTone(BUZZER_PIN);
}
Blynk.virtualWrite(VIRTUAL_PIN_TEMP, temperature);
Blynk.virtualWrite(VIRTUAL_PIN_HUMIDITY, humidity);
Blynk.virtualWrite(VIRTUAL_PIN_MOISTURE, moistureValue);
Blynk.virtualWrite(VIRTUAL_PIN_NITROGEN, val1);
Blynk.virtualWrite(VIRTUAL_PIN_PHOSPHOROUS, val2);
Blynk.virtualWrite(VIRTUAL_PIN_POTASSIUM, val3);
}
void led_color(int red_value, int green_value, int blue_value) {
ledcWrite(0, red_value);
ledcWrite(1, green_value);
ledcWrite(2, blue_value);
}