#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <BlynkSimpleEsp32.h>
#include <WiFi.h>
#include <WiFiClient.h>
#define SOIL_MOISTURE_PIN 35 // Pin connected to the soil moisture sensor
#define DHTPIN 32 // DHT11 data pin
#define RELAY_WATER_PUMP_PIN 5 // Pin connected to the relay module for water pump
#define RELAY_FAN_PIN 18 // Pin connected to the relay module for fan
#define BUZZER_PIN 25 // Pin connected to the buzzer module
#define LDR_PIN 34 // Pin connected to the LDR sensor
#define LED_PIN 26 // Pin connected to the LED
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL3uqc_AF8m"
#define BLYNK_TEMPLATE_NAME "Smart Greenhouse Monitoring and Control System"
#define BLYNK_AUTH_TOKEN "YPNrfQdU5Q2lylLnnQf_zUlwHMC6eMH7"
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
DHT dht(DHTPIN, DHT22);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Address 0x27 for an I2C LCD with 16x2 characters
void setup() {
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
pinMode(RELAY_WATER_PUMP_PIN, OUTPUT);
pinMode(RELAY_FAN_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(SOIL_MOISTURE_PIN, INPUT);
pinMode(LDR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(LED1, OUTPUT);
Blynk.begin(auth, ssid, pass);
}
void loop() {
Blynk.run(); // Allow Blynk to handle communication
int humidity = dht.readHumidity();
int temperature = dht.readTemperature();
Blynk.virtualWrite(V0, temperature); // Send temperature data to Blynk
Blynk.virtualWrite(V1, humidity); // Send humidity data to Blynk
int soilMoisture = analogRead(SOIL_MOISTURE_PIN);
int moisturePercentage = map(soilMoisture, 1023, 4095, 0, 100);
Blynk.virtualWrite(V3, moisturePercentage); // Send soil moisture data to Blynk
int fanState = digitalRead(RELAY_FAN_PIN);
Blynk.virtualWrite(V5, fanState); // Send fan state to Blynk
int lightIntensity = analogRead(LDR_PIN);
int lightPercentage = (lightIntensity / (float)4095) * 100.0;
Blynk.virtualWrite(V4, lightPercentage); // Send light intensity data to Blynk
delay(1000); // Add some delay to prevent flooding Blynk server
}
// Function to handle water pump control via Blynk app
BLYNK_WRITE(V12) {
int waterPumpState = param.asInt();
digitalWrite(RELAY_WATER_PUMP_PIN, waterPumpState);
}
int SW_State_M = 0;
BLYNK_WRITE(V0) {
SW_State_M = param.asInt();
digitalWrite(LED1, SW_State_M);
}