ปฏิบัติการนี้จะใช้เครื่องมือ Time Input มาตั้งเวลา และงานนี้ต้องเทียบเวลาจาก Time Server ผ่านบริการ Network Time Protocol (NTP) ก่อนเพื่อให้อุปกรณ์ทำงานในเวลาปัจจุบัน จากนั้นจะใช้ค่าเวลาจาก widget มาเปรียบเทียบ ว่าจะให้เปิด/ปิดตอนไหน
โดยตังอย่างจะเป็นการตั้งเวลาให้รีเลย์ทำงานทุกวันในช่วงระยะเวลาที่กำหนด
6.1 ตั้งเวลาของ NodeMCU ให้ตรง ด้วยการเทียบเวลาจาก Network Time Protocol (NTP)
int timezone = 7 * 3600; //ตั้งค่า TimeZone ตามเวลาประเทศไทย
int dst = 0; //กำหนดค่า Daylight saving time
void setup() {
// NTP Sync
configTime(timezone, dst, "pool.ntp.org", "time.nist.gov");
}
6.2 กำหนด Datastreams V8 สำหรับการรับค่าจาก Time input (มีเฉพาะ Blynk บนมือถือ)
// V8 Time Input
BLYNK_WRITE(V8) {
long startTimeInSecs = param[0].asLong();
long stopTimeInSecs = param[1].asLong();
time_t now = time(nullptr);
struct tm* timeinfo = localtime(&now);
long presentTimeInSecs = timeinfo->tm_hour*3600+(timeinfo->tm_min*60);
Serial.println(startTimeInSecs);
Serial.println(stopTimeInSecs);
Serial.println(presentTimeInSecs);
Serial.println(asctime(timeinfo));
if((presentTimeInSecs >= startTimeInSecs) && (presentTimeInSecs < stopTimeInSecs)) {
digitalWrite(D1, LOW);// code here to switch the relay ON
} else {
digitalWrite(D1, HIGH); // code here to switch the relay OFF
}
Serial.println();
}
6.3 เพิ่มในฟังก์ชั่น BLYNK_CONNECTED() ให้ sync V8 ที่เพิ่มมาใหม่ด้วย
6.4 เวลารีเลย์ทำงานให้ปรับปุ่มทีสถานะ ON/OFF ปุ่มสร้างไว้ด้วย
ถ้าจะทำขั้นนี้ได้ ต้องเข้าใจ Blynk ว่าส่งเสริมการใช้งาน Virtual Pin ฉะนั้นต้องเปลี่ยนจาก Digital Pin มาเป็น Virtual Pin แทน นี่คือที่มาว่าทำไมถึงเว้น V7 ไว้
// V7 is Button On/Off
BLYNK_WRITE(V7) {
if(param.asInt() == 1){
digitalWrite(D1,HIGH);
} else {
digitalWrite(D1,LOW);
}
Serial.print("Blynk.Cloud is writing V1 is ");
Serial.println(param.asInt());
Serial.println();
}
และอย่าลืมเพิ่มคำสั่ง Blynk.syncVirtual(V7); ในฟังก์ชั่น BLYNK_CONNECTED() และปรับให้ปุ่มเปิดปิดนั้นมาใช้ Datastreams นี้แทน Digital Pin เดิม
เพิ่มเติม ทำไมเขาถึงให้ใช้ Virtual Pin
เขาอธิบายไว้ในหน้านี้ https://docs.blynk.io/en/getting-started/using-virtual-pins-to-control-physical-devices สรุปก็คือ
Virtual pins ไม่ขึ้นกับฮาร์ดแวร์ ง่ายเวลาพอร์ตไปใช้กับฮาร์ดแวร์อื่น
สะดวกกว่า เช่นใช้ Virtual pins เดียวควบคุมหลาย digital pins ซึ่งถ้าผูก widgets กับ digital pins โดยตรงจะทำแบบนี้ไม่ได้ ทำได้แค่ 1:1
เขาก็ว่ามัน stable กว่า