#define BLYNK_TEMPLATE_ID "TMPL64ftw-bBX"
#define BLYNK_TEMPLATE_NAME "Project ChemTex"
#define BLYNK_AUTH_TOKEN "l_oPs5mLHjAOQrI98W305gbvw-BIPA9W"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int Soil_PIN = 34;
const int PH_PIN = 35;
int led_green = 32;
int led_yellow = 33;
int led_red = 25;
BlynkTimer timer;
void setup() {
Wire.begin(23, 22);
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(5, 0);
lcd.print("ChemTex");
lcd.setCursor(5, 1);
lcd.print("Group 9");
pinMode(Soil_PIN,INPUT);
pinMode(PH_PIN,INPUT);
pinMode(led_green, OUTPUT);
pinMode(led_yellow, OUTPUT);
pinMode(led_red, OUTPUT);
delay(3000);
lcd.clear();
Blynk.begin(auth, ssid, pass);
timer.setInterval(2000, sendSensor);
}
void sendSensor() {
int16_t soilMoisture = analogRead(Soil_PIN);
Blynk.virtualWrite(V0, soilMoisture);
String soilMsg;
if (soilMoisture > 69) {
soilMsg = "WET";
} else if (soilMoisture > 49 && soilMoisture < 70) {
soilMsg = "BORDER";
} else {
soilMsg = "DRY";
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Soil: ");
lcd.print(soilMsg);
lcd.setCursor(0, 1);
lcd.print("Moisture: ");
lcd.print(soilMoisture);
lcd.print(" %");
Serial.print("Soil Moisture: ");
Serial.println(soilMoisture);
delayWithMillis(2000);
float pHLevel = map(analogRead(PH_PIN), 0, 4095, 0.0, 14.0);
Blynk.virtualWrite(V1, pHLevel);
String pHMsg;
if (pHLevel > 7) {
pHMsg = "BASE";
} else if (pHLevel == 7) {
pHMsg = "NEUTRAL";
} else {
pHMsg = "ACID";
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("pH: ");
lcd.print(pHMsg);
lcd.setCursor(0, 1);
lcd.print("pH Level: ");
lcd.print(pHLevel);
Serial.print("pH Level: ");
Serial.println(pHLevel);
delayWithMillis(2000);
if ((soilMoisture > 69) && (6.8 < pHLevel && pHLevel < 7.2)) {
digitalWrite(led_green, HIGH);
Blynk.virtualWrite(V2, HIGH);
digitalWrite(led_yellow, LOW);
Blynk.virtualWrite(V3, LOW);
digitalWrite(led_red, LOW);
Blynk.virtualWrite(V4, LOW);
} else if ((soilMoisture > 49 && soilMoisture < 70) && ((5.5 < pHLevel && pHLevel < 6.8) || (7.2 < pHLevel && pHLevel < 7.5))) {
digitalWrite(led_green, LOW);
Blynk.virtualWrite(V2, LOW);
digitalWrite(led_yellow, HIGH);
Blynk.virtualWrite(V3, HIGH);
digitalWrite(led_red, LOW);
Blynk.virtualWrite(V4, LOW);
} else {
digitalWrite(led_green, LOW);
Blynk.virtualWrite(V2, LOW);
digitalWrite(led_yellow, LOW);
Blynk.virtualWrite(V3, LOW);
digitalWrite(led_red, HIGH);
Blynk.virtualWrite(V4, HIGH);
}
}
void delayWithMillis(unsigned long ms)
{
unsigned long currentMillis = millis();
while (millis() - currentMillis < ms)
{
// Do nothing, just wait
}
}
void loop() {
Blynk.run();
timer.run();
}