#define BLYNK_TEMPLATE_ID "YourTemplateID"
#define BLYNK_DEVICE_NAME "YourDeviceName"
#define BLYNK_AUTH_TOKEN "YourAuthToken"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#include <OneButton.h>
#include <U8g2lib.h>
// Pin Definitions
#define DHTPIN 32 // Pin for DHT22
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define LDRPIN 33 // Pin for LDR
#define SOILMOISTUREPIN 27 // Pin for Soil Moisture
#define PIN_PUMP 16 // Pin for Pump
#define BUTTON_PIN 19 // Pin for Button
// Initialize DHT sensor
DHT dht(DHTPIN, DHTTYPE);
// Initialize Button
OneButton button(BUTTON_PIN, true);
// Initialize OLED display (I2C)
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
// Blynk credentials
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "YourSSID";
char pass[] = "YourPassword";
// Variables to hold sensor data
float temperature;
float humidity;
int soilMoisture;
int lightIntensity;
// Threshold for soil moisture
const int moistureThreshold = 300; // Adjust this value based on your sensor calibration
// Function to read sensor data
void readSensors() {
temperature = dht.readTemperature();
humidity = dht.readHumidity();
soilMoisture = analogRead(SOILMOISTUREPIN);
lightIntensity = analogRead(LDRPIN);
// Send data to Blynk
Blynk.virtualWrite(V1, temperature);
Blynk.virtualWrite(V2, humidity);
Blynk.virtualWrite(V3, soilMoisture);
Blynk.virtualWrite(V4, lightIntensity);
// Control the pump based on soil moisture
if (soilMoisture < moistureThreshold) {
digitalWrite(PIN_PUMP, HIGH); // Turn on the pump
} else {
digitalWrite(PIN_PUMP, LOW); // Turn off the pump
}
}
// Function to display data on OLED
void displayData() {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.drawStr(0, 10, "Temp:");
u8g2.setCursor(50, 10);
u8g2.print(temperature);
u8g2.print(" C");
u8g2.drawStr(0, 25, "Humidity:");
u8g2.setCursor(70, 25);
u8g2.print(humidity);
u8g2.print(" %");
u8g2.drawStr(0, 40, "Soil:");
u8g2.setCursor(50, 40);
u8g2.print(soilMoisture);
u8g2.print(" %");
u8g2.drawStr(0, 55, "Light:");
u8g2.setCursor(50, 55);
u8g2.print(lightIntensity);
u8g2.print(" lx");
u8g2.sendBuffer();
}
// Function to be called when button is long pressed
void onLongPress() {
displayData();
}
void setup() {
// Initialize Serial Monitor
Serial.begin(115200);
// Initialize Blynk
Blynk.begin(auth, ssid, pass);
// Initialize DHT sensor
dht.begin();
// Initialize OLED display
u8g2.begin();
// Initialize Button
button.attachLongPressStart(onLongPress);
// Set pump pin as output
pinMode(PIN_PUMP, OUTPUT);
digitalWrite(PIN_PUMP, LOW); // Ensure pump is off initially
// Read initial sensor data
readSensors();
}
void loop() {
Blynk.run();
button.tick();
// Periodically read sensor data
static unsigned long lastReadTime = 0;
if (millis() - lastReadTime > 5000) { // Read every 5 seconds
readSensors();
lastReadTime = millis();
}
}