Esp 32 เชื่อมต่อ blynk ได้แล้วใช้ไปสักระยะ ขึ้น offline แต่บอร์ดยังเชื่อมไวไฟอยู่

Esp 32 เชื่อมต่อ blynk ได้แล้วใช้ไปสักระยะ ขึ้น offline แต่บอร์ดยังเชื่อมไวไฟอยู่ แล้วต้องกดปุ่มรีบูลบอร์ดหรือดึงปลั๊กใหม่ตลอด อยากจะให้ บอร์ดรีเซ็ทตัวเองหากเกิดไปหา ต้องเขียนโค้ดอย่างไรบ้างครับ

หรือขอโค้ดเช็คสถานะ การเชื่อมต่อ blynk กับ server หน่อยครับ ไม่รู้ปัญหาเกิดจากอะไร

อยากรบกวนพี่ๆเพื่อนๆน้องๆช่วยด้วยครับ

ปล.ผมมือใหม่ครับ อาศัยเขียนตามยูทุป

ขอบคุณครับ

#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>

char auth[] = "YourAuthToken";  // เปลี่ยนเป็น Auth Token ของคุณ
char ssid[] = "YourSSID";       // เปลี่ยนเป็นชื่อ WiFi ของคุณ
char pass[] = "YourPassword";   // เปลี่ยนเป็นรหัสผ่าน WiFi ของคุณ

BlynkTimer timer;

// ฟังก์ชันเช็คการเชื่อมต่อ Blynk Server
void checkBlynkConnection() {
  if (!Blynk.connected()) {
    Serial.println("ไม่สามารถเชื่อมต่อกับ Blynk Server ได้!");
    ESP.restart();  // รีเซ็ต ESP32
  } else {
    Serial.println("เชื่อมต่อกับ Blynk Server สำเร็จ!");
  }
}

void setup()
{
  Serial.begin(115200);
  Blynk.begin(auth, ssid, pass);

  // ตั้งเวลาให้เช็คสถานะการเชื่อมต่อทุกๆ 10 วินาที
  timer.setInterval(10000L, checkBlynkConnection);
}

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

วิธีการทำงาน ตามนี้:

  1. โค้ดจะทำการเชื่อมต่อกับ WiFi และ Blynk Server โดยใช้ Blynk.begin().
  2. ฟังก์ชัน checkBlynkConnection() จะถูกเรียกทุกๆ 10 วินาที (สามารถปรับได้ตามความเหมาะสม) เพื่อตรวจสอบว่าบอร์ดยังเชื่อมต่อกับ Blynk Server อยู่หรือไม่.
  3. หากไม่สามารถเชื่อมต่อได้ บอร์ดจะทำการรีเซ็ตตัวเองโดยใช้ ESP.restart().
    ลองเอาไปปรับใช้ดูครับ

ขอบคุณมากๆครับ

รบกวนอีกอย่างครับ ถ้าบอร์ด รีเซ็ทแล้วกลับมาเชื่อมต่อ
แต่ในแอพ blynk สมมุติว่ากดเปิดให้ รีเลย์ทำงานอยู่ แต่พอเรารีเซทบอร์ดแล้ว relay จะไม่ได้ทำงาน ต้องกดปิด-เปิดที่ แอพ ใหม่ แบบนี้จะมีวิธียังไงให้บอร์ดอ่านค่าจากในแอพครับ

ขอบพระคุณอีกครั้งครั

BLYNK_CONNECTED()
{
  Blynk.syncAll();
}

ไม่ซิงค์อ่ะครับ ต้องนำไปใส่ตรงไหนครับ

#define BLYNK_TEMPLATE_ID "TMPL6BhhnoWBb"
#define BLYNK_TEMPLATE_NAME "Project"
#define BLYNK_AUTH_TOKEN "ge9rn9YV4vDuMBc0H-8XDu6B4BBo_A2c"
#define BLYNK_PRINT Serial

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>


// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "SPF_GUEST2.4G";
char pass[] = "SPFGuest321#";

#define Relay1 27
#define Relay2 14
#define Relay3 12
#define Relay4 13
#define LED 18

int Data1 = 1 ;
int Data2 = 1 ;
int Data3 = 1 ;
int Data4 = 1 ;
int CloseAll = 0;

BlynkTimer timer ;


BLYNK_WRITE(V0)
{
  Data1= param.asInt();
  if(Data1 == 0) {
    digitalWrite (Relay1 , HIGH);
  } else if (Data1 == 1){
  digitalWrite (Relay1, LOW);
}
}

BLYNK_WRITE(V3)
{
  Data4= param.asInt();
  if(Data4 == 0) {
    digitalWrite (Relay4 , HIGH);
  } else if (Data4 == 1){
  digitalWrite (Relay4, LOW);
}
}
BLYNK_WRITE(V1)
{
  Data2= param.asInt();
  if(Data2 == 0) {
    digitalWrite (Relay2 , HIGH);
  } else if (Data2 == 1){
  digitalWrite (Relay2, LOW);
}
}
BLYNK_WRITE(V2)
{
  Data3= param.asInt();
  if(Data3 == 0) {
    digitalWrite (Relay3 , HIGH);
  } else if (Data3 == 1){
  digitalWrite (Relay3, LOW);
}
}

BLYNK_WRITE(V4) {
 CloseAll= param.asInt();
 if (CloseAll == 1) {
  digitalWrite (Relay1 , HIGH) ;
  digitalWrite (Relay2, HIGH) ;
  digitalWrite (Relay3, HIGH) ;
  digitalWrite (Relay4 , HIGH) ;
 
 Blynk.virtualWrite (V0,LOW);
 Blynk.setProperty (V0 , "offLabel","เปิด");

 Blynk.virtualWrite (V1,LOW);
 Blynk.setProperty (V1 , "offLabel","เปิด");

 Blynk.virtualWrite (V2,LOW);
 Blynk.setProperty (V2 , "offLabel","เปิด");

 Blynk.virtualWrite (V3,LOW);
 Blynk.setProperty (V3 , "offLabel","เปิด");
 }
}

BLYNK_CONNECTED()
{
  Blynk.syncAll();
}

void checkBlynkConnection(){
  if (!Blynk.connected()){
    Serial.println("ไม่สามารถเชื่อมต่อ server ได้");
    ESP.restart();
  } else {
    Serial.println("เชื่อมต่อ Server สำเร็จ");
  }
}

void setup()
{
  // Debug console
  Serial.begin(115200);

Blynk.connectWiFi(ssid,pass );
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);

  pinMode (Relay1 , OUTPUT) ;
  pinMode (Relay2 , OUTPUT) ;
  pinMode (Relay3 , OUTPUT) ;
  pinMode (Relay4 , OUTPUT) ;

 digitalWrite (Relay1 , HIGH) ;
  digitalWrite (Relay2, HIGH) ;
  digitalWrite (Relay3, HIGH) ;
  digitalWrite (Relay4 , HIGH) ;

  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);


timer.setInterval(30000L,checkBlynkConnection);

}

void loop() {

  if (WiFi.status() == WL_CONNECTED) {
    digitalWrite(LED, LOW);
  }else{
    digitalWrite(LED, HIGH);
    }


  Blynk.run();

  timer.run();
}




คือยังไงครับ อธิบายหน่อย

เวลาบอร์ดรีบูทเสร็จ ก่อนบอร์ดรีบูทตัวเอง ภายในแอพเราออนrelayไว้ พอเราเชื่อมต่อเสร็จ รีเลย์จะไม่ทำงานตาม ปุ่มในแอพเดิม อยากหาวิธีซิงค์ให้ รีเลย์ออนตามปุ่มในแอพหลังจาก บอร์ดรีบูทตัวเองเสร็จครับ

ตอนนี้คิดว่าน่าจะมาถูกทางแล้วครับ ตอนนี้หลังบอร์ดรีบูทตัวเองเสร็จ บอร์ดก็ซิงค์กับตัวปุ่มในแอพแล้วครับ แต่ไม่รู้ว่าถ้าวางใน void loop จะทำให้เกิดปัญหาอะไรไหมครับ

void loop() {

  if (WiFi.status() == WL_CONNECTED) {
    digitalWrite(LED, LOW);
  }else{
    digitalWrite(LED, HIGH);
    }


 if(Blynk.connected()){
  digitalWrite(LED2, HIGH);

  Blynk.syncVirtual(V0);
   Blynk.syncVirtual(V1);
    Blynk.syncVirtual(V2);
     Blynk.syncVirtual(V3);
}
  
  Blynk.run();

  timer.run();
}

ต้องขอขอบคุณพี่มากๆครับ ที่เสียสละเวลามาแนะนำให้ผม เดี๋ยวขอลองใช้ก่อนครับ หากเจอปัญหาจะแจ้งให้ทราบและสอบถามอีกครั้งครับ

ปกติมันเข้าไปส่วนนี้มันก็น่าจะ on ตามแล้วนะครับ

Blynk.syncVirtual(V0);

ในหน้า แอพมัน on อยู่รึป่าว

ครับตอนนี้ซิงค์ได้แล้วครับ ตอนแรก ไม่ได้เขียน Blynk.syncVirtual(V0); ครับ

ขอบคุณมากครับ:pray::pray: