here is my code
//#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h> // here is the SimpleTimer library
#include <TimeLib.h> // Used by WidgetRTC.h
SimpleTimer timer;
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxx";
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "chaitanyak";
char pass[] = "9510574409";
// Lighting control pins and AC feedback
int RELAY1_PIN = 16; // Relay 1 pin
int RELAY2_PIN = 5; // Relay 2 pin
int RELAY3_PIN = 4; // Relay 3 pin
int RELAY4_PIN = 0; // Relay 4 pin
int AC_Sens1_pin = 2; // Relay 1 ac sens pin
int AC_Sens2_pin = 14; // Relay 2 ac sens pin
int AC_Sens3_pin = 12; // Relay 3 ac sens pin
int AC_Sens4_pin = 13; // Relay 4 ac sens pin
int feedback1; // AC feedback variable
int feedback2; // AC feedback variable
int feedback3; // AC feedback variable
int feedback4; // AC feedback variable
int feedback5; // AC feedback variable
int feedback6; // AC feedback variable
int feedback7; // AC feedback variable
int feedback8; // AC feedback variable
void setup()
{
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
pinMode(RELAY3_PIN, OUTPUT);
pinMode(RELAY4_PIN, OUTPUT);
pinMode(AC_Sens1_pin, INPUT);
pinMode(AC_Sens2_pin, INPUT);
pinMode(AC_Sens3_pin, INPUT);
pinMode(AC_Sens4_pin, INPUT);
// Default ALL relays to OFF before reinstating stored states
digitalWrite(RELAY1_PIN, 0);
digitalWrite(RELAY2_PIN, 0);
digitalWrite(RELAY3_PIN, 0);
digitalWrite(RELAY4_PIN, 0);
//Lets sync up all the store states for the V pins and load the appropriate variables listed below
Blynk.syncVirtual(V3); // Light 1 Relay state
Blynk.syncVirtual(V6); // Light 2 Relay state
Blynk.syncVirtual(V9); // Light 3 Relay state
Blynk.syncVirtual(V12); // Light 4 Relay state
timer.setInterval(300, AC_detect); // Check AC_detect for AC presence every 50 milliseconds
}
void loop()
{
Blynk.run();
timer.run();
}
void AC_detect()
{
feedback1 = digitalRead(AC_Sens1_pin); // Read the digital pin for an AC input
feedback3 = digitalRead(AC_Sens2_pin); // Read the digital pin for an AC input
feedback5 = digitalRead(AC_Sens3_pin); // Read the digital pin for an AC input
feedback7 = digitalRead(AC_Sens4_pin); // Read the digital pin for an AC input
// update SWITCH widget state only if AC input has changed since last check
// this prevents widget switch bounce on the app device screen
if (feedback1 != feedback2) Blynk.virtualWrite(V2, !feedback1);
if (feedback3 != feedback4) Blynk.virtualWrite(V5, !feedback3);
if (feedback5 != feedback6) Blynk.virtualWrite(V8, !feedback5);
if (feedback7 != feedback8) Blynk.virtualWrite(V11, !feedback7);
feedback2 = feedback1;
feedback4 = feedback3;
feedback6 = feedback5;
feedback8 = feedback7;
}
// Sync up all of the virtual pin data
BLYNK_WRITE(V2) // Runs every-time switch widget is toggled - For Light 1
BLYNK_WRITE(V5) // Runs every-time switch widget is toggled - For Light 2
BLYNK_WRITE(V8) // Runs every-time switch widget is toggled - For Light 3
BLYNK_WRITE(V11) // Runs every-time switch widget is toggled - For Light 4
{
digitalWrite(RELAY1_PIN, !digitalRead(RELAY1_PIN)); // Toggle relay1
digitalWrite(RELAY2_PIN, !digitalRead(RELAY2_PIN)); // Toggle relay2
digitalWrite(RELAY3_PIN, !digitalRead(RELAY3_PIN)); // Toggle relay3
digitalWrite(RELAY4_PIN, !digitalRead(RELAY4_PIN)); // Toggle relay4
Blynk.virtualWrite(V3, digitalRead(RELAY1_PIN)); // Store Light 1 relay state in V3
Blynk.virtualWrite(V6, digitalRead(RELAY2_PIN)); // Store Light 2 relay state in V6
Blynk.virtualWrite(V9, digitalRead(RELAY3_PIN)); // Store Light 3 relay state in V9
Blynk.virtualWrite(V12, digitalRead(RELAY4_PIN)); // Store Light 4 relay state in V12
}
BLYNK_WRITE(V3)
BLYNK_WRITE(V6)
BLYNK_WRITE(V9)
BLYNK_WRITE(V12)
{
int pinData = param.asInt();
digitalWrite(RELAY1_PIN, pinData); // and reinstate relay state
digitalWrite(RELAY2_PIN, pinData); // and reinstate relay state
digitalWrite(RELAY3_PIN, pinData); // and reinstate relay state
digitalWrite(RELAY4_PIN, pinData); // and reinstate relay state
}