Оффлайн и онлайн

Привет всем. в этом коде есть проблема. Я добавил фунйцию каторое разрешает мне изменить даные val и val1 в офлаын режиме. все работал хорашо пока я не подключился к интернету. измененыые даные val и val1 не появились на платформе blynk. в blynk сохранились даные до патерии итернета а при востанавлении интернета измененые даные val и val1 не выводились. Как можно решить эту проблему

/***********Blynk***********/
  #define BLYNK_TEMPLATE_ID  "Tdy"
  #define BLYNK_TEMPLATE_NAME  "Quate"
  #define BLYNK_AUTH_TOKEN  "pYKEp"
  #define BLYNK_PRINT Serial          //Прокомментируйте это, чтобы отключить печать и сэкономить место ;)
  char ssid[] = "Sil";
  char pass[] = "mushex077petr";
/**********Library**********/
  #include <WiFi.h>
  #include <WiFiClient.h>
  #include <BlynkSimpleEsp32.h>
  #include <GyverEncoder.h>
  #include <EEPROM.h>
  #include <OneWire.h>
  #include <DallasTemperature.h>
/***********DS18B20*********/
  #define ONE_WIRE_BUS 15 // Пин для DS18B20
  OneWire oneWire(ONE_WIRE_BUS);
  DallasTemperature sensors(&oneWire);
/***********Ky-040**********/
  #define CLK_PIN 23  
  #define DT_PIN 22  
  #define CLK_PIN1 21 
  #define DT_PIN1 19  
  Encoder enc(CLK_PIN, DT_PIN);
  Encoder enc1(CLK_PIN1, DT_PIN1);
  float val = 0;
  float val1 = 0;
/**отправка данных на Blynk*/
  BlynkTimer timer;
  void myTimerEvent() //Эта функция ежесекундно отправляет время безотказной работы Arduino на виртуальный вывод 2.
  {
    Blynk.virtualWrite(V2, millis() / 1000);
    Blynk.virtualWrite(V1, val);  // Assuming V1 is the virtual pin for val
    Blynk.virtualWrite(V3, val1); // Assuming V3 is the virtual pin for val1
    // Чтение температуры с DS18B20
    sensors.requestTemperatures();
    float temperature = sensors.getTempCByIndex(0);
    Blynk.virtualWrite(V4, temperature); // Замените V4 на номер вашего виджета в Blynk
  }
/************Rele***********/
  #define Rele_1 12 //GV
  #define Rele_3 13 //GN
  #define Rele_2 2 //MV  
  #define Rele_4 4 //MN
bool isConnectedToInternet = false;
void setup()
{
  delay(1500);
  Serial.begin(9600);  
  pinMode(Rele_1, OUTPUT);
  pinMode(Rele_2, OUTPUT);
  pinMode(Rele_3, OUTPUT);
  pinMode(Rele_4, OUTPUT);
  digitalWrite(Rele_1, LOW);
  digitalWrite(Rele_2, LOW);
  digitalWrite(Rele_3, LOW);
  digitalWrite(Rele_4, LOW);
  digitalWrite(Rele_1, HIGH);
  digitalWrite(Rele_2, HIGH);
  digitalWrite(Rele_3, HIGH);
  digitalWrite(Rele_4, HIGH); 
  /////////////////-Blynk-/////////////////
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
  // Настройте функцию, которая будет вызываться каждую секунду
  timer.setInterval(1000L, myTimerEvent);

  enc.setType(TYPE2);
  enc1.setType(TYPE2);

  // Инициализация DS18B20
  sensors.begin(); 
}

void loop()
{
  // Чтение температуры с DS18B20
  sensors.requestTemperatures();
  float temperature = sensors.getTempCByIndex(0);

  /* Вывод температуры на монитор порта
  Serial.print("Температура: ");
  Serial.println(temperature);*/

  if (isConnectedToInternet) {
    Blynk.run();
    timer.run();
  }
  
  /*перезагрузка
  if (!isConnectedToInternet) {
  Serial.println("Потеряно подключение к Интернету. Перезапуск...");
  ESP.restart(); // Перезагрузка устройства
  }*/

  enc.tick();
  enc1.tick();
  if (enc.isTurn()) {
    if (enc.isRight()) {
      val +=0.5;
      if (val > 100) {
        val = 100;
      }
    }
    if (enc.isLeft()) {
      val -=0.5;
      if (val < 0) {
        val = 0;
      }
    }
    Serial.print("Ky-1...");
    Serial.println(val);
  }
  
  if (enc1.isTurn()) {
    if (enc1.isRight()) {
      val1+=0.5;
      if (val1 > 100) {
        val1 = 100;
      }
    }
    if (enc1.isLeft()) {
      val1-=0.5;
      if (val1 < 0) {
        val1 = 0;
      }
    }
    Serial.print("Ky-2...");
    Serial.println(val1);
  }  
}

BLYNK_CONNECTED() {
  Blynk.syncVirtual(V1);
  Blynk.syncVirtual(V3);
  isConnectedToInternet = true; // При подключении к интернету устанавливаем флаг в true
}

BLYNK_DISCONNECTED() {
  isConnectedToInternet = false; // При отключении от интернета устанавливаем флаг в false
}

BLYNK_WRITE(V1) {
  val = param.asFloat();
}

BLYNK_WRITE(V3) {
  val1 = param.asFloat();
}


As I’ve said before, you’re wasting your time trying to do anything that works offline while you continue to use Blynk.begin() as this is a blocking function.

Your BLYNK_CONNECTED() function won’t be processed unless you execute Blynk.run() and you’ve placed this inside and if statement. You also have timer.run() inside that same if statement, so your timer will stop being processed while your isConnectedToInternet flag is false.

This combination makes it impossible for your device to operate correctly.

Until you stop using Blynk.begin() and start managing your Internet connection manually and use Blynk.config() and Blynk.connect() you’ll never properly achieve what you want.

Pete.

тоисть я дожен установить blynk.begin() внутри blynk.config и blynk.connect(). я правельно понял ???
Прастите чт так поздно ответил у меня пк был на ремонте

No, you stop using Blynk.begin altogether.

Pete.

так ка мне использовать функции Blynk.config() и Blynk.connect()

It’s been discussed many times on the forum. Do a quick search and you’ll find lots of information.

Pete.

спосиба за совет. вот так сайдет ?

/***********Blynk***********/
#define BLYNK_TEMPLATE_ID  "T"
#define BLYNK_TEMPLATE_NAME  "Q"
#define BLYNK_AUTH_TOKEN  "Q24p"
#define BLYNK_PRINT Serial
char ssid[] = "Sil";
char pass[] = "mushex077petr";

/**********Library**********/
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <GyverEncoder.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>

/***********DS18B20*********/
#define ONE_WIRE_BUS 15 // Pin for DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

/***********Ky-040**********/
#define CLK_PIN 23
#define DT_PIN 22
#define CLK_PIN1 21
#define DT_PIN1 19
Encoder enc(CLK_PIN, DT_PIN);
Encoder enc1(CLK_PIN1, DT_PIN1);
float val = 0;
float val1 = 0;

WiFiClient client;
bool isOnline = false;

/**отправка данных на Blynk*/
BlynkTimer timer;

void sendBlynkData() {
  if (isOnline) {
    Blynk.virtualWrite(V2, millis() / 1000);
    Blynk.virtualWrite(V1, val);
    Blynk.virtualWrite(V3, val1);
    sensors.requestTemperatures();
    float temperature = sensors.getTempCByIndex(0);
    Blynk.virtualWrite(V4, temperature);
  }
}

/********Автосохранение******/
BLYNK_CONNECTED() {
  Blynk.syncVirtual(V1);
  Blynk.syncVirtual(V3);
}

BLYNK_WRITE(V1) {
  val = param.asFloat();
}

BLYNK_WRITE(V3) {
  val1 = param.asFloat();
}

void setup() {
  Serial.begin(9600);

  pinMode(Rele_1, OUTPUT);
  pinMode(Rele_2, OUTPUT);
  pinMode(Rele_3, OUTPUT);
  pinMode(Rele_4, OUTPUT);
  digitalWrite(Rele_1, HIGH);
  digitalWrite(Rele_2, HIGH);
  digitalWrite(Rele_3, HIGH);
  digitalWrite(Rele_4, HIGH);

  enc.setType(TYPE2);
  enc1.setType(TYPE2);

  Blynk.config(BLYNK_AUTH_TOKEN);
  Blynk.connect();

  timer.setInterval(2000L, sendBlynkData);

  sensors.begin();
}

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

  enc.tick();
  enc1.tick();

  if (enc.isTurn()) {
    if (enc.isRight()) {
      val += 0.5;
      if (val > 100) {
        val = 100;
      }
    }
    if (enc.isLeft()) {
      val -= 0.5;
      if (val < 0) {
        val = 0;
      }
    }
    Serial.print("Ky-1...");
    Serial.println(val);
  }

  if (enc1.isTurn()) {
    if (enc1.isRight()) {
      val1 += 0.5;
      if (val1 > 100) {
        val1 = 100;
      }
    }
    if (enc1.isLeft()) {
      val1 -= 0.5;
      if (val1 < 0) {
        val1 = 0;
      }
    }
    Serial.print("Ky-2...");
    Serial.println(val1);
  }

  if (Blynk.connected()) {
    isOnline = true;
  } else {
    isOnline = false;
  }
}

Можите мне отправить сылку я просто не знаю где это

The simple way to find out is to test it, and I guess you’ve discovered that it doesn’t work because you aren’t creating a WiFi connection.

Because its been discussed many times, there are many many links!.

Try reading through this topic from start to finish, It has some good examples that should point you in the right direction…

Pete.