Esp8266 2 ตัว สั่งานผ่าน blynk

ผมกำลังทำโปรเจก ให้ esp8266 ตัวที่ 1 เป็นตัวรับคำสั่งจาก sw (จากร้าน)เเล้วส่งไปให้ตัวที่ 2 แสดงผล(ที่บ้าน) โดยผ่าน blynk (ใช้tokenเดียวกัน)เเต่ปัญหาคือ พอตัวที่1 รับคำสั่ง ส่งไปตัวที่2 ตัวที่ ไม่แสดงผล ต้องกดรีเซ็ท ตัวที่2 จึงจะเเสดงผลอ เเต่ถ้าเรากดในแอพblynk สามารถส่งสัญญาณไปทั้ง2ตัวได้ ปล.ตัวที่1 อาจค่าจาก sw เเละตัวที่ 2 สั่ง relay ทำงาน

ตัวอย่างโค้ด ตัวที่ 1

#define BLYNK_PRINT Serial
#include <TridentTD_LineNotify.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define SSID        "TFELECTRONIC 1"      // บรรทัดที่ 11 ให้ใส่ ชื่อ Wifi ที่จะเชื่อมต่อ
#define PASSWORD    "1111100000"     // บรรทัดที่ 12 ใส่ รหัส Wifi
#define LINE_TOKEN  ""   // บรรทัดที่ 13 ใส่ รหัส TOKEN ที่ได้มาจากข้างบน

// token ,wifi user ,wifi password
char auth[] = "s1Ec0Pnd7DGGrB_EQMkf7jShmopH1gkH";
char ssid[] = "TFELECTRONIC 1";
char pass[] = "091238tunyok";

const int Relay1  = D4; //ไฟสัญญาณเตือนไฟดับ
const int Relay2  = D5; //ชุดไฟสัญญาณไฟฟ้าปกติ
const int Relay3  = D6;  //ชุดไฟเลี้ยง relay 220vac
const int Relay4  = D7;  //ตัดไฟเครื่องปั้นไฟ
const int button  = D1;
const int button2 = D2;
bool buttonStatus = 0;
bool buttonTemp = 0;

WidgetLED ledBlynk(V10);

BlynkTimer timer;

BLYNK_CONNECTED() {
  Blynk.syncAll();
}

void checkStatusButton()
{
  
  buttonStatus = digitalRead(button2);  //ไฟฟ้าหลักใช้งานได้ปกติ

  if (buttonStatus != buttonTemp)
  {
    
    if (buttonStatus == HIGH)   //sw ปล่อย ไฟฟ้าปกติ 
    {
       delay(1100);
       Serial.println("ไฟฟ้าปกติ");
     
      delay(500);
      digitalWrite(Relay1, HIGH); //ไฟสถานะสีเเดง ดับ
      delay(500);
    
      Blynk.virtualWrite(V11, 0);  //ไฟสถานะสีเเดง ดับ
      Blynk.virtualWrite(V12, 1);   //ไฟสถานะสีเขียว ทำงาน
      
      for (int k=0;k<1;k++)
     {
       LINE.notify("ไฟฟ้าหลักใช้งานได้ปกติ");      ///sw ปล่อย ไฟฟ้าใช้งานได้ปกติ
      
      delay(500);
     
    }
      delay(500);
      digitalWrite(Relay4, HIGH); // สวิซเปิด-ปิดเครื่องปั่นไฟ
      delay(1000);
      digitalWrite(Relay3,HIGH); // relay 220vac
      LINE.notify("เครื่องปั่นไฟหยุดทำงานเเล้ว");      ///sw ปล่อย ไฟฟ้าใช้งานได้ปกติ
      digitalWrite(Relay2, LOW);  //ไฟสถานะสีเขียว ทำงาน
    }
    else 
    
   
    {
    
     Serial.println("ไฟฟ้าหลักดับ");
      delay(1100);
      digitalWrite(Relay1, LOW);  //ไฟสถานะสีเเดง ทำงาน
        delay(500);
       digitalWrite(Relay2, HIGH);  //ไฟสถานะสีเขียว ดับ
       delay(500);
       digitalWrite(Relay4, LOW);  //สวิซเครื่องปั่นไฟเปิด
      Blynk.virtualWrite(V11, 1);  //ไฟสถานะสีเเดง ทำงาน
       Blynk.virtualWrite(V12, 0); //ไฟสถานะสีเขียว ดับ
   for (int k=0;k<1;k++)
     {
       LINE.notify("ไฟฟ้าหลักดับ กรุณาสตาร์ทเครื่องกำเนิดไฟ");      ///sw กด ไฟฟ้าดับ สั่งสตาร์ทเครื่องกำเนิดไฟ
      delay(500);
     
    }
    delay(800);
      digitalWrite(Relay3, LOW); // relay 220vac
       }
    buttonTemp = buttonStatus;
 
  }
}

BLYNK_WRITE(V11)  //ไฟสถานะสีเเดง
{
  if (param.asInt() == 0)    
  {
    digitalWrite(Relay1, HIGH);
     
  
  }
  if (param.asInt() == 1)    
  {
    digitalWrite(Relay1, LOW);
    
  }
}
BLYNK_WRITE(V12)   //ไฟสถานะสีเขียว
{
  if (param.asInt() == 0) 
  {
  
    digitalWrite(Relay2, HIGH);
  
  }
  if (param.asInt() == 1)
  {
   digitalWrite(Relay2, LOW);
    
  }
}

void setup() {
  Serial.begin(9600);
  //led
  pinMode(Relay1, OUTPUT);
  pinMode(Relay2, OUTPUT);
  pinMode(Relay3, OUTPUT);
  pinMode(Relay4, OUTPUT);
  //set default status
  digitalWrite(Relay1, HIGH);  ///สถานะรีเลย์ ปิด
  digitalWrite(Relay2, HIGH);
  digitalWrite(Relay3, HIGH);
  digitalWrite(Relay4, HIGH);
  //button
  pinMode(button, INPUT);
   pinMode(button2, INPUT);
  //start blynk
  Blynk.begin(auth, ssid, pass);
  timer.setInterval(500, checkStatusButton);
   Serial.println();
  Serial.println(LINE.getVersion());

  WiFi.begin(SSID, PASSWORD);
  Serial.printf("WiFi connecting to %s\n",  SSID);
  while (WiFi.status() != WL_CONNECTED) 
  {
    Serial.print(".");
    delay(400);
  }
   Serial.printf("\nWiFi connected\nIP : ");
  Serial.println(WiFi.localIP());

  // กำหนด Line Token
  LINE.setToken(LINE_TOKEN);
}

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

ตัวอย่างโค้ดตัวที่ 2

//เปลี่ยนสถานะของขา เนื่องจาก relay เป็น Active high

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include "ESP8266WiFi.h"
#include <BlynkSimpleEsp8266.h>

// token ,wifi user ,wifi password
char auth[] = "SesaMrWDig5LdKeHJey6yvTo4EaoV7xK";  //zrn73zqnZJt_ReAc8xBANuYeDa8bjuTb
char ssid[] = "K.Kung 2.4G";
char pass[] = "0910390929";

const int Relay1  = D2; //ไฟสัญญาณเตือนไฟดับ
const int Relay2  = D5; //ชุดไฟสัญญาณไฟฟ้าปกติ
const int Relay3  = D6;
WidgetLED ledBlynk(V10);

BlynkTimer timer;

BLYNK_CONNECTED() {
  Blynk.syncAll();
}

BLYNK_WRITE(V11)  //ไฟสถานะสีเเดง
{
  if (param.asInt() == 0)    
  {
    digitalWrite(Relay3, LOW);
     
  
  }
  
  if (param.asInt() == 1)    
  {
    digitalWrite(Relay3, HIGH);
    
  }
}
BLYNK_WRITE(V12)   //ไฟสถานะสีเขียว
{
  if (param.asInt() == 0) 
  {
  
    digitalWrite(Relay2, LOW);
  
  }
  if (param.asInt() == 1)
  {
   digitalWrite(Relay2, HIGH);
    
  }
}
void setup() {
  Serial.begin(9600);
  pinMode(Relay1, OUTPUT);
  pinMode(Relay2, OUTPUT);
  pinMode(Relay3, OUTPUT);
   
  digitalWrite(Relay1, LOW);  ///สถานะรีเลย์ ปิด
  digitalWrite(Relay2, LOW);
  digitalWrite(Relay3, LOW);
 
   
  Blynk.begin(auth, ssid, pass);

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

เป็นแนวทางหนึ่งนะครับ การใช้ widget Bridge ของ Blynk

1 Like

ได้เเล้วครับขอบคุณมากครับ นี้คือตัวอย่างโค้ด เผื่อใครอยากไปต่อยอด

#define BLYNK_PRINT Serial
#include <TridentTD_LineNotify.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define SSID        "TFELECTRONIC 1"      // บรรทัดที่ 11 ให้ใส่ ชื่อ Wifi ที่จะเชื่อมต่อ
#define PASSWORD    "091238tunyok"     // บรรทัดที่ 12 ใส่ รหัส Wifi
#define LINE_TOKEN  "HEKt51gC7hqV8goqiO0YDhzMYjzGDiLe3B0TYlVO0HB"   // บรรทัดที่ 13 ใส่ รหัส TOKEN ที่ได้มาจากข้างบน

// token ,wifi user ,wifi password
char auth[] = "zAHoNQLS3Ja3G5i7pXsWOaECaqyb15nS";
char ssid[] = "TFELECTRONIC 1";
char pass[] = "091238tunyok";
WidgetBridge bridge1(V11);
const int Relay1  = D4; //ไฟสัญญาณเตือนไฟดับ
const int Relay2  = D5; //ชุดไฟสัญญาณไฟฟ้าปกติ
const int Relay3  = D6;  //ชุดไฟเลี้ยง relay 220vac
const int Relay4  = D7;  //ตัดไฟเครื่องปั้นไฟ
const int button  = D1;
const int button2 = D2;
bool buttonStatus = 0;
bool buttonTemp = 0;

WidgetLED ledBlynk(V10);

BlynkTimer timer;

BLYNK_CONNECTED() {
   bridge1.setAuthToken("s9vz5PXkVqUYSVP-pTpd4rNPDRSM4itH"); // Place the AuthToken of the second hardware here
  Blynk.syncAll();
}

void checkStatusButton()
{
  
  buttonStatus = digitalRead(button2);  //ไฟฟ้าหลักใช้งานได้ปกติ

  if (buttonStatus != buttonTemp)
  {
    
    if (buttonStatus == HIGH)   //sw ปล่อย ไฟฟ้าปกติ 
    {
       delay(1100);
       Serial.println("ไฟฟ้าปกติ");
     
      delay(500);
      digitalWrite(Relay1, HIGH); //ไฟสถานะสีเเดง ดับ
      delay(500);
    
      bridge1.virtualWrite(V11, 0); 
      Blynk.virtualWrite(V12, 1);   //ไฟสถานะสีเขียว ทำงาน
      
      for (int k=0;k<1;k++)
     {
       LINE.notify("ไฟฟ้าหลักใช้งานได้ปกติ");      ///sw ปล่อย ไฟฟ้าใช้งานได้ปกติ
      
      delay(500);
     
    }
      delay(500);
      digitalWrite(Relay4, HIGH); // สวิซเปิด-ปิดเครื่องปั่นไฟ
      delay(1000);
      digitalWrite(Relay3,HIGH); // relay 220vac
      LINE.notify("เครื่องปั่นไฟหยุดทำงานเเล้ว");      ///sw ปล่อย ไฟฟ้าใช้งานได้ปกติ
      digitalWrite(Relay2, LOW);  //ไฟสถานะสีเขียว ทำงาน
    }
    else 
    
   
    {
    
     Serial.println("ไฟฟ้าหลักดับ");
      delay(1100);
      digitalWrite(Relay1, LOW);  //ไฟสถานะสีเเดง ทำงาน
        delay(500);
       digitalWrite(Relay2, HIGH);  //ไฟสถานะสีเขียว ดับ
       delay(500);
       digitalWrite(Relay4, LOW);  //สวิซเครื่องปั่นไฟเปิด
      bridge1.virtualWrite(V11, 1);  //ไฟสถานะสีเเดง ทำงาน
       Blynk.virtualWrite(V12, 0); //ไฟสถานะสีเขียว ดับ
   for (int k=0;k<1;k++)
     {
       LINE.notify("ไฟฟ้าหลักดับ กรุณาสตาร์ทเครื่องกำเนิดไฟ");      ///sw กด ไฟฟ้าดับ สั่งสตาร์ทเครื่องกำเนิดไฟ
      delay(500);
     
    }
    delay(800);
      digitalWrite(Relay3, LOW); // relay 220vac
       }
    buttonTemp = buttonStatus;
 
  }
}

BLYNK_WRITE(V11)  //ไฟสถานะสีเเดง
{
  if (param.asInt() == 0)    
  {
    digitalWrite(Relay1, HIGH);
     
  
  }
  if (param.asInt() == 1)    
  {
    digitalWrite(Relay1, LOW);
    
  }
}
BLYNK_WRITE(V12)   //ไฟสถานะสีเขียว
{
  if (param.asInt() == 0) 
  {
  
    digitalWrite(Relay2, HIGH);
  
  }
  if (param.asInt() == 1)
  {
   digitalWrite(Relay2, LOW);
    
  }
}

void setup() {
  Serial.begin(9600);
  //led
  pinMode(Relay1, OUTPUT);
  pinMode(Relay2, OUTPUT);
  pinMode(Relay3, OUTPUT);
  pinMode(Relay4, OUTPUT);
  //set default status
  digitalWrite(Relay1, HIGH);  ///สถานะรีเลย์ ปิด
  digitalWrite(Relay2, HIGH);
  digitalWrite(Relay3, HIGH);
  digitalWrite(Relay4, HIGH);
  //button
  pinMode(button, INPUT);
   pinMode(button2, INPUT);
  //start blynk
  Blynk.begin(auth, ssid, pass);
  timer.setInterval(500, checkStatusButton);
   Serial.println();
  Serial.println(LINE.getVersion());

  WiFi.begin(SSID, PASSWORD);
  Serial.printf("WiFi connecting to %s\n",  SSID);
  while (WiFi.status() != WL_CONNECTED) 
  {
    Serial.print(".");
    delay(400);
  }
   Serial.printf("\nWiFi connected\nIP : ");
  Serial.println(WiFi.localIP());

  // กำหนด Line Token
  LINE.setToken(LINE_TOKEN);
}

void loop() {
  
   
  Blynk.run();
  timer.run();
}
1 Like

ตัวอย่างโค้ด อีกตัวครับ

//เปลี่ยนสถานะของขา เนื่องจาก relay เป็น Active high

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include "ESP8266WiFi.h"
#include <BlynkSimpleEsp8266.h>
WidgetBridge bridge1(V11);
// token ,wifi user ,wifi password
char auth[] = "s9vz5PXkVqUYSVP-pTpd4rNPDRSM4itH";  //zrn73zqnZJt_ReAc8xBANuYeDa8bjuTb
char ssid[] = "TFELECTRONIC 1";
char pass[] = "091238tunyok";
         //ประกาศตัวแปรเป็น global 
const int Relay1  = D2; //ไฟสัญญาณเตือนไฟดับ
const int Relay2  = D5; //ชุดไฟสัญญาณไฟฟ้าปกติ
const int Relay3  = D6;
WidgetLED ledBlynk(V10);
int sw;
BlynkTimer timer;


BLYNK_CONNECTED() {
  bridge1.setAuthToken("zAHoNQLS3Ja3G5i7pXsWOaECaqyb15nS"); // Place the AuthToken of the second hardware here
}
//BLYNK_WRITE(V11) 
//
//{
//  sw=param.asInt();
//
//}

BLYNK_WRITE(V11)   //ไฟสถานะสีเขียว
{
 if (param.asInt()==1) {
 digitalWrite(Relay2, LOW);
 delay(500);
  digitalWrite(Relay3, HIGH);

 }else{
 digitalWrite(Relay2,HIGH);
  delay(500);
 digitalWrite(Relay3, LOW);

 }

}
void setup() {
  Serial.begin(9600);
  pinMode(Relay1, OUTPUT);
  pinMode(Relay2, OUTPUT);
  pinMode(Relay3, OUTPUT);
   
  digitalWrite(Relay1, LOW);  ///สถานะรีเลย์ ปิด
  digitalWrite(Relay2, LOW);
  digitalWrite(Relay3, LOW);
 
   
  Blynk.begin(auth, ssid, pass);

  
}
void loop() 
{
  Blynk.run();
//  if(sw==0)
//  {
//     digitalWrite(Relay3, HIGH);
//      digitalWrite(Relay2, LOW);
//     Serial.println("SW");
//  }
//  else
//  {
//    digitalWrite(Relay3,LOW);
//     digitalWrite(Relay2, HIGH);
//
//  }
  timer.run();

 
    
  


}

     
1 Like