การนับวันที่ผ่าน Blynk

สอบถามหน่อยครับพี่พอดีผมจะนับวันที่ผ่าน Blynk ผมทำอะไรหรือกำหนดอะไรผิดไหมครับโค๊ดไม่ Eror แต่
มันไม่นับวันที่ให้ครับ

// *************** PIN ที่ให้ควบคุม RELAY + SENSOR *************
#define BLYNK_PRINT Serial
#define PIN_RELAY1  D5  // เครื่องกลับไข่
#define PIN_DHT     D4  // Sensor วัดค่าอุณหภูมิ
#define ON  LOW
#define OFF HIGH
//**********************************************************



#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Adafruit_Sensor.h>




//******************* Library DHT11 ************************

#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN      PIN_DHT   
#define DHTTYPE     DHT11 
DHT_Unified dht(DHTPIN, DHTTYPE);
sensors_event_t event;

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


// ******************* Library TIME + ตัวแปรนับวัน**************

#include <SPI.h>
#include "Wire.h"
#include <EEPROM.h>
#include <TimeLib.h>
#include <WidgetRTC.h>
SimpleTimer timer;
WidgetRTC rtc;   


int currentDatesi = 0;   
int rtctimer = 1;
String currentDate  ;
String daybefore;
int rowIndexroom1 = 0;  
int Dat = 0;

String currentDate2  ;
String daybefore2;


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

// ********************** การเชื่อมต่อ ***********************
const char ssid[] = "bsw";
const char pass[] = "tanarat17";
char auth[] = "zcOQpdRo6BnYg4QY7v82IZnBpo4UKjgc";
char server[] = "blynk.honey.co.th";
int port = 8080;
//*********************************************************


// ************** ตัวแปร LIMIT ความชื้น + อุณหภูมิ**************
int   limitHigh       = 43;
int   limitLow        = 37;
int   limitHighh      = 50 ;
int   limitLowh       = 70 ;
float tempSensorData  = 0;
float humiSensorData  = 0;
bool  autoCondition;
bool  autoCondition2;

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


//BlynkTimer timer;


//********************* ปรับค่า อุณหภูมิ **********************
void programProcess()
{
  if(autoCondition)
  {
    Serial.println(limitHigh);
    Serial.println(limitLow);
    Serial.println(tempSensorData);
       
    if(tempSensorData < limitLow)
    {
      //เปิด ไฟ
      Serial.println("Condition ");
      digitalWrite(PIN_RELAY1,ON);
      Blynk.virtualWrite(V11,HIGH);
    
    }
    if((tempSensorData >= limitLow) && (tempSensorData <= limitHigh))
    {
      Serial.println("Condition 1");
      digitalWrite(PIN_RELAY1,OFF);
      Blynk.virtualWrite(V11,LOW);
      Blynk.virtualWrite(V13,LOW);
    }  
    if(tempSensorData > limitHigh)
    {
      Serial.println("Condition 2");
      digitalWrite(PIN_RELAY1,OFF);
      Blynk.virtualWrite(V13,HIGH);
      Blynk.virtualWrite(V11,LOW);
    }
  }
//************************************************************************************
//************************************************************************************
//************************************************************************************
//****************************** ปรับค่า ความชื้น ****************************************
if(autoCondition2)
  {
    Serial.println(limitHighh);
    Serial.println(limitLowh);
    Serial.println(humiSensorData);

    
    if(humiSensorData < limitLowh)
    {
      Serial.println("Condition 4");
      Blynk.notify("ความชื้นต่ำกว่าที่กำหนด กรุณาตรวจสอบ");
    }
    
    if((humiSensorData >= limitLowh) && (humiSensorData <= limitHighh))
    {
      Serial.println("Condition 5");
      Blynk.virtualWrite(V14,LOW);
    }  

    
    if(humiSensorData > limitHighh)
    {
      Blynk.notify("ความชื้นสูงกว่าที่กำหนด กรุณาตรวจสอบ");
    }
  }
  
}
//************************************************************************************
//************************************************************************************
//************************************************************************************


void updateSensor()
{
  // check temperature 
  dht.temperature().getEvent(&event);
  if (isnan(event.temperature)) {
    Serial.println(F("Error reading temperature!"));
  }
  else {
    tempSensorData = event.temperature;
    Serial.print(F("Temperature: "));
    Serial.print(tempSensorData);
    Serial.println(F("°C"));

    Blynk.virtualWrite(V0,tempSensorData);
  }
  
  // check humidity
  dht.humidity().getEvent(&event);
  if (isnan(event.relative_humidity)) {
    Serial.println(F("Error reading humidity!"));
  }
  else {
    humiSensorData = event.relative_humidity;
    Serial.print(F("Humidity: "));
    Serial.print(humiSensorData);
    Serial.println(F("%"));

    Blynk.virtualWrite(V1,humiSensorData);
  }
}

BLYNK_WRITE(V2)
{
  limitHigh = param.asInt();
}
BLYNK_WRITE(V3)
{
  limitLow = param.asInt();
}
BLYNK_WRITE(V4)
{
  limitHighh = param.asInt();
}
BLYNK_WRITE(V5)
{
  limitLowh = param.asInt();
}
BLYNK_WRITE(V10)
{
  autoCondition = param.asInt();
}
BLYNK_WRITE(V11)
{
  if(!autoCondition)
  {
    if(param.asInt())
    {
      digitalWrite(PIN_RELAY1,ON);
    }
    else
    {
      digitalWrite(PIN_RELAY1,OFF);
    }
  }
}

BLYNK_WRITE(V15)
{
  if(param.asInt())
  {
    Blynk.virtualWrite(V21, 0); 
    rowIndexroom1 = 0;
    
  }
  else
  {
    Serial.println("");
  }
}


BLYNK_CONNECTED()
{
  Blynk.syncAll();
}

void setup()
{
  pinMode(PIN_RELAY1  , OUTPUT);      
  digitalWrite(PIN_RELAY1 , OFF); 
  Serial.begin(9600);
  dht.begin();  
  WiFi.begin(ssid, pass);
  Blynk.config(auth, server, port);
  Blynk.connect();
  updateSensor();
  timer.setInterval(2500L,updateSensor);
  timer.setInterval(5000L,programProcess);
  rtc.begin();
  rtctimer = timer.setInterval(2000L, checkRTC); 
}


//*****************ส่วนของการนับเวลา*******************

void checkRTC(){
  if(year() != 1970){
    timer.disable(rtctimer);  
    currentDate = String(day()) + "/" + month() + "/" + year();      
    daybefore=currentDate;
    timer.setInterval(60000L, table); 
  }
}


void table()                             
{
  currentDate = String(day()) + "/" + month() + "/" + year();  
   if(currentDate != daybefore)
    {
    rowIndexroom1++;
    Blynk.virtualWrite(V21, rowIndexroom1);   
    Serial.println("ADD DATE OK");
    daybefore=currentDate; 
    }
}

//**********************************************************************
void loop()
{

  
  Blynk.run();
  timer.run();


 
    
}

ขอดูหน้า ui app หน่อยว่ามีอะไรบ้าง

อันนี้ครับพี่

ตรงนี้ตั้งค่ายังไงบ้าง

ตัวอย่าง Code เรียกใช้ #include <Ethernet.h> ด้วยนะครับ ลองดู

https://github.com/blynkkk/blynk-library/blob/master/examples/Widgets/RTC/RTC.ino

Confirm ชุดนี้หรือยังว่ามันอ่านค่าวันออกมาปกติ

สงสัยเรื่อง Timer.setInterval(60000L, table) การเรียกใช้งานต้องอยู่ใน Loop ของ void setup() หรือเปล่า มาอยู่ข้างนอกมันสามารถทำงานได้ไหม ??

1 Like

โอ้วว จริงด้วยครับ มันต้องอยู่ใน void setup นะนิ ไม่งั้นมันไม่ทำงาน ถึงว่าให้เช็คว่ามันทำงานรึป่าว

มีการสั่งให้ checkRTC ทำ แต่ไม่แน่ว่า table จะทำงานรึป่าว ต้องย้ายคำสั่งขึ้นไปครับ

เดี๋ยวผมลองเช็คดูนะพี่ครับขอบคุณมากครับพี่

พี่ครับวันแรกขึ้นแล้วครับกำลังรอวันที่ 2 อยู่ครับ ผมใส่บรรทัดที่พี่บอกไปใน Void Setup

1 Like

ยอดเยี่ยมมากครับ รอเก็บผล และสรุป