#define BLYNK_TEMPLATE_ID "TMPL3oAuUZ6A1"
#define BLYNK_TEMPLATE_NAME "404453464781073409"
#define BLYNK_AUTH_TOKEN "2gluLTuaLlBTsuUScys45ZcWrQZZ83qN"
#define BLYNK_PRINT Serial

#include <BlynkSimpleEsp32.h>
#include <WiFi.h>
#include <WiFiClient.h>

#define button1_vpin V1
#define button2_vpin V2
#define button3_vpin V3
#define button4_vpin V4

#define button1_pin 17
#define button2_pin 16
#define button3_pin 4
#define button4_pin 0

#define relay1_pin 21
#define relay2_pin 19
#define relay3_pin 18
#define relay4_pin 5

char auth[] = BLYNK_AUTH_TOKEN;

char ssid[] = "Wokwi-GUEST";
char pass[] = "";

BlynkTimer timer;

int relay1_state = 0;
int relay2_state = 0;
int relay3_state = 0;
int relay4_state = 0;

BLYNK_CONNECTED ()
{
  Blynk.syncVirtual (button1_vpin);
  Blynk.syncVirtual (button2_vpin);
  Blynk.syncVirtual (button3_vpin);
  Blynk.syncVirtual (button4_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);
}
//--------------------------------------------------------------------------
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 ()
{
  // Debug console
  Serial.begin (115200);
  //--------------------------------------------------------------------
  pinMode (button1_pin, INPUT_PULLUP);
  pinMode (button2_pin, INPUT_PULLUP);
  pinMode (button3_pin, INPUT_PULLUP);
  pinMode (button4_pin, INPUT_PULLUP);
  //--------------------------------------------------------------------
  pinMode (relay1_pin, OUTPUT);
  pinMode (relay2_pin, OUTPUT);
  pinMode (relay3_pin, OUTPUT);
  pinMode (relay4_pin, OUTPUT);
  //--------------------------------------------------------------------
  // During Starting all Relays should TURN OFF
  digitalWrite (relay1_pin, HIGH);
  digitalWrite (relay2_pin, HIGH);
  digitalWrite (relay3_pin, HIGH);
  digitalWrite (relay4_pin, HIGH);

  Blynk.begin (auth, ssid, pass);
}

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
    }
  //--------------------------------------------------------------------------
  else if (digitalRead (button3_pin) == LOW)
    {
      delay (200);
      control_relay (3);
      Blynk.virtualWrite (button3_vpin, relay3_state); // update button state
    }
  //--------------------------------------------------------------------------
  else if (digitalRead (button4_pin) == LOW)
    {
      delay (200);
      control_relay (4);
      Blynk.virtualWrite (button4_vpin, relay4_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);
    }
  //------------------------------------------------
  else if (relay == 3)
    {
      relay3_state = !relay3_state;
      digitalWrite (relay3_pin, relay3_state);
      delay (50);
    }
  //------------------------------------------------
  else if (relay == 4)
    {
      relay4_state = !relay4_state;
      digitalWrite (relay4_pin, relay4_state);
      delay (50);
    }
  //------------------------------------------------
}
$abcdeabcde151015202530fghijfghij
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module