i have this code for running a garden indoor. i´m going to set distinct time for run the light. My problem is that RTC module is not keeping de time after i turn the power off and on again.
is that something wrong after i run the rtc.begin(); function or anywhere else?
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#include <Wire.h>
#include <RTClib.h>
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "";
char ssid[] = "";
char pass[] = "";
const int hygrometer = 36; //Sensor de Umidade de solo
int value;
const int photopin = 34; //Sensor de Luz canal analogico
int valuephoto;
#define DHTTYPE DHT22 //Sensor Umidade do AR e Temperatura
#define DHTPIN 18
DHT dht(DHTPIN, DHT22);
float localHum = 0;
float localTemp = 0;
PCF8563 rtc;
DateTime alarm_l;
const byte rtc_int = 0;
int rele1 = 33;
int rele2 = 32;
void setup() {
Serial.begin(57600);
Serial.println("");
Serial.println("ESP32 DHT Temperature and Humidity");
Serial.println("");
pinMode(rele1, OUTPUT); // definições das portas rele1 e rele2
pinMode(rele2, OUTPUT);
digitalWrite(rele1, LOW); // LOW relay
digitalWrite(rele2, LOW);
rtc.begin();
pinMode(rtc_int, INPUT);
attachInterrupt(digitalPinToInterrupt(rtc_int), interrupt, FALLING);
Wire.begin(21,22);
delay(3000);
if (!rtc.isrunning()) {
Serial.println("RTC is NOT running!");
rtc.adjust(DateTime(2020,01,25,19,14,01));
}
delay(3000);
dht.begin();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, pass);
int wifi_ctr = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
Blynk.begin("", ssid, pass);
}
void loop(){
Blynk.run();
getDHT();
getSolo();
getLux();
getTime();
Serial.println("########### ");
return;
}
void getTime(){
DateTime now = rtc.now();
char buf[100];
strncpy(buf, "DD.MM.YYYY hh:mm:ss", 100);
Serial.println(now.format(buf));
Blynk.virtualWrite(V6, buf);
delay(2000);
return;
}
void interrupt() {
Serial.println("WakeUp");
}
void getLux(){
valuephoto = analogRead(photopin);
valuephoto = valuephoto;
WidgetLED led1(V5); //register to virtual pin 5
Serial.println(valuephoto);
Blynk.virtualWrite(V3, valuephoto);
if(valuephoto < 1000)
{
Serial.println("Relay OFF");
digitalWrite(rele1,LOW);
led1.on();
Blynk.setProperty(V5, "color", "#FF0000");
}
else
{
Serial.println("Relay ON");
digitalWrite(rele1,HIGH);
led1.on();
Blynk.setProperty(V5, "color", "#00FF2E");
}
delay(2000);
return;
}
void getSolo(){
value = analogRead(hygrometer); //Read analog value
value = value;
Serial.print("Soil humidity: ");
Serial.print(value);
Serial.println("%");
Blynk.virtualWrite(V4, value);
delay(2000);
return;
}
void getDHT(){
float tempIni = localTemp;
float humIni = localHum;
localTemp = dht.readTemperature();
localHum = dht.readHumidity();
Serial.print("TEMPERATURA: ");
Serial.print(localTemp);
Serial.println("C");
Serial.print("UMIDADE: ");
Serial.print(localHum);
Serial.println("%");
delay(2000);
Blynk.virtualWrite(V1, localTemp);
Blynk.virtualWrite(V2, localHum);
if (isnan(localHum) || isnan(localTemp)) // Check if any reads failed and exit early (to try again).
{
localTemp = tempIni;
localHum = humIni;
return;
}
}