if this can help you, my non-blocking code
/***************** Library ESP and Blynk *****************/
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
/***************** Library for OTA *****************/
#include <WiFiUdp.h> // For OTA
#include <ArduinoOTA.h> // For OTA
#include <ESP8266mDNS.h>
/***************** Library for real-time clock *****************/
#include <TimeLib.h>
#include <WidgetRTC.h>
BlynkTimer timer;
WidgetRTC rtc;
/*************** Server *********************/
char auth[] = "xxxxxxxxxxxxx";
char ssid[] = "xxxxxxxxxxxxxxxx";
char pass[] = "xxxxxxxxxxxxxxxxxxx";
char server[] = "192, 168, 0, 1";
IPAddress arduino_ip ( 192, 168, 0, 56);
IPAddress dns_ip ( 8, 8, 8, 8);
IPAddress gateway_ip ( 192, 168, 0, 254);
IPAddress subnet_mask(255, 255, 255, 0);
/*************** 4 Relays *********************/
int relay1 = 5;
int relay2 = 4;
int relay3 = 16;
int relay4 = 2;
int ON =0;
int OFF = 1;
int RelayBTN1 = 0;
int RelayBTN2 = 0;
int RelayBTN3 = 0;
int RelayBTN4 = 0;
/*************** LEDS *********************/
WidgetLED led1(10); //virtual led
WidgetLED led2(11); //virtual led
WidgetLED led3(12); //virtual led
WidgetLED led4(13); //virtual
WidgetLED led5(14); //virtual
WidgetLED led6(15); //virtual
WidgetLED led7(16); //virtual
WidgetLED led8(17); //virtual
/*************** Setup *********************/
void setup()
{
Serial.begin(115200);
WiFi.config(arduino_ip, gateway_ip, subnet_mask);
Blynk.begin(auth, ssid, pass, IPAddress(192, 168, 0, 1), 8088);
//Blynk.begin(auth, ssid, pass, IPAddress(192, 168, 0, 1), 8442);
/************************ OTA ***************/
ArduinoOTA.setHostname("Nodemcu02"); //OTA Set the name of the network port
ArduinoOTA.setPassword((const char *)"0000"); //OTA Set access password for remote firmware
ArduinoOTA.begin(); //Initialize OTA
Serial.println("Ready");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);
}
/*************** buttons *********************/
BLYNK_WRITE(V1)
{
RelayBTN1 = param.asInt();
if (RelayBTN1 == true) {
digitalWrite(relay1, ON);
Serial.println("relay1 on");
led1.on();
led2.off();
}
else {
digitalWrite(relay1,OFF);
Serial.println("relay1 off");
led1.off();
led2.on();
}
}
BLYNK_WRITE(V2)
{
RelayBTN2 = param.asInt();
if (RelayBTN2 == true) {
digitalWrite(relay2,ON);
Serial.println("relay2 on");
led3.on();
led4.off();
}
else {
digitalWrite(relay2,OFF);
Serial.println("relay2 off");
led3.off();
led4.on();
}
}
BLYNK_WRITE(V3)
{
RelayBTN3 = param.asInt();
if (RelayBTN3 == true) {
digitalWrite(relay3,ON);
Serial.println("relay3 on");
led5.on();
led6.off();
}
else {
digitalWrite(relay3,OFF);
Serial.println("relay3 off");
led5.off();
led6.on();
}
}
BLYNK_WRITE(V4)
{
RelayBTN4 = param.asInt();
if (RelayBTN4 == true) {
digitalWrite(relay4,ON);
Serial.println("relay4 on");
led7.on();
led8.off();
}
else {
digitalWrite(relay4,OFF);
Serial.println("relay4 off");
led7.off();
led8.on();
}
}
void loop() {
ArduinoOTA.handle(); // For OTA
Blynk.run();
timer.run();
ESP.wdtFeed();
}