Use Blynk for home automation and if internet not connects then a led switches on to indicate that the device is disconnected

I want to use Blynk standalone with smartconfig for my home automation but I want a change that if the internet fails to connect then a led light will indicate that it is not connected I am using D1 mini V2 NodeMcu board for that with 4 channel relay. Kindly help me with the code.

Are you talking about a physical LED attached to the Wemos D1 Mini, or an LED widget in the app?

Pete.

1 Like

I am talking about a physical LED. The led will turned off when it will be connected to internet and turns on when the internet connection is lost.

This is just a snippet code.

void connectionStat() {
  if (Blynk.connected()) {
    Blynk.run();
    digitalWrite(LED, LOW);/////// 
  } else if (ReCnctFlag == 0) {
    ReCnctFlag = 1;
    digitalWrite(LED, HIGH);/////// 
    Serial.println("Starting reconnection timer in 10 seconds...");
    timer.setTimeout(10000L, []() {
      ReCnctFlag = 0;
      ReCnctCount++;
      Serial.print("Attempting reconnection #");
      Serial.println(ReCnctCount);
      Blynk.connect();
    });
  }
}

I’m a beginner. Can you provide me with the full code? Thanks in advance :sweat_smile:

You can use Sketch Builder. Everything is ready here

Study the code.
Later add the function i have given. call the function using Blynk timer or place it inside the loop.
define the LED pins and change it in the snippet code provided.

Then its better you start to learn basics of C++. You can find many good pieces of code in this forum which will help you to grab things more quickly…

the above post is from @Gunner there are some really interesting code going on. Study this for having an idea.

1 Like

Thank you for your kind response, I will surely look out these codes. Thank you for the shared links.

Can you check what’s wrong with this code?

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "YourAuthToken";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";
int ReCnctFlag;
int ReCnctCount;
void setup()
{
  // Debug console
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT); 
  Blynk.begin(auth, ssid, pass);
}
void connectionStat() {
  if (Blynk.connected()) {
    Blynk.run();
    digitalWrite(LED_BUILTIN, LOW);/////// 
  } else if (ReCnctFlag == 0) {
    ReCnctFlag = 1;
    digitalWrite(LED_BUILTIN, HIGH);/////// 
    Serial.println("Starting reconnection timer in 10 seconds...");
    timer.setTimeout(10000L, []() {
      ReCnctFlag = 0;
      ReCnctCount++;
      Serial.print("Attempting reconnection #");
      Serial.println(ReCnctCount);
      Blynk.connect();
    });
  }
}

void loop()
{
  Blynk.run();
}

And can anyone tell me how to deal with multiple libraries found error?

Hey look at the above code. But I can’t find what’s wrong. Please help.

Try putting

timer.run(); 

in the void loop you have timers in your code but are never telling it to run. Also remove the simple timer library in the declarations and add a

BlynkTimer timer;

instance somewhere up top.

It compiled successfully but the led function is not working. Check the code any rectify my mistake.

    #define BLYNK_PRINT Serial
    #include <ESP8266WiFi.h>
    #include <BlynkSimpleEsp8266.h>

BlynkTimer timer;

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "";
char pass[] = "";
int ReCnctFlag;
int ReCnctCount;
void setup()
{
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  // Missing and added. This part is responsible for the connection to the router!
  //Otherwise it's okay!
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT); 
  Blynk.begin(auth, ssid, pass);
}
void connectionStat() {
  if (Blynk.connected()) {
    Blynk.run();
    digitalWrite(LED_BUILTIN, LOW);/////// 
  } else if (ReCnctFlag == 0) {
    ReCnctFlag = 1;
    digitalWrite(LED_BUILTIN, HIGH);/////// 
    Serial.println("Starting reconnection timer in 10 seconds...");
    timer.setTimeout(10000L, []() {
      ReCnctFlag = 0;
      ReCnctCount++;
      Serial.print("Attempting reconnection #");
      Serial.println(ReCnctCount);
      Blynk.connect();
    });
  }
}

void loop()
{
  timer.run(); 
  Blynk.run();
}

Ok, you have created the function connectionStat(), but now you need to call this function every x seconds. So, try to put

timer.setInterval(5000L, connectionStat); //call connectionStat every 5 seconds

inside the void setup().
Furthermore I would modify the void loop() in this way:

void loop()
{
  if (Blynk.connected()) {
    Blynk.run();
  }
  timer.run();
}

DG

1 Like

Thanks man it really worked.

Thanks to all who helped me for the coding specially [mimmo13], [daveblynk] and [Madhukesh] (https://community.blynk.cc/u/Madhukesh) (https://community.blynk.cc/u/daveblynk)(https://community.blynk.cc/u/mimmo13). Now my code is completed have a look at the code and suggest changes if any required. (project in brief: Making a home automation project with 4 channel relays and blynk app). So here’s the code:

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
BlynkTimer timer;

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "authcode";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "SSID";
char pass[] = "Pass";
int ReCnctFlag;
int ReCnctCount;
int LED = 16; //D0

int relay1State = LOW;
int relay2State = LOW;
int relay3State = LOW;
int relay4State = LOW;


#define RELAY_PIN_1      5   //D1
#define RELAY_PIN_2      4   //D2
#define RELAY_PIN_3      12   //D6
#define RELAY_PIN_4      13   //D7

#define VPIN_BUTTON_1    V12 
#define VPIN_BUTTON_2    V13
#define VPIN_BUTTON_3    V14
#define VPIN_BUTTON_4    V15  

BLYNK_CONNECTED() {

  Blynk.syncVirtual(VPIN_BUTTON_1);
  Blynk.syncVirtual(VPIN_BUTTON_2);
  Blynk.syncVirtual(VPIN_BUTTON_3);
  Blynk.syncVirtual(VPIN_BUTTON_4);

 }

BLYNK_WRITE(VPIN_BUTTON_1) {
  relay1State = param.asInt();
  digitalWrite(RELAY_PIN_1, relay1State);
}

BLYNK_WRITE(VPIN_BUTTON_2) {
  relay2State = param.asInt();
  digitalWrite(RELAY_PIN_2, relay2State);
}
BLYNK_WRITE(VPIN_BUTTON_3) {
  relay3State = param.asInt();
  digitalWrite(RELAY_PIN_3, relay3State);
}
BLYNK_WRITE(VPIN_BUTTON_4) {
  relay4State = param.asInt();
  digitalWrite(RELAY_PIN_4, relay4State);
}

void setup()
{
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);
  timer.setInterval(5000L, connectionStat); //call connectionStat every 5 seconds

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  // Missing and added. This part is responsible for the connection to the router!
  //Otherwise it's okay!
  Serial.begin(9600);
  pinMode(LED, OUTPUT); 
  Blynk.begin(auth, ssid, pass);

  pinMode(RELAY_PIN_1, OUTPUT);
  digitalWrite(RELAY_PIN_1, relay1State);

   pinMode(RELAY_PIN_2, OUTPUT);
   digitalWrite(RELAY_PIN_2, relay2State);

   pinMode(RELAY_PIN_3, OUTPUT);
   digitalWrite(RELAY_PIN_3, relay3State);

   pinMode(RELAY_PIN_4, OUTPUT);
   digitalWrite(RELAY_PIN_4, relay4State);
}
void connectionStat() {
  if (Blynk.connected()) {
    Blynk.run();
    digitalWrite(LED, LOW);/////// 
  } else if (ReCnctFlag == 0) {
    ReCnctFlag = 1;
    digitalWrite(LED, HIGH);/////// 
    Serial.println("Starting reconnection timer in 1 seconds...");
    timer.setTimeout(1000L, []() {
      ReCnctFlag = 0;
      ReCnctCount++;
      Serial.print("Attempting reconnection #");
      Serial.println(ReCnctCount);
      Blynk.connect();
    });
  }
}

void loop()
{
  if (Blynk.connected()) {
    Blynk.run();
  }
  timer.run();
}

If any change is requied kindly comment. Every reply is appreciated ! Thank you once again.

1 Like

It’s almost midnight here in Italy so I’m not thinking straight :sleeping:. However the code seems ok.

DG

1 Like

good this code can I print it in my project? i use wifimanager

#include <FS.h>    
//#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h> 
#include <ArduinoJson.h>
//for LED status
#include <Ticker.h>
Ticker ticker;

bool alarm_mode = false ;
bool verificador = false;
//int led_placa = 2;
int sensor = 5;
int buzzer = 15;
int alarm_led = 4;
int alarm_led_off = 0;
int indicador = 13;
int ledPin = 14;
int contconexion = 0;
int conteoReactivacion = 0;
int ledState = LOW;             // ledState used to set the LED
int VirtualPinA = 3;
    
//define your default values here, if there are different values in config.json, they are overwritten.
char mqtt_server[40];
char mqtt_port[6] = "8080";
char blynk_token[34] = "ymzp8hEq9d4UmNguWdvF7PhDj8nVUTlc"; 

//flag for saving data
bool shouldSaveConfig = false;

//callback notifying us of the need to save config

void tick()
{
  //toggle state
  int state = digitalRead(indicador);  // get the current state of GPIO1 pin
  digitalWrite(indicador, !state);     // set pin to the opposite state
}

void ledState1()
{
   if (ledState == LOW) {
      ledState = HIGH;
      Blynk.virtualWrite(VirtualPinA, 0);
     
    } else {
      ledState = LOW;
      Blynk.virtualWrite(VirtualPinA, 1023);
     
    }
  }

//gets called when WiFiManager enters configuration mode
void configModeCallback (WiFiManager *myWiFiManager) {
  Serial.println("Entered config mode");
  Serial.println(WiFi.softAPIP());
  //if you used auto generated SSID, print it
  Serial.println(myWiFiManager->getConfigPortalSSID());
  //entered config mode, make led toggle faster
  ticker.attach(0.2, tick);
}
void saveConfigCallback () {
  Serial.println("Should save config");
  shouldSaveConfig = true;
  }
// Keep this flag not to re-sync on every reconnection
bool isFirstConnect = true;
// This function will run every time Blynk connection is established
BLYNK_CONNECTED() 
{
  if (isFirstConnect) 
  {
    // Request Blynk server to re-send latest values for all pins
    Blynk.syncAll();
    isFirstConnect = false;
  }
}

  BlynkTimer timer;
void myTimerEvent() {
//Serial.println("Tiempo des en seg: " + String(conteoReactivacion));
  if (alarm_mode == false) {
    conteoReactivacion++;
    if (conteoReactivacion >= 1800) { 
      Blynk.virtualWrite(V1, 1);
      digitalWrite(alarm_led, HIGH);
      digitalWrite(alarm_led_off, LOW);
      alarm_mode = true;
    }
  } else {
    conteoReactivacion = 0;
  }
  if (digitalRead(sensor) == 0) {
    Blynk.virtualWrite(V0, "NORMAL");
    delay(3000);   // Tiempo de demora al recibir señal de disparo
  }
  if (digitalRead(sensor) == 1)

  {
    Blynk.virtualWrite(V0, "ALERTA");
    
    if (alarm_mode == true)
      //AUTOR ALEXIS MORA
    {
      Blynk.email("clianaloss01@gmail.com", "Historial de Alarmas", "Alarma Disparo");
      Blynk.notify("Alarma Disparo");
      digitalWrite(buzzer, HIGH);
      delay(500);
      digitalWrite(buzzer, LOW);
    }                                                                                  
  }
}
BLYNK_WRITE(V1) {
  Serial.println(param.asInt());
  switch (param.asInt()) {
    case 1: {
        alarm_mode = true;
        digitalWrite(alarm_led, HIGH);
        digitalWrite(alarm_led_off, LOW);
        break;
      }
    case 2: {
        alarm_mode = false;
        digitalWrite(buzzer, LOW);
        digitalWrite(alarm_led, LOW);
        digitalWrite(alarm_led_off, HIGH);
        break;
    }    
  }
}

void setup()
{
  pinMode(sensor, INPUT_PULLUP);
  pinMode(buzzer, OUTPUT);
  pinMode(alarm_led, OUTPUT);
  pinMode(alarm_led_off, OUTPUT);
  pinMode(indicador, OUTPUT);
//pinMode(led_placa, OUTPUT);
//pinMode(BUILTIN_LED, OUTPUT);
//start ticker with 0.5 because we start in AP mode and try to connect
  ticker.attach(0.6, tick);
 
  // Debug console
  Serial.begin(115200);
   Serial.println();
   
  //clean FS, for testing
  //SPIFFS.format();
 // Blynk.begin(auth, ssid, pass);
  // Setup a function to be called every second
  timer.setInterval(1000L, myTimerEvent);
  timer.setInterval(1000L, ledState1); //timer will run every sec 

  // put your setup code here, to run once:
  
  //clean FS, for testing
  //SPIFFS.format();

  //read configuration from FS json
  Serial.println("mounting FS...");

  if (SPIFFS.begin()) {
    Serial.println("mounted file system");
    if (SPIFFS.exists("/config.json")) {
      //file exists, reading and loading
      Serial.println("reading config file");
      File configFile = SPIFFS.open("/config.json", "r");
      if (configFile) {
        Serial.println("opened config file");
        size_t size = configFile.size();
        // Allocate a buffer to store contents of the file.
        std::unique_ptr<char[]> buf(new char[size]);

        configFile.readBytes(buf.get(), size);
        DynamicJsonBuffer jsonBuffer;
        JsonObject& json = jsonBuffer.parseObject(buf.get());
        json.printTo(Serial);
        if (json.success()) {
          Serial.println("\nparsed json");

          //strcpy(mqtt_server, json["mqtt_server"]);
         //strcpy(mqtt_port, json["mqtt_port"]);
          strcpy(blynk_token, json["blynk_token"]);

        } else {
          Serial.println("failed to load json config");
        }
        configFile.close();
      }
    }
  } else {
    Serial.println("failed to mount FS");
  }
  //end read

  // The extra parameters to be configured (can be either global or just in the setup)
  // After connecting, parameter.getValue() will get you the configured value
  // id/name placeholder/prompt default length
  //WiFiManagerParameter custom_mqtt_server("server", "mqtt server", mqtt_server, 40);
  //WiFiManagerParameter custom_mqtt_port("port", "mqtt port", mqtt_port, 6);
  WiFiManagerParameter custom_blynk_token("blynk", "blynk token", blynk_token, 34);

  //WiFiManager
  //Local intialization. Once its business is done, there is no need to keep it around
  WiFiManager wifiManager;

  //set config save notify callback
  wifiManager.setSaveConfigCallback(saveConfigCallback);

  //set static ip
  //wifiManager.setSTAStaticIPConfig(IPAddress(10,0,1,99), IPAddress(10,0,1,1), IPAddress(255,255,255,0));
  
  //add all your parameters here
  //wifiManager.addParameter(&custom_mqtt_server);
  //wifiManager.addParameter(&custom_mqtt_port);
  wifiManager.addParameter(&custom_blynk_token);

  //reset settings - for testing
  //wifiManager.resetSettings(); //borra usuario y contraseña cuando esta linea esta sin comentar al grabar.
  //set callback that gets called when connecting to previous WiFi fails, and enters Access Point mode
  wifiManager.setAPCallback(configModeCallback);
  //set minimu quality of signal so it ignores AP's under that quality
   //  defaults to 8%
  wifiManager.setMinimumSignalQuality( 20 );
  
  //sets timeout until configuration portal gets turned off
  //useful to make it all retry or go to sleep
  //in seconds
  wifiManager.setTimeout(120);

  //fetches ssid and pass and tries to connect
  //if it does not connect it starts an access point with the specified name
  //here  "AutoConnectAP"
  //and goes into a blocking loop awaiting configuration
  if (!wifiManager.autoConnect("NanoWifi", "12345678")) {
    Serial.println("failed to connect and hit timeout");
    delay(3000);
    //reset and try again, or maybe put it to deep sleep
    ESP.reset();
    delay(5000);
  }

  //if you get here you have connected to the WiFi
  Serial.println("connected...yeey :)");

  //read updated parameters
  //strcpy(mqtt_server, custom_mqtt_server.getValue());
  //strcpy(mqtt_port, custom_mqtt_port.getValue());
  strcpy(blynk_token, custom_blynk_token.getValue());

  //save the custom parameters to FS
  if (shouldSaveConfig) {
    Serial.println("saving config");
    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.createObject();
    //json["mqtt_server"] = mqtt_server;
   // json["mqtt_port"] = mqtt_port;
    json["blynk_token"] = blynk_token;

    File configFile = SPIFFS.open("/config.json", "w");
    if (!configFile) {
      Serial.println("failed to open config file for writing");
    }

    json.printTo(Serial);
    json.printTo(configFile);
    configFile.close();
    //end save
  }

 while (WiFi.status() != WL_CONNECTED) {
       int mytimeout = 5;
       delay(500);
       Serial.print(".");
       if((millis() / 1000) > mytimeout ){ // try for less than 6 seconds to connect to WiFi router
         Serial.println(" ");
          break;
          }
   }

  if(WiFi.status() == WL_CONNECTED){  
    //if you get here you have connected to the WiFi
   Serial.println(" ");
   Serial.println("connected to WiFi!! yay :)");
   Serial.println("IP address: ");
   Serial.println(WiFi.localIP()); 
  ticker.detach();
  //keep LED on
  digitalWrite(indicador, HIGH);
}
 
  Blynk.config(blynk_token);
  bool result = Blynk.connect();

  if (result != true)
  {
  Serial.println("BLYNK Connection Fail");
  Serial.println(blynk_token);
  wifiManager.resetSettings();  
  ESP.reset();
  delay (1000);
  }
    }
  
void loop()
{
  Blynk.run();
  timer.run(); // Initiates BlynkTimer  
}