ตั้งเวลา Node MCU esp8266 ควบคุมไฟฟ้า

รบกวนมีโค้ดตัวอย่าง ตั้งเวลาปิด / เปิด ไฟ ผ่าน esp8266 ด้วย Code ไหมครับ
ปล.ตั้งเวลาผ่าน Blynk ใช้ Timer ได้ แต่ถ้าเขียนโค้ดลงไปใน IDE เลย ไม่ทราบว่าต้องเขียนแบบไหนครับ

ขอบคุณครับ

เขียนแบบกระทู้นี้ครับ

ตัวอย่าง

เน้นโค้ตช่วงนี้จะเป็นตัวหลักในการทำงาน

if(D2_Day1.substring(weekday()-1,weekday())=="1") {
        if(currentTime>D1_Start1 && currentTime_minus<D2_Start1 && currentTime<D2_Stop1) {
          Blynk.virtualWrite(V82, 1);
          Serial.println("Run D2");
          digitalWrite(D2,LOW);
          digitalWrite(D7,LOW);
          led99.on();          
          LastTime = currentTime.substring(0,5);
          LastDate = currentDate;
        } else {
          if(currentTime>D2_Stop1 && currentTime_minus<D2_Stop1) {
            Blynk.virtualWrite(V82, 0);      
            Serial.println("Stop D2");
            digitalWrite(D2,HIGH);
            digitalWrite(D7,HIGH);
            led99.off();    
            LastTime = currentTime.substring(0,5);
            LastDate = currentDate;
          }
        }
      }

สอบถามนิดน่ะครับ ผมใช้ code ตัวนี้ ตอน set tme ให้ LED ติด แต่มันดันติดก่อนเวลา
ตอนสั่ง LED ดับ พอถึงเวลามันทำงานปกติ ไม่ทราบว่าผิดพลาดตรงไหนครับ

#include <ESP8266WiFi.h>
#include <time.h>

const char* ssid = "test";
const char* password = "123123";

int timezone = 7*3600;
int dst = 0;

void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);

  WiFi.mode(WIFI_STA);  
  WiFi.begin(ssid, password);
  Serial.println("\nConnecting to WiFi");
  while (WiFi.status() !=WL_CONNECTED) {
    Serial.print(".");
    delay(1000);
  }

  configTime(timezone, dst, "pool.ntp.org", "time.hist.gov");
  Serial.println("\nWaiting for time");
  while (!time(nullptr)) {
    Serial.print(",");
    delay(1000);
  }
  Serial.println("");
  pinMode(D4,OUTPUT);
}

void loop() {
  time_t now = time(nullptr);
  struct tm* p_tm = localtime(&now);
  if(p_tm->tm_hour == 16 && p_tm->tm_min == 22 && p_tm->tm_sec == 00)
  
{
  digitalWrite(D4,LOW);
  delay(1000);
}

  if(p_tm->tm_hour == 16 && p_tm->tm_min == 23 && p_tm->tm_sec == 00)
 { 
  digitalWrite(D4,HIGH);
  delay(1000);
 }
}

Print ค่าใน serial ออกมาเทียบกันดูก่อนครับ time now จริงกับที่ตั้งค่ามันเข้าเงื่อนไขจริงไหม Time zone ถูกต้องรึป่าว

ขอบคุณครับ

print ค่า serial monitor ออกมาแล้ว เวลาเดินตรงครับ
แต่ led On ก่อนถึงค่าเวลาที่ตั้งไว้ครับ

ขอภัยครับ ความรู้โค้ดผมน้อยน่ะครับ

int timezone = 7*3600;
int dst = 0;

void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);

  WiFi.mode(WIFI_STA);  
  WiFi.begin(ssid, password);
  Serial.println("\nConnecting to WiFi");
  while (WiFi.status() !=WL_CONNECTED) {
    Serial.print(".");
    delay(1000);
  }

  configTime(timezone, dst, "pool.ntp.org", "time.hist.gov");
  Serial.println("\nWaiting for time");
  while (!time(nullptr)) {
    Serial.print(",");
    delay(1000);
  }
  Serial.println("");
  pinMode(D4,OUTPUT);
}

void loop() {
  time_t now = time(nullptr);
  struct tm* p_tm = localtime(&now);
  
  Serial.print(p_tm->tm_hour);
  Serial.print(":");
  Serial.print(p_tm->tm_min);
  Serial.print(":");
  Serial.print(p_tm->tm_sec);
  Serial.println("");
  delay(1000);
  
  if(p_tm->tm_hour == 15 && p_tm->tm_min == 40 && p_tm->tm_sec == 00)
  
{
  digitalWrite(D4,LOW);
  delay(1000);
  
}
  if(p_tm->tm_hour == 15 && p_tm->tm_min == 41 && p_tm->tm_sec == 00)
 
  digitalWrite(D4,HIGH);
  delay(1000);
 
}

แก้ไข LED D4 ติดก่อนเวลาที่กำหนด - เพิ่มบรรทัดนี้ digitalWrite(D4, HIGH); ไปแล้ว พอถึงเวลาที่กำหนด หลอดไฟ ติดขึ้นแล้ว แต่พอให้ดับ มันกลับไม่ทำงาน มันสลับกับเมื่อกี้ล่ะครับ

void setup() {

pinMode(D4,OUTPUT);

digitalWrite(D4, HIGH); // เพิ่ม ป้องกัน D4 on ตอนสตาร์ทโปรแกรม
}

ได้แล้วครับ ผมไปลืมใส่ปีกกา ตอนสั่ง digitalwrite

ขอบพระคุณมากครับ ที่ชี้แนะแนวทาง

1 Likes

ฝากลงโค้ตเต็มที่ถูกต้องไว้ให้ศึกษาด้วยนะครับ

ไม่รู้ก็ถามเลยครับ ที่นี้ผมเปิดพื้นที่ให้ใช้กันได้อย่างเต็มที่ครับ

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

Code ตามนี้ครับ ผมก็ไป copy ของคนโน้นมา คนนี้มา ใส่ ๆ เอาน่ะครับ ผิด ๆ ถูก ๆ ยังไง ชี้แนะด้วยครับ
ขอบคุณครับ

#include <ESP8266WiFi.h>
#include <time.h>

const char* ssid = "xxxx";
const char* password = "xxxxxxx";

int timezone = 7*3600;
int dst = 0;

void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);

  WiFi.mode(WIFI_STA);  
  WiFi.begin(ssid, password);
  Serial.println("\nConnecting to WiFi");
  while (WiFi.status() !=WL_CONNECTED) {
    Serial.print(".");
    delay(1000);
  }

  configTime(timezone, dst, "pool.ntp.org", "time.hist.gov");
  Serial.println("\nWaiting for time");
  while (!time(nullptr)) {
    Serial.print(",");
    delay(1000);
  }
  Serial.println("");
  pinMode(D4,OUTPUT);
  digitalWrite(D4, HIGH);  // เพิ่มคำสั่งนี้ ป้องกัน D4 on ตอน start progam 
}

void loop() {
  time_t now = time(nullptr);
  struct tm* p_tm = localtime(&now);
  
  Serial.print(p_tm->tm_hour);
  Serial.print(":");
  Serial.print(p_tm->tm_min);
  Serial.print(":");
  Serial.print(p_tm->tm_sec);
  Serial.println("");
  delay(1000);
  
  if(p_tm->tm_hour == 15 && p_tm->tm_min == 59 && p_tm->tm_sec == 00)
  
{
  digitalWrite(D4,LOW);
  delay(1000);
  
}
  if(p_tm->tm_hour == 16 && p_tm->tm_min == 00 && p_tm->tm_sec == 00)

{
  digitalWrite(D4,HIGH);
  delay(1000);
 
}
}

copy ได้ครับ แต่ก็ทำความเข้าใจมันด้วย แค่นั้นเอง ฝึกไปเรื่อยๆ เดียวก็เก่ง

ขอบคุณครับ