#define BLYNK_TEMPLATE_ID "***********"
#define BLYNK_DEVICE_NAME "Home Automation"
#define BLYNK_AUTH_TOKEN "********************"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST"; // Your WiFi SSID
char pass[] = ""; // Your WiFi Password
BlynkTimer timer;
// Define Button and Relay Pins
#define button1_pin 26
#define button2_pin 25
#define button3_pin 33
#define button4_pin 32
#define relay1_pin 13
#define relay2_pin 12
#define relay3_pin 14
#define relay4_pin 27
// Virtual Pins for Blynk App
#define button1_vpin V1
#define button2_vpin V2
#define button3_vpin V3
#define button4_vpin V4
int relay1_state = 0;
int relay2_state = 0;
int relay3_state = 0;
int relay4_state = 0;
// Sync latest state from Blynk Cloud
BLYNK_CONNECTED() {
Blynk.syncVirtual(button1_vpin);
Blynk.syncVirtual(button2_vpin);
Blynk.syncVirtual(button3_vpin);
Blynk.syncVirtual(button4_vpin);
}
// Blynk App Controls
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);
}
BLYNK_WRITE(button3_vpin) {
relay3_state = param.asInt();
digitalWrite(relay3_pin, relay3_state);
}
BLYNK_WRITE(button4_vpin) {
relay4_state = param.asInt();
digitalWrite(relay4_pin, relay4_state);
}
void setup() {
Serial.begin(115200);
// Initialize Buttons as INPUT_PULLUP
pinMode(button1_pin, INPUT_PULLUP);
pinMode(button2_pin, INPUT_PULLUP);
pinMode(button3_pin, INPUT_PULLUP);
pinMode(button4_pin, INPUT_PULLUP);
// Initialize Relays as OUTPUT (Active LOW)
pinMode(relay1_pin, OUTPUT);
pinMode(relay2_pin, OUTPUT);
pinMode(relay3_pin, OUTPUT);
pinMode(relay4_pin, OUTPUT);
// Ensure all relays start OFF
digitalWrite(relay1_pin, HIGH);
digitalWrite(relay2_pin, HIGH);
digitalWrite(relay3_pin, HIGH);
digitalWrite(relay4_pin, HIGH);
// Connect to Blynk Cloud
Blynk.begin(auth, ssid, pass);
timer.setInterval(200L, listen_push_buttons); // Check button state every 200ms
}
void loop() {
Blynk.run();
timer.run();
}
// Function to Listen for Push Button Press
void listen_push_buttons() {
if (digitalRead(button1_pin) == LOW) {
delay(50); // Debounce
toggle_relay(1);
Blynk.virtualWrite(button1_vpin, relay1_state);
}
if (digitalRead(button2_pin) == LOW) {
delay(50);
toggle_relay(2);
Blynk.virtualWrite(button2_vpin, relay2_state);
}
if (digitalRead(button3_pin) == LOW) {
delay(50);
toggle_relay(3);
Blynk.virtualWrite(button3_vpin, relay3_state);
}
if (digitalRead(button4_pin) == LOW) {
delay(50);
toggle_relay(4);
Blynk.virtualWrite(button4_vpin, relay4_state);
}
}
// Function to Toggle Relay State
void toggle_relay(int relay) {
if (relay == 1) {
relay1_state = !relay1_state;
digitalWrite(relay1_pin, relay1_state);
Serial.print("Relay 1 State: ");
Serial.println(relay1_state);
} else if (relay == 2) {
relay2_state = !relay2_state;
digitalWrite(relay2_pin, relay2_state);
Serial.print("Relay 2 State: ");
Serial.println(relay2_state);
} else if (relay == 3) {
relay3_state = !relay3_state;
digitalWrite(relay3_pin, relay3_state);
Serial.print("Relay 3 State: ");
Serial.println(relay3_state);
} else if (relay == 4) {
relay4_state = !relay4_state;
digitalWrite(relay4_pin, relay4_state);
Serial.print("Relay 4 State: ");
Serial.println(relay4_state);
}
}
Loading
esp32-devkit-c-v4
esp32-devkit-c-v4
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO
relay2:VCC
relay2:GND
relay2:IN
relay2:NC
relay2:COM
relay2:NO
relay3:VCC
relay3:GND
relay3:IN
relay3:NC
relay3:COM
relay3:NO
relay4:VCC
relay4:GND
relay4:IN
relay4:NC
relay4:COM
relay4:NO
vcc1:VCC
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
vcc2:VCC
gnd2:GND
gnd4:GND