Esp 32 เชื่อมต่อ blynk ได้แล้วใช้ไปสักระยะ ขึ้น offline แต่บอร์ดยังเชื่อมไวไฟอยู่ แล้วต้องกดปุ่มรีบูลบอร์ดหรือดึงปลั๊กใหม่ตลอด อยากจะให้ บอร์ดรีเซ็ทตัวเองหากเกิดไปหา ต้องเขียนโค้ดอย่างไรบ้างครับ
หรือขอโค้ดเช็คสถานะ การเชื่อมต่อ blynk กับ server หน่อยครับ ไม่รู้ปัญหาเกิดจากอะไร
อยากรบกวนพี่ๆเพื่อนๆน้องๆช่วยด้วยครับ
ปล.ผมมือใหม่ครับ อาศัยเขียนตามยูทุป
ขอบคุณครับ
Remy_Martin
(Permpol Thanapunnamas)
2
#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();
}
วิธีการทำงาน ตามนี้:
- โค้ดจะทำการเชื่อมต่อกับ WiFi และ Blynk Server โดยใช้
Blynk.begin()
.
- ฟังก์ชัน
checkBlynkConnection()
จะถูกเรียกทุกๆ 10 วินาที (สามารถปรับได้ตามความเหมาะสม) เพื่อตรวจสอบว่าบอร์ดยังเชื่อมต่อกับ Blynk Server อยู่หรือไม่.
- หากไม่สามารถเชื่อมต่อได้ บอร์ดจะทำการรีเซ็ตตัวเองโดยใช้
ESP.restart()
.
ลองเอาไปปรับใช้ดูครับ
ขอบคุณมากๆครับ
รบกวนอีกอย่างครับ ถ้าบอร์ด รีเซ็ทแล้วกลับมาเชื่อมต่อ
แต่ในแอพ blynk สมมุติว่ากดเปิดให้ รีเลย์ทำงานอยู่ แต่พอเรารีเซทบอร์ดแล้ว relay จะไม่ได้ทำงาน ต้องกดปิด-เปิดที่ แอพ ใหม่ แบบนี้จะมีวิธียังไงให้บอร์ดอ่านค่าจากในแอพครับ
ขอบพระคุณอีกครั้งครั
Remy_Martin
(Permpol Thanapunnamas)
4
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();
}
ต้องขอขอบคุณพี่มากๆครับ ที่เสียสละเวลามาแนะนำให้ผม เดี๋ยวขอลองใช้ก่อนครับ หากเจอปัญหาจะแจ้งให้ทราบและสอบถามอีกครั้งครับ
Remy_Martin
(Permpol Thanapunnamas)
10
ปกติมันเข้าไปส่วนนี้มันก็น่าจะ on ตามแล้วนะครับ
Blynk.syncVirtual(V0);
ในหน้า แอพมัน on อยู่รึป่าว
ครับตอนนี้ซิงค์ได้แล้วครับ ตอนแรก ไม่ได้เขียน Blynk.syncVirtual(V0); ครับ
ขอบคุณมากครับ:pray: