// #include <Wire.h>
// #include <LiquidCrystal_I2C.h>
// LiquidCrystal_I2C lcd(0x27,16,2);
// void setup()
// {
// Wire.begin(23, 22);
// Serial.begin(9600);
// lcd.init();
// lcd.backlight();
// }
// void loop()
// {
// int16_t i = analogRead(34);
// String msg = i < 2165 ? "WET" : i > 3135 ? "DRY" : "OK";
// lcd.clear();
// lcd.print("Soil: ");
// lcd.print(msg);
// delay(500);
// }
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#include <Preferences.h>
#include <AceButton.h>
using namespace ace_button;
Preferences pref;
#define DHTPIN 23 //D23 pin connected with DHT
#define DHTTYPE DHT22 // DHT 22, AM2302, AM2321
#define RAIN_ANALOG 27
#define RAIN_DIGITAL 15 // D26 pin connected with Rain Sensor
#define SOIL_MOISTURE_PIN 34 // D27 pin connected with Soil Moisture Sensor
#define RELAY_PIN 18 // D18 pin connected with Relay
#define wifiLed 2 // D2
#define VPIN_Text V0
#define VPIN_RainSensor V1
#define VPIN_SoilMoisture V2
#define VPIN_TempHumidity V3
#define VPIN_Button V4
DHT dht(DHTPIN, DHTTYPE);
AceButton button(&config);
bool relayState = LOW; //Define integer to remember the toggle state for relay
char auth[] = "YourAuthToken";
void buttonEventHandler(AceButton*, uint8_t, uint8_t);
void setup() {
Serial.begin(115200);
pref.begin("Relay_State", false);
pinMode(RELAY_PIN, OUTPUT);
pinMode(RAIN_SENSOR_PIN, INPUT);
pinMode(SOIL_MOISTURE_PIN, INPUT);
pinMode(wifiLed, OUTPUT);
dht.begin();
config.setEventHandler(buttonEventHandler);
button.init(VPIN_Button);
Blynk.begin(auth, "YourWiFiSSID", "YourWiFiPassword");
}
void readSensors() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
float rainDetected = analogRead(RAIN_SENSOR_PIN);
Serial.println(analogRead(RAIN_ANALOG));
if (digitalRead(RAIN_DIGITAL))
Serial.println("It's raining!");
int soilMoistureDetected = analogRead(SOIL_MOISTURE_PIN);
Blynk.virtualWrite(VPIN_TempHumidity, temperature);
Blynk.virtualWrite(VPIN_RainSensor, rainDetected);
Blynk.virtualWrite(VPIN_SoilMoisture, soilMoistureDetected);
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
Serial.print("Rain Sensor: ");
Serial.println(rainDetected);
Serial.print("Soil Moisture: ");
Serial.println(soilMoistureDetected);
}
void sendSensorData() {
readSensors();
}
void checkBlynkStatus() {
bool isconnected = Blynk.connected();
if (!isconnected) {
Serial.println("Blynk Not Connected");
digitalWrite(wifiLed, LOW);
} else {
Serial.println("Blynk Connected");
digitalWrite(wifiLed, HIGH);
}
}
BLYNK_CONNECTED() {
Blynk.syncAll();
}
BLYNK_WRITE(VPIN_Button) {
if (param.asInt() == 1) {
relayState = !relayState;
digitalWrite(RELAY_PIN, relayState);
pref.putBool("RelayState", relayState);
Blynk.virtualWrite(VPIN_Button, relayState);
}
}
void loop() {
Blynk.run();
button.check();
sendSensorData();
checkBlynkStatus();
delay(1000);
}