Blynk ใช้งานอยู่ดีๆก็ขึ้น Offine ค่ะ

หนูทำโปรเจคสมาร์ทฟาร์มค่ะ ถูๆไถๆมาหลายอย่างจนตอนนี้โปรแกรมใช้ได้แล้ว แต่พอลองใช้งานจริงแบบ 24 ชม. อยู่ๆ Blynk มันก็ขึ้นสถานะ offline ค่ะ พอไปดูที่เครื่องก็พบว่าเครื่องยังทำงานอยู่เลย ไม่ทราบว่าต้องแก้ไขยังไงคะ เพราะต้องเก็บค่าอุณหภูมิกับความชื้นด้วยค่ะ ไม่ได้เขียนโปรแกรมเก็บค่าแบบออฟไลน์ไว้

อันนี้โค้ดทั้งหมดที่ใช้ค่ะ

#define BLYNK_PRINT Serial
//#include <SPI.h>
//#include <SD.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <time.h>
#include <Wire.h>
#include "Wire.h"
#include "SHT2x.h"

uint32_t start;
uint32_t stop;

SHT2x sht;
LiquidCrystal_I2C lcd(0x27, 16, 2);
unsigned long time_1 = 0;
void print_time(unsigned long time_millis);
const TickType_t xDelay2000ms = pdMS_TO_TICKS(2000);
long previousMillis = 0;        // will store last time LED was updated
TaskHandle_t Task1 = NULL;
// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long interval = 500;
// สร้างตัวแปรเก็บค่าเป็น integer เพื่อเอาไปใช้ใน Task
int passValue = 0;
//File myFile;
const int chipSelect = 5;
char auth[] = "XuxExCyNwsxxNo-wcl1KfsZtWEzwcwiC";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "SmartTSEFarm";
char pass[] = "db71c901";
int sec;


int Sw1;
int Sw2;
int Sw3;
int Sw4;
int timezone = 7 * 3600;                    //ตั้งค่า TimeZone ตามเวลาประเทศไทย
int dst = 0;                                //กำหนดค่า Date Swing Time
int Mode = 0;
int h ;
int t;

void setup() {
  Serial.begin(9600);
  pinMode(25, OUTPUT);
  pinMode(33, OUTPUT);
  pinMode(16, OUTPUT);
  digitalWrite(25 , HIGH);//ดูดอากาศเข้า
  digitalWrite(33 , HIGH);//ดูดอากาศออก
  digitalWrite(16 , HIGH);//ปั้มน้ำ
  Serial.print("Initializing SD card...");
  Serial.println(__FILE__);
  Serial.print("SHT2x_LIB_VERSION: \t");
  Serial.println(SHT2x_LIB_VERSION);

  sht.begin();

  uint8_t stat = sht.getStatus();
  Serial.print(stat, HEX);
  Serial.println();
  Blynk.begin(auth, ssid, pass, "prakitblog.com", 8181);
  WiFi.begin(ssid, pass);
  Blynk.connect(); //เชื่อมต่อไปยัง Blynk
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.printf("\nWiFi connected\nIP : ");
  Serial.println(WiFi.localIP());
  configTime(timezone, dst, "pool.ntp.org", "time.nist.gov");     //ดึงเวลาจาก Server
  Serial.println("\nWaiting for time");
  while (!time(nullptr)) {
    Serial.print(".");
    delay(1000);
  }
  Mode = 0;
  Sw1 = 1;
  Serial.println("");
}
int hh;
int tt;
int M = 0;
void loop() {
  Blynk.run();
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;
    start = micros();
    sht.read();
    stop = micros();
    hh = sht.getHumidity();                // Read Humidity
    tt = sht.getTemperature();
    if (tt < 40 && tt > 20)
    {
      Blynk.virtualWrite(V0, sht.getTemperature());
      Blynk.virtualWrite(V7, sht.getTemperature());
      t = tt;
    }
    if (hh < 90 && hh > 20 )
    {
      Blynk.virtualWrite(V1, sht.getHumidity());
      Blynk.virtualWrite(V8, sht.getHumidity());
      h = hh;
    }
   
  }
  if (Sw1 == 1)
  {

    if (h < 70 )
    {
      digitalWrite(16 , LOW);//ปั้มน้ำ
    }
    else
    {
      if (h > 80)
      {
        digitalWrite(16 , HIGH);//ปั้มน้ำ
      }
    }
    if (t > 28)
    {
      digitalWrite(25 , LOW);
    }
    else
    {
      if (t < 27 )////////////////////////////////////
      {
        digitalWrite(25 , HIGH);//ดูดอากาศเข้า
      }
      else
      {
        digitalWrite(25 , LOW);//ดูดอากาศเข้า
      }///////////////////////////////////////
      //digitalWrite(25 , HIGH);
    }
  }
  else
  {

    if (Sw2 == 0)
    {
      digitalWrite(33 , HIGH);//ดูดอากาศออก
    }
    else
    {
      digitalWrite(33 , LOW);//ดูดอากาศออก
    }
    if (Sw3 == 0)
    {

      digitalWrite(25 , HIGH);//ดูดอากาศเข้า
    }
    else
    {
      digitalWrite(25 , LOW);//ดูดอากาศเข้า
    }
    if (Sw4 == 0)
    {
      digitalWrite(16 , HIGH);//ปั้มน้ำ
    }
    else
    {
      digitalWrite(16 , LOW);//ปั้มน้ำ
    }
  }

}
BLYNK_WRITE(V2)
{
  Sw1 = param.asInt();
  Serial.print("Sw1:");
  Serial.println(Sw1);
}
BLYNK_WRITE(V3)
{
  Sw2 = param.asInt();
  Serial.print("Sw2:");
  Serial.println(Sw2);
}
BLYNK_WRITE(V4)
{
  Sw3 = param.asInt();
  Serial.print("Sw3:");
  Serial.println(Sw3);
}

BLYNK_WRITE(V5)
{
  Sw4 = param.asInt();
  Serial.print("Sw4:");
  Serial.println(Sw4);
}


รูปภาพที่อยู่ๆมันก็ออฟไลน์

ลองดูครับ ถ้าดูใน Document รุ่นเก่าของ Blynk จะแนะนำว่า loop ของ blynk ไม่ควรจะมีเงื่อนไขอื่นเข้ามาแทรก การทำงานของ Blynk.run(); (ไม่ควรมีเลย หรือ มีเงื่อนไขแทรกมาบ้าง แต่ต้องน้อยๆ)

#define BLYNK_PRINT Serial
//#include <SPI.h>
//#include <SD.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <time.h>
#include <Wire.h>
#include "Wire.h"
#include "SHT2x.h"


TaskHandle_t Task1;


uint32_t start;
uint32_t stop;




SHT2x sht;
LiquidCrystal_I2C lcd(0x27, 16, 2);
unsigned long time_1 = 0;
void print_time(unsigned long time_millis);
const TickType_t xDelay2000ms = pdMS_TO_TICKS(2000);
long previousMillis = 0;        // will store last time LED was updated






// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long interval = 500;
// สร้างตัวแปรเก็บค่าเป็น integer เพื่อเอาไปใช้ใน Task
int passValue = 0;
//File myFile;
const int chipSelect = 5;
char auth[] = "XuxExCyNwsxxNo-wcl1KfsZtWEzwcwiC";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "SmartTSEFarm";
char pass[] = "db71c901";
int sec;


int Sw1;
int Sw2;
int Sw3;
int Sw4;
int timezone = 7 * 3600;                    //ตั้งค่า TimeZone ตามเวลาประเทศไทย
int dst = 0;                                //กำหนดค่า Date Swing Time
int Mode = 0;
int h ;
int t;


int hh;
int tt;
int M = 0;



void setup() {


  Serial.begin(9600);
  pinMode(25, OUTPUT);
  pinMode(33, OUTPUT);
  pinMode(16, OUTPUT);
  digitalWrite(25 , HIGH);//ดูดอากาศเข้า
  digitalWrite(33 , HIGH);//ดูดอากาศออก
  digitalWrite(16 , HIGH);//ปั้มน้ำ
  Serial.print("Initializing SD card...");
  Serial.println(__FILE__);
  Serial.print("SHT2x_LIB_VERSION: \t");
  Serial.println(SHT2x_LIB_VERSION);

  sht.begin();

  uint8_t stat = sht.getStatus();
  Serial.print(stat, HEX);
  Serial.println();
  Blynk.begin(auth, ssid, pass, "prakitblog.com", 8181);
  WiFi.begin(ssid, pass);
  Blynk.connect(); //เชื่อมต่อไปยัง Blynk
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.printf("\nWiFi connected\nIP : ");
  Serial.println(WiFi.localIP());
  configTime(timezone, dst, "pool.ntp.org", "time.nist.gov");     //ดึงเวลาจาก Server
  Serial.println("\nWaiting for time");
  while (!time(nullptr)) {
    Serial.print(".");
    delay(1000);
  }
  Mode = 0;
  Sw1 = 1;
  Serial.println("");


  xTaskCreatePinnedToCore(
    Task1code,   /* Task function. */
    "Task1",     /* name of task. */
    10000,       /* Stack size of task */
    NULL,        /* parameter of the task */
    1,           /* priority of the task */
    &Task1,      /* Task handle to keep track of created task */
    1);          /* pin task to core 1 */
  delay(500);

}


void Task1code( void * pvParameters ) {
  Serial.print("Task1 running on core ");
  Serial.println(xPortGetCoreID());

  for (;;) {

    Blynk.run();
    delay(10);
  }
}





void loop() {



  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;
    start = micros();
    sht.read();
    stop = micros();
    hh = sht.getHumidity();                // Read Humidity
    tt = sht.getTemperature();
    if (tt < 40 && tt > 20)
    {
      Blynk.virtualWrite(V0, sht.getTemperature());
      Blynk.virtualWrite(V7, sht.getTemperature());
      t = tt;
    }
    if (hh < 90 && hh > 20 )
    {
      Blynk.virtualWrite(V1, sht.getHumidity());
      Blynk.virtualWrite(V8, sht.getHumidity());
      h = hh;
    }

  }
  if (Sw1 == 1)
  {

    if (h < 70 )
    {
      digitalWrite(16 , LOW);//ปั้มน้ำ
    }
    else
    {
      if (h > 80)
      {
        digitalWrite(16 , HIGH);//ปั้มน้ำ
      }
    }
    if (t > 28)
    {
      digitalWrite(25 , LOW);
    }
    else
    {
      if (t < 27 )////////////////////////////////////
      {
        digitalWrite(25 , HIGH);//ดูดอากาศเข้า
      }
      else
      {
        digitalWrite(25 , LOW);//ดูดอากาศเข้า
      }///////////////////////////////////////
      //digitalWrite(25 , HIGH);
    }
  }
  else
  {

    if (Sw2 == 0)
    {
      digitalWrite(33 , HIGH);//ดูดอากาศออก
    }
    else
    {
      digitalWrite(33 , LOW);//ดูดอากาศออก
    }
    if (Sw3 == 0)
    {

      digitalWrite(25 , HIGH);//ดูดอากาศเข้า
    }
    else
    {
      digitalWrite(25 , LOW);//ดูดอากาศเข้า
    }
    if (Sw4 == 0)
    {
      digitalWrite(16 , HIGH);//ปั้มน้ำ
    }
    else
    {
      digitalWrite(16 , LOW);//ปั้มน้ำ
    }
  }

}






BLYNK_WRITE(V2)
{
  Sw1 = param.asInt();
  Serial.print("Sw1:");
  Serial.println(Sw1);
}
BLYNK_WRITE(V3)
{
  Sw2 = param.asInt();
  Serial.print("Sw2:");
  Serial.println(Sw2);
}
BLYNK_WRITE(V4)
{
  Sw3 = param.asInt();
  Serial.print("Sw3:");
  Serial.println(Sw3);
}

BLYNK_WRITE(V5)
{
  Sw4 = param.asInt();
  Serial.print("Sw4:");
  Serial.println(Sw4);
}

ลองใช้โค้ดแล้วยังหลุดอยู่ค่ะ