Relay ไม่ทำงานตามคำสั่ง แก้ยังไงดี

อันนี้โค้ดของผมทั้งหมดครับ
คือ relay ผมไม่ทำงานตามที่สั่งไป
ช่วยดูโค้ดให้ผมหน่อยครับ ว่าผมผิดตรงไหนหรือเปล่าครับ
ขอบคุณมากครับ

image


/*************************************************************

  This is a simple demo of sending and receiving some data.
  Be sure to check out other examples!
 *************************************************************/

// Template ID, Device Name and Auth Token are provided by the Blynk.Cloud
// See the Device Info tab, or Template settings
#define BLYNK_TEMPLATE_ID           "TMPLf_VEI5xH"
#define BLYNK_DEVICE_NAME           "Quickstart Device"
#define BLYNK_AUTH_TOKEN            "X5zwImlUNpugTUixUBav5_NeUB345PWx"


// Comment this out to disable prints and save space
#define BLYNK_PRINT Serial


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <PMS.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define relay D2

char auth[] = BLYNK_AUTH_TOKEN;

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "E = mc2";
char pass[] = "zxkeq8vo9i931";

PMS pms(Serial);
PMS::DATA data;
LiquidCrystal_I2C lcd(0x27, 16, 2);

byte auto_relay = 0;
float dust_auto = 0;

BlynkTimer timer;

// This function is called every time the Virtual Pin 0 state changes
BLYNK_WRITE(V1)
{
  // Set incoming value from pin V0 to a variable
  auto_relay = param.asInt();
  digitalWrite(relay, LOW);
  // Update state
}

// This function is called every time the device is connected to the Blynk.Cloud
BLYNK_CONNECTED()
{
  // Change Web Link Button message to "Congratulations!"
  Blynk.syncAll();
  Blynk.setProperty(V3, "offImageUrl", "https://static-image.nyc3.cdn.digitaloceanspaces.com/general/fte/congratulations.png");
  Blynk.setProperty(V3, "onImageUrl",  "https://static-image.nyc3.cdn.digitaloceanspaces.com/general/fte/congratulations_pressed.png");
  Blynk.setProperty(V3, "url", "https://docs.blynk.io/en/getting-started/what-do-i-need-to-blynk/how-quickstart-device-was-made");
}

// This function sends Arduino's uptime every second to Virtual Pin 2.


void setup()
{
  // Debug console
  Serial.begin(9600);
  pinMode(relay, OUTPUT);
  lcd.begin();
  lcd.display();
  lcd.backlight();
  lcd.clear();
  Blynk.begin(auth, ssid, pass);
  // You can also specify server:
  //Blynk.begin(auth, ssid, pass, "blynk.cloud", 80);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);

  // Setup a function to be called every second
  Blynk.connect();
}

void loop()
{
  Blynk.run();
  timer.run();
  if (pms.read(data)) {
    Serial.print("PM 2.5 (ug/m3): ");
    Serial.println(data.PM_AE_UG_2_5);
    lcd.begin();
    lcd.display();
    lcd.backlight();
    lcd.setCursor(1,0);
    lcd.print("Dust : (ug/m3)");
    lcd.setCursor(0,1);
    lcd.println("PM 2.5 : ");
    lcd.println(data.PM_AE_UG_2_5);
    delay(1000);
    Blynk.virtualWrite(V2, data.PM_AE_UG_2_5);
  }
}

ต้องการให้สั่งให้อะไรทำอะไรครับ

ให้พัดลมทำงานครับ

สั่งเปิดปิดพัดลมด้วย relay อะครับ
คือว่า relay มันทำงานแบบว่าเปิดตลอดเวลาเลยครับ
ผมเขียนโค้ดให้เป็น LOW กับ HIGH แล้ว
relay ก็ยังทำงานเหมือนเดิมเปิดตลอดเวลสที่มีไฟเข้าครับ

ปุ่ม หน้าแอพกำหนดยังไง

น่าจะติดตรงนี้ เนื่องจากไม่ได้กำหนดเงื่อนไงไขว่ารับ high/low แล้วให้ทำอะไร รับมาก็ให้ Relay เป็น low อย่างเดียว

ดูตัวอย่างการเขียน

ผมอัพโหลดโค้ดใหม่ตามนี้ครับ
ตอนผมกด off ไฟที่บอร์ดติด พอกด on ไฟที่บอร์ดดับ
แต่ไฟ relay เปิดทั้งคู่เลยครับ

อันนี้โค้ด

/*************************************************************

  This is a simple demo of sending and receiving some data.
  Be sure to check out other examples!
 *************************************************************/

// Template ID, Device Name and Auth Token are provided by the Blynk.Cloud
// See the Device Info tab, or Template settings
#define BLYNK_TEMPLATE_ID           "TMPLf_VEI5xH"
#define BLYNK_DEVICE_NAME           "Quickstart Device"
#define BLYNK_AUTH_TOKEN            "X5zwImlUNpugTUixUBav5_NeUB345PWx"


// Comment this out to disable prints and save space
#define BLYNK_PRINT Serial


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <PMS.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

char relay = 2;

char auth[] = BLYNK_AUTH_TOKEN;

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "E = mc2";
char pass[] = "zxkeq8vo9i931";

PMS pms(Serial);
PMS::DATA data;
LiquidCrystal_I2C lcd(0x27, 16, 2);

byte auto_relay = 0;
float dust_auto = 0;

BlynkTimer timer;

// This function is called every time the Virtual Pin 0 state changes

// This function is called every time the device is connected to the Blynk.Cloud
BLYNK_CONNECTED()
{
  // Change Web Link Button message to "Congratulations!"
  Blynk.syncAll();
  Blynk.setProperty(V3, "offImageUrl", "https://static-image.nyc3.cdn.digitaloceanspaces.com/general/fte/congratulations.png");
  Blynk.setProperty(V3, "onImageUrl",  "https://static-image.nyc3.cdn.digitaloceanspaces.com/general/fte/congratulations_pressed.png");
  Blynk.setProperty(V3, "url", "https://docs.blynk.io/en/getting-started/what-do-i-need-to-blynk/how-quickstart-device-was-made");
}

// This function sends Arduino's uptime every second to Virtual Pin 2.


void setup()
{
  // Debug console
  Serial.begin(9600);
  pinMode(relay, OUTPUT);
  lcd.begin();
  lcd.display();
  lcd.backlight();
  lcd.clear();
  Blynk.begin(auth, ssid, pass);
  // You can also specify server:
  //Blynk.begin(auth, ssid, pass, "blynk.cloud", 80);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);

  // Setup a function to be called every second
  Blynk.connect();
}

BLYNK_WRITE(V1)
{
  // Set incoming value from pin V0 to a variable
  if (param.asInt()==1){
    digitalWrite(relay, HIGH);
  }
  else{
    digitalWrite(relay, LOW);
  }
  // Update state
}

void loop()
{
  Blynk.run();
  timer.run();
  if (pms.read(data)) {
    Serial.print("PM 2.5 (ug/m3): ");
    Serial.println(data.PM_AE_UG_2_5);
    lcd.begin();
    lcd.display();
    lcd.backlight();
    lcd.setCursor(1,0);
    lcd.print("Dust : (ug/m3)");
    lcd.setCursor(0,1);
    lcd.println("PM 2.5 : ");
    lcd.println(data.PM_AE_UG_2_5);
    delay(1000);
    Blynk.virtualWrite(V2, data.PM_AE_UG_2_5);
  }
}

Relay ต่อพินไหนไว้ครับ

relay ในแอพ blynk ต่อ pin1
ส่วนที่บอร์ดต่อช่อง D2 ครับ

พิน 2 คือ led บนบอร์ด ครับ เปลี่ยนพินใหม่ทั้งโค้ตและบอร์ด

ถ่ายการต่อมาดู้วนครับ


/*************************************************************

  This is a simple demo of sending and receiving some data.
  Be sure to check out other examples!
 *************************************************************/

// Template ID, Device Name and Auth Token are provided by the Blynk.Cloud
// See the Device Info tab, or Template settings
#define BLYNK_TEMPLATE_ID           "TMPLf_VEI5xH"
#define BLYNK_DEVICE_NAME           "Quickstart Device"
#define BLYNK_AUTH_TOKEN            "X5zwImlUNpugTUixUBav5_NeUB345PWx"


// Comment this out to disable prints and save space
#define BLYNK_PRINT Serial


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <PMS.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

char relay = 2;

char auth[] = BLYNK_AUTH_TOKEN;

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "E = mc2";
char pass[] = "zxkeq8vo9i931";

PMS pms(Serial);
PMS::DATA data;
LiquidCrystal_I2C lcd(0x27, 16, 2);

byte auto_relay = 0;
float dust_auto = 0;

BlynkTimer timer;

// This function is called every time the Virtual Pin 0 state changes

// This function is called every time the device is connected to the Blynk.Cloud
BLYNK_CONNECTED()
{
  // Change Web Link Button message to "Congratulations!"
  Blynk.syncAll();
  Blynk.setProperty(V3, "offImageUrl", "https://static-image.nyc3.cdn.digitaloceanspaces.com/general/fte/congratulations.png");
  Blynk.setProperty(V3, "onImageUrl",  "https://static-image.nyc3.cdn.digitaloceanspaces.com/general/fte/congratulations_pressed.png");
  Blynk.setProperty(V3, "url", "https://docs.blynk.io/en/getting-started/what-do-i-need-to-blynk/how-quickstart-device-was-made");
}

// This function sends Arduino's uptime every second to Virtual Pin 2.


void setup()
{
  // Debug console
  Serial.begin(9600);
  pinMode(relay, OUTPUT);
  lcd.begin();
  lcd.display();
  lcd.backlight();
  lcd.clear();
  Blynk.begin(auth, ssid, pass);
  // You can also specify server:
  //Blynk.begin(auth, ssid, pass, "blynk.cloud", 80);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);

  // Setup a function to be called every second
  Blynk.connect();
}

BLYNK_WRITE(V2)
{
  // Set incoming value from pin V0 to a variable
  if (param.asInt()==1){
    digitalWrite(relay, HIGH);
  }
  else{
    digitalWrite(relay, LOW);
  }
  // Update state
}

void loop()
{
  Blynk.run();
  timer.run();
  if (pms.read(data)) {
    Serial.print("PM 2.5 (ug/m3): ");
    Serial.println(data.PM_AE_UG_2_5);
    lcd.begin();
    lcd.display();
    lcd.backlight();
    lcd.setCursor(1,0);
    lcd.print("Dust : (ug/m3)");
    lcd.setCursor(0,1);
    lcd.println("PM 2.5 : ");
    lcd.println(data.PM_AE_UG_2_5);
    delay(1000);
    Blynk.virtualWrite(V1, data.PM_AE_UG_2_5);
  }
}

บอร์ดผมต่อสายตามรูปนี้เลยครับ

บอร์ดที่ใช้มีไฟ 5V รึป่าว

มีครับ แต่ผมต่อไฟ 5V ออกมาผ่าน protoboard ครับ เนื่องจากว่า ไฟ 5V ต้องมาเลี้ยงอุปกรณ์อีก 3 อย่าง คือ ตัววัดฝุ่น จอLCD และก็ relay ครับ

ลองย้ายพินบนบอร์ดดูก่อนว่าได้ไหม สัญญาณมันอาจจะใช้ควบกับ led ด้วยทำให้ไม่พอที่จะทิก relay รึป่าว

แล้วก็ถ่ายที่เราต่อมาดูด้วย เอาที่ต่อตามรูปมาไม่สำคัญเท่าเราต่อเองครับ

พอมองออกมั้ยครับ ผมลองเปลี่ยนมาใช้ D8 ดูครับ

ไฟ relay ติดตลอดแต่ไม่ทำงานตามคำสั่งครับ
แล้วก็ไฟที่บอร์ดเปิดปิดตามคำสั่งหายแล้วนะครับ

เรามี relay ตัวอื่นไหมเอามาเทสหน่อย มันควรจะออกนะนิ

งั้นเอางี้ ง่ายๆ เลยลองเอาพินที่สั่งนั้น ต่อ led นอกดูเลยครับ ถ้ามันทำตามที่เราสั่งคือจบที่ relay เสีย