ผมจะทำเปิดปิด Relay 5 ชุดโดยใช้ virtual

ปัญหาคือrelay 2 ผมใช้งานไม่ได้เลยครับ ใช้ได้เเต่ relay 1 ผมต้องทำยังไงครับ


ดูโค้ตตัวเต็มหน่อยครับ ไม่เห็นมีคำสั่งให้ Relay 2 on เลย

#define BLYNK_PRINT Serial

#define Relay1 D1
#define Relay2 D2
#define Relay3 D3
#define Relay4 D4
#define Relay5 D5
#define Relay6 D6
#define Relay7 D7
#define Relay8 D8
char auth[] = " f794abac71774461bb3c2a03b5f1c8bb ";

char ssid[] = "OPPO";
char pass[] = "1111100000";


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

WidgetLED Led(V2);
WidgetLED Led2(V3);

BLYNK_WRITE(V1) //////lock
{
  if (param.asInt() == 1)
  {
    Blynk.virtualWrite(V1, 1);
    Led.on();
    Led2.off();
  }
  else
  {
   Blynk.virtualWrite(V1, 0);
    digitalWrite(Relay1, LOW);
    delay(700); 
   digitalWrite(Relay1, HIGH);
    Led2.on();
    Led.off();
    delay(500);
    Led2.off();
  }
}
void setup()
{

  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);
}
void loop()
{
  Blynk.run();
  
}

ผมลองเปลี่ยน จาก รีเลย์ 1 ไปเป็นรีเลย์2(ที่ผมคลุมๆไว่) รีเลย์2ไม่ทำงานครับ

BLYNK_WRITE(V1) //////lock
{
  if (param.asInt() == 1)
  {
    Blynk.virtualWrite(V1, 1);
    Led.on();
    Led2.off();
  }
  else
  {
   Blynk.virtualWrite(V1, 0);
    digitalWrite(Relay1, LOW);
    delay(700); 
   digitalWrite(Relay1, HIGH);
    Led2.on();
    Led.off();
    delay(500);
    Led2.off();
  }
}
1 Likes

ตรงไหนคือคำสั่งที่เปลี่ยนเป็น Relay 2 ครับ

ถ้าผมเปลี่ยน จาก Relay1 ไป เป็น Relay2 บอร์ดมันไม่สั่งให้รีเลย์ทำงาน เเต่ถ้าผมกลับไปเป็นรีเลย์ 1 สั่งงานได้ปกติครับ
digitalWrite(Relay1, LOW);
delay(700);
digitalWrite(Relay1, HIGH);

ใช้บอร์ดอะไรอยู่ครับ

Nodemcu ครับพี่

่โค้ดผมถูกรึป่าวครับ

#define BLYNK_PRINT Serial

#define Relay1 D1
#define Relay2 D2
#define Relay3 D3
#define Relay4 D4
#define Relay5 D5
#define Relay6 D6
#define Relay7 D7
#define Relay8 D8
char auth[] = " f794abac71774461bb3c2a03b5f1c8bb ";

char ssid[] = "OPPO";
char pass[] = "1111100000";


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

WidgetLED Led(V2);
WidgetLED Led2(V3);

BLYNK_WRITE(V1) //////lock
{
  if (param.asInt() == 1)
  {
    Blynk.virtualWrite(V1, 1);
    Led.on();
    Led2.off();
  }
  else
  {
   Blynk.virtualWrite(V1, 0);
    digitalWrite(Relay1, LOW);
    delay(700); 
   digitalWrite(Relay1, HIGH);
    Led2.on();
    Led.off();
    delay(500);
    Led2.off();
  }
}
BLYNK_WRITE(V4) //////Unlock
{
  if (param.asInt() == 4)
  {
    Blynk.virtualWrite(V4, 1);
    Led.on();
    Led2.off();
  }
  else
  {
   Blynk.virtualWrite(V4, 0);
    digitalWrite(Relay2, LOW);
    delay(700); 
   digitalWrite(Relay2, HIGH);
    Led2.on();
    Led.off();
    delay(500);
    Led2.off();
  }
}
void setup()
{

  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);
}
void loop()
{
  Blynk.run();
  
}
1 Likes

ก่อนวางโค้ตเลือกคุมเฉพาะโค้ต แล้วกด </> ให้ด้วยนะครับ

ขอดูหน้าเซตอัพในแอพด้วยครับ stop แอพแล้วแคบมา

!

ทำไมตรงนี้ต้องใส่ 4 ครับ เข้าใจว่าอย่างไร

2 Likes

ทำไมตรงนี้ถึงต้อง ใส่ LOW เสร็จแล้วตามด้วย HIGH ครับ ต้องการให้มันกระพริบรึป่าว

2 Likes

เดียวผมอธิบายแบบนี้ดีกว่า ผมจะทำสมาร์ทคาร์ควบคุมรถสตาร์ท ปลดล็อกกับมือถือ ที่พี่ถามผมว่า low กับ high ใส่ทำไมเพราะว่า ปุ่มในแอพบ้างครั้งมันค้าง ผมเลยต้องให้มัน เป็น high low ใชครับมันต้องกระพริบ ป้องกัน ปุ่มมัน ค้าง ข้างบนที่ใส่ 4 ผมเข้าใจว่าสั่งปุ่ม V4 ครับ รบกวนพี่ชี้เเนะด้วยนะครับ เเล้ว ถ้าผมจะคุมRelay โดยใช้ Virtual pin ผมต้องเริ่มจากตรงไหนครับ

1 Likes

ขออธิบายตรงนี้ก่อนละกันนะครับ

param.asInt() == 4 คำสั่งตรงนี้ความหมายคือ เป็นการรับค่าจากปุ่มหน้าแอพ ครับ สถานะมีได้แค่ 0 กับ 1 เท่านั้น นอกนั้นมันจะไม่เข้าลูปนี้

จะเห็นว่า V1 ที่กำหนดให้สั่ง Relay 1 ทำงาน ถูกตั้งไว้เป็น 1

param.asInt() == 1 เวลากด Relay 1 มันถึงทำงานแต่ 2 ไม่ทำงานครับ

โจทย์ข้อนี้แค่เปลี่ยนจาก 4 เป็น 1 ก็น่าจะทำงานได้แล้วครับ

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

ทำไมปุ่ม Button มันถึงค้าง เพราะอะไร

ซึ่งผมว่ามันน่าสนใจดีนะครับ

ไม่ทราบนะครับพี่ ว่าค้างเพราอะไร เวลาค้างนานๆๆมอเตอร์เซ็นทรัลล็อคไหม้เลย
ผมเลยต้องทำวิธีนี้
ผมเเค่ต้องการ
Relay 1 กดปล่อย รีเรย์ทำงาน
Relay 2 กดปล่อย รีเรย์ทำงาน
Relay 3 กดปล่อย รีเรย์ทำงาน
Relay 4 กดติดกดดับ
Relay 5 กดติดกดดับ
ตอนนี้รีเลย์ไม่ทำงานเลยครับผมลองเเก้โปรเเกรมเเล้ว

type or paste code here
#define BLYNK_PRINT Serial

#define Relay1 D1
#define Relay2 D2
#define Relay3 D3
#define Relay4 D4
#define Relay5 D5
#define Relay6 D6
#define Relay7 D7
#define Relay8 D8
char auth[] = "";

char ssid[] = "OPPO";
char pass[] = "1111100000";


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

WidgetLED Led(V2);
WidgetLED Led2(V3);

BLYNK_WRITE(V1) //////lock
{
  if (param.asInt() == 1)
  {
    Blynk.virtualWrite(V1, 1);
    Led.on();
    Led2.off();
  }
  else
  {
   Blynk.virtualWrite(V1, 0);
    digitalWrite(Relay1, HIGH);
    delay(700); 
   digitalWrite(Relay1, LOW);
    Led2.on();
    Led.off();
    delay(500);
    Led2.off();
  }
}
BLYNK_WRITE(V4) //////Unlock
{
  if (param.asInt() == 1)
  {
    Blynk.virtualWrite(V4, 1);
    Led.on();
    Led2.off();
  }
  else
  {
   Blynk.virtualWrite(V4, 0);
    digitalWrite(Relay2, HIGH);
    delay(700); 
   digitalWrite(Relay2, LOW);
    Led2.on();
    Led.off();
    delay(500);
    Led2.off();
  }
}
void setup()
{

  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);
}
void loop()
{
  Blynk.run();
  
}

แก้เพิ่มครับ

แบบนี้ทั้ง V1 และ V4 เลย

 if (param.asInt() == 1)
  {
    Blynk.virtualWrite(V1, 1);
    digitalWrite(Relay1, HIGH);
    Led.on();
    Led2.off();
  }

ของ V4

 if (param.asInt() == 1)
  {
    Blynk.virtualWrite(V4, 1);
    digitalWrite(Relay2, HIGH);
    Led.off();
    Led2.on();
  }

ถ้ายังไม่ได้ลองเปลี่ยน ในแอพจาก nodeMCU เป็น esp8266 ดูครับ