I need help with virtual led in app to see wifi connection status

Hello people I just started with this programming I have a code which wifimanager added successfully! Now I am trying to add a status led in the application but I can’t quite understand how it is done … I tried several codes but it did not work, the virtual led would use it to know when it is online or when it is offline, (in the clones of the app does not appear that indicator) I do not need it to flash, only that it remains on fixed when being online and offline off … I hope you can help me Thank you

#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>    
//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] = "zUDZm-EtQq9arxeaE1IJZtAjFi_uCI3L";

//flag for saving data
bool shouldSaveConfig = false;

//callback notifying us of the need to save config
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
  if (isFirstConnect) 
    // Request Blynk server to re-send latest values for all pins
    isFirstConnect = false;
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 boton = 12;
int indicador = 13;
int ledPin = 14;
int contconexion = 0;
int conteoReactivacion = 0;

  BlynkTimer timer;
void myTimerEvent() {
// Serial.println("Tiempo des en seg: " + String(conteoReactivacion));
  if (alarm_mode == false) {
    if (conteoReactivacion >= 600) { //son 30 minutos es 1800 segundos dividido en 3 da 600 segundos por el delay que se le da a V0 de 3000 milisegundos para retrasar el pulso de disparo por 3 segundos
      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");
  if (digitalRead(sensor) == 1)

    Blynk.virtualWrite(V0, "ALERTA");
    if (alarm_mode == true)
      Blynk.email("ale24cba@gmail.com", "Historial de Alarmas", "Alarma Disparo");
      Blynk.notify("Alarma Disparo");
      digitalWrite(buzzer, HIGH);
      digitalWrite(buzzer, LOW);
  switch (param.asInt()) {
    case 1: {
        alarm_mode = true;
        digitalWrite(alarm_led, HIGH);
        digitalWrite(alarm_led_off, LOW);
    case 2: {
        alarm_mode = false;
        digitalWrite(buzzer, LOW);
        digitalWrite(alarm_led, LOW);
        digitalWrite(alarm_led_off, HIGH);

void setup()
  pinMode(sensor, INPUT_PULLUP);
  pinMode(buzzer, OUTPUT);
  pinMode(alarm_led, OUTPUT);
  pinMode(alarm_led_off, OUTPUT);
  //pinMode(boton, INPUT);
  pinMode(indicador, OUTPUT);
  pinMode(led_placa, OUTPUT);
  // Debug console
  //clean FS, for testing
 // Blynk.begin(auth, ssid, pass);
  // Setup a function to be called every second
  timer.setInterval(1000L, myTimerEvent);

  // put your setup code here, to run once:
  //clean FS, for testing

  //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());
        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");
  } 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);

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

  //set config save notify callback

  //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

  //reset settings - for testing

  //set minimu quality of signal so it ignores AP's under that quality
   //  defaults to 8%
  //sets timeout until configuration portal gets turned off
  //useful to make it all retry or go to sleep
  //in seconds

  //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");
    //reset and try again, or maybe put it to deep sleep

  //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");

    //end save

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

   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: ");
   digitalWrite(indicador, HIGH);
  bool result = Blynk.connect();

  if (result != true)
  Serial.println("BLYNK Connection Fail");
 wifiManager.resetSettings();  //borra usuario y contraseña al grabar
  //delay (5000);
  Serial.println("BLYNK Connected!! Yay again");
 else if (WiFi.status() != WL_CONNECTED){
  Serial.println("WiFi Connection Fail");


void loop(){
  timer.run(); // Initiates BlynkTimer

I assume by this that you mean you’ve shared the app rather than cloned it, and only the owner of the app can see Blynk’s built-in online status indicator at the top of the screen?

It’s not possible to update a widget in the app (to turn a WiFi indicator off for example) if there is no connection to the Blynk server, so what you are asking is impossible in the code running on your device.

What some people do is to use the millis() function to drive an ‘uptime’ indicator. This will show the time in milliseconds (although you’d be better dividing this by 1000 to give the time in seconds) since the device booted. If you push this value to the app every second then if the device goes offline for whatever reason the uptime display will stop incrementing.


happy new year pet, I was able to solve the problem I found this code and it works perfect