รบกวนมีโค้ดตัวอย่าง ตั้งเวลาปิด / เปิด ไฟ ผ่าน esp8266 ด้วย Code ไหมครับ
ปล.ตั้งเวลาผ่าน Blynk ใช้ Timer ได้ แต่ถ้าเขียนโค้ดลงไปใน IDE เลย ไม่ทราบว่าต้องเขียนแบบไหนครับ
ขอบคุณครับ
รบกวนมีโค้ดตัวอย่าง ตั้งเวลาปิด / เปิด ไฟ ผ่าน 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
ขอบพระคุณมากครับ ที่ชี้แนะแนวทาง
ฝากลงโค้ตเต็มที่ถูกต้องไว้ให้ศึกษาด้วยนะครับ
ไม่รู้ก็ถามเลยครับ ที่นี้ผมเปิดพื้นที่ให้ใช้กันได้อย่างเต็มที่ครับ
ขอบคุณมาก ๆ ครับ
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 ได้ครับ แต่ก็ทำความเข้าใจมันด้วย แค่นั้นเอง ฝึกไปเรื่อยๆ เดียวก็เก่ง
ขอบคุณครับ