#define BLYNK_TEMPLATE_ID "TMPL3zBxNvLT_"
#define BLYNK_TEMPLATE_NAME "Room Automation"
#define BLYNK_AUTH_TOKEN "BL3Cyhy_sh6G6NdFYxyjqxMlOW6OYpLf"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
#define button1_pin 26
#define button2_pin 25
#define relay1_pin 13
#define relay2_pin 12
int relay1_state = 0;
int relay2_state = 0;
#define button1_vpin V1
#define button2_vpin V2
#define temp_vpin V5
#define humidity_vpin V6
#define DHTPIN 15 // DHT SDA Pin
DHT dht(DHTPIN, DHT22);
BLYNK_CONNECTED()
{
Blynk.syncVirtual(button1_vpin);
Blynk.syncVirtual(button2_vpin);
}
BLYNK_WRITE(button1_vpin)
{
relay1_state = param.asInt();
digitalWrite(relay1_pin, relay1_state);
}
BLYNK_WRITE(button2_vpin)
{
relay2_state = param.asInt();
digitalWrite(relay2_pin, relay2_state);
}
void sendSensor()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Blynk.virtualWrite(temp_vpin, t); // V5 is for Temperature
Blynk.virtualWrite(humidity_vpin, h); // V6 is for Humidity
}
void setup()
{
Serial.begin(115200);
pinMode(button1_pin, INPUT_PULLUP);
pinMode(button2_pin, INPUT_PULLUP);
pinMode(relay1_pin, OUTPUT);
pinMode(relay2_pin, OUTPUT);
digitalWrite(relay1_pin, HIGH);
digitalWrite(relay2_pin, HIGH);
Blynk.begin(auth, ssid, pass);
dht.begin();
timer.setInterval(1000L, sendSensor);
}
void loop()
{
Blynk.run();
timer.run();
listen_push_buttons();
}
void listen_push_buttons()
{
if(digitalRead(button1_pin) == LOW){
delay(200);
control_relay(1);
Blynk.virtualWrite(button1_vpin, relay1_state); // update button state
}
else if (digitalRead(button2_pin) == LOW){
delay(200);
control_relay(2);
Blynk.virtualWrite(button2_vpin, relay2_state); // update button state
}
}
void control_relay(int relay)
{
if(relay == 1){
relay1_state = !relay1_state;
digitalWrite(relay1_pin, relay1_state);
Serial.print("Relay1 State = ");
Serial.println(relay1_state);
delay(50);
}
else if(relay == 2){
relay2_state = !relay2_state;
digitalWrite(relay2_pin, relay2_state);
delay(50);
}
}