Blynk ตั้ง Timer แล้วไม่ทำงาน

แสดงว่า blynk หลักเขาฟิกค่า TimeZone ไว้

ล่าสุด กับโปรเจ็คนี้ แต่มีปัญหาอีกแล้ว คือ

1.notification ไม่แจ้งเตือน พอกลับไปใช้ server เดิม กลับใช้งาน notification ได้ (เวลาก็ยังไม่ตรงอยู่ดี)

#define BLYNK_PRINT Serial
#include <SPI.h>
#include <Ethernet.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <WidgetRTC.h>
#include <TimeLib.h>
#include <DHT.h>

#define DHTPIN D1
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#define wifiLed    LED_BUILTIN

int wifiFlag = 0;

int sensor = 0;
int sensorValue = 0;
int sensorState = 0;
int lastState = 0;

int sensorPin = D0;
int led1 = D2;
int led2 = D3;
int relay = D4;
int button1 = D5;
int button2 = D6;
bool auto_on = false;

WidgetRTC rtc;
WidgetLED ledBlynk_1(V12); // status auto mode
WidgetLED ledBlynk_2(V13); // status manual mode
WidgetLED ledBlynk_3(V14); // status working
WidgetLED ledBlynk_4(V15); // status timer

///mode auto///
void auto_on_mode()
{ digitalWrite(relay, 1);
  digitalWrite(led1, 1);
  digitalWrite(led2, 0);
  ledBlynk_1.on();
  ledBlynk_2.off();
  ledBlynk_3.on();
}
void auto_off_mode()
{ digitalWrite(relay, 0);
  digitalWrite(led1, 1);
  digitalWrite(led2, 0);
  ledBlynk_1.on();
  ledBlynk_2.off();
  ledBlynk_3.off();
}

///mode manual///
void manual_on_mode()
{ digitalWrite(relay, 1);
  digitalWrite(led1, 0);
  digitalWrite(led2, 1);
  ledBlynk_1.off();
  ledBlynk_2.on();
  ledBlynk_3.on();
}
void manual_off_mode()
{ digitalWrite(relay, 0);
  digitalWrite(led1, 0);
  digitalWrite(led2, 1);
  ledBlynk_1.off();
  ledBlynk_2.on();
  ledBlynk_3.off();
  ledBlynk_4.off();
}

int SetAutoprogram;

//set Auto soil Moisture sensor slider in app on pin V10
BLYNK_WRITE(V10) {
  SetAutoprogram = param.asInt();
}

char auth[] = "xx";
char ssid[] = "xx";
char pass[] = "xx";
SimpleTimer timer;

// Digital clock display of the time
void clockDisplay()
{
  // You can call hour(), minute(), ... at any time
  // Please see Time library examples for details

  String currentTime = String(hour()) + ":" + minute() + ":" + second();
  String currentDate = String(day()) + " " + month() + " " + year();
  Serial.print("Current time: ");
  Serial.print(currentTime);
  Serial.print(" ");
  Serial.print(currentDate);
  Serial.println();

  // Send time to the App
  Blynk.virtualWrite(V6, currentTime);
  // Send date to the App
  Blynk.virtualWrite(V11, currentDate);
}

BLYNK_CONNECTED() {
  Blynk.syncAll();
  rtc.begin(); // Synchronize time on connection
}

//blynk button auto
BLYNK_WRITE(V3) {
  if (param.asInt() == 1) {
    auto_on = true;
    autoprogram();
    Blynk.virtualWrite(V4, 0);
  }
  if (param.asInt() == 0) {
    auto_on = false;
    manual_off_mode();
  }
}

//blynk button manual
BLYNK_WRITE(V4) {
  if (param.asInt() == 1) {
    auto_on = false;
    manual_on_mode();
    Blynk.virtualWrite(V3, 0);
  }
  if (param.asInt() == 0) {
    auto_on = false;
    manual_off_mode();
  }
}

bool buttonStatus = 0;
bool buttonTemp = 0;

//mode auto button1
void checkStatusButton1() {

  buttonStatus = digitalRead(button1);

  if (buttonStatus != buttonTemp)
  {
    if (buttonStatus == 1) {
      auto_on = true;
      autoprogram();
      Blynk.virtualWrite(V3, 1);
      Blynk.virtualWrite(V4, 0);
    }
    else {
      auto_on = false;
      manual_off_mode();
      Blynk.virtualWrite(V3, 0);
    }
    buttonTemp = buttonStatus;
  }
}

//mode manual button2
void checkStatusButton2() {

  buttonStatus = digitalRead(button2);

  if (buttonStatus != buttonTemp)
  {
    if (buttonStatus == 1) {
      auto_on = false;
      manual_on_mode();
      Blynk.virtualWrite(V4, 1);
      Blynk.virtualWrite(V3, 0);
    }
    else {
      auto_on = false;
      manual_off_mode();
      Blynk.virtualWrite(V4, 0);
    }
    buttonTemp = buttonStatus;
  }
}

//timer 1
BLYNK_WRITE(V7) {
  if (param.asInt() == 1) {
    digitalWrite(relay, 1);
    ledBlynk_3.on();
    ledBlynk_4.on();
  }
  else {
    manual_off_mode();
  }
}

//timer 2
BLYNK_WRITE(V8) {
  if (param.asInt() == 1) {
    digitalWrite(relay, 1);
    ledBlynk_3.on();
    ledBlynk_4.on();
  }
  else {
    manual_off_mode();
  }
}

//timer 3
BLYNK_WRITE(V9) {
  if (param.asInt() == 1) {
    digitalWrite(relay, 1);
    ledBlynk_3.on();
    ledBlynk_4.on();
  }
  else {
    manual_off_mode();
  }
}

void sendTemp() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    return;
  }
  Blynk.virtualWrite(V1, t);
  Blynk.virtualWrite(V2, h);
}

void sendSoilValue() {
  sensorValue = analogRead(A0);
  sensorValue = map(sensorValue, 0, 1023, 100, 0);
  Blynk.virtualWrite(V5, sensorValue);
}

// called every 3 seconds by SimpleTimer
void checkBlynkStatus() {

  bool isconnected = Blynk.connected();
  if (isconnected == false) {
    wifiFlag = 1;
    digitalWrite(wifiLed, 1); //Turn off WiFi LED
  }
  if (isconnected == true) {
    wifiFlag = 0;
    digitalWrite(wifiLed, 0); //Turn on WiFi LED
  }
}

void autoprogram() {
  //auto pump with soil moisture sensor
  if (auto_on == true) {
    if (sensorValue <= SetAutoprogram) {
      auto_on_mode();
    }
    else if (sensorValue > SetAutoprogram) {
      auto_off_mode();
    }
  }
}

void setup() {
  
  pinMode(sensorPin, INPUT);
  pinMode(DHTPIN, INPUT);
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(relay, OUTPUT);

  digitalWrite(button1, 0);
  digitalWrite(button2, 0);
  digitalWrite(led1, 0);
  digitalWrite(led2, 1);
  digitalWrite(relay, 0);

  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass, "oasiskit.com", 8080);
  setSyncInterval(10 * 60); // Sync interval in seconds (10 minutes)
  dht.begin();

  timer.setInterval(1000L, sendTemp);
  timer.setInterval(1000L, sendSoilValue);
  timer.setInterval(1000L, clockDisplay);
  timer.setInterval(1000L, autoprogram);
  timer.setInterval(500L, checkStatusButton1);
  timer.setInterval(500L, checkStatusButton2);
}

void loop() {
  Blynk.run();
  timer.run();

  //send notification
  sensorState = digitalRead(sensorPin);
  Serial.println(sensorState);

  if (sensorState == 1 && lastState == 0) {
    Blynk.notify("Water your plants");
    lastState = 1;
    delay(1000);
  }

  //do nothing, has not been watered yet
  else if (sensorState == 1 && lastState == 1) {
    delay(1000);
  }

  //st
  else {
    lastState = 0;
    delay(1000);
  }
}

เอาจอ lcd ออก แล้วเปลี่ยนเป็นไฟสถานะ led แทน

ส่วนเรื่องปุ่มกดหน้าตู้ คิดว่าน่าจะใช้งานได้แล้ว

ฝากโค๊ดและตัวโคลนไว้ เผื่อเพื่อนๆ สนใจ สามารถเอาไปปรับใช้ได้ ^^

(ยังไม่สมบูรณ์เต็มร้อย แต่ก็ถือว่าเกิน 80))) ////

ตรงนี้ถ้าเป็น blynk หลัก จะมีการแจ้งเตือนครับ ถ้าไปใช้ Blynk แจกจะไม่มี

เยี่ยมมากครับ มีไอเดียร์ หรือติดปัญหาอะไรเอามาแชร์กันนะครับ