Apparently it works well in the first reading, in fact the current date is correct, however, when requesting again, the date is wrong. Sometimes it comes with two hours less and sometimes two days less. I don't know why, I think it's a problem in the library.
Is there any other way for me to use the internal ESP32 RTC? Any other library?
#include <WiFiClient.h>
#include <ESP_WiFiManager.h>
#include <WiFi.h>
#include <NTPClient.h>
#include <ESP32Time.h>
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP);
ESP32Time rtc;
int segrtc;
int minrtc;
int horartc;
int anortc;
int mesrtc;
int diartc;
char ano2[5];
char mes2[3];
char dia2[3];
char hora2[3];
char minuto2[3];
char segundo2[3];
char dataHora2[21];
int anoInt2;
int mesInt2;
int diaInt2;
int horaInt2;
int minInt2;
int segInt2;
int dataMaxima;
const char* ssid = "XXX";
const char* password = "xXXXX";
void setup() {
Serial.begin(9600);
WiFi.begin(ssid, password);
NTPCIniciar();
defineData();
rtc.setTime(segInt2, minInt2, horaInt2, diaInt2, mesInt2, anoInt2);
}
void loop() {
dataRTC();
Serial.println("Ano2 convertido em int");
Serial.println(anortc);
Serial.println("Mes2 convertido em int");
Serial.println(mesrtc);
Serial.println("Dia2 convertido em int");
Serial.println(diartc);
Serial.println("Hora2 convertido em int");
Serial.println(horartc);
Serial.println("Minutos2 convertido em int");
Serial.println(minrtc);
Serial.println("Segundos2 convertido em int");
Serial.println(segrtc);
int dataAtual = rtc.getEpoch();
Serial.println("Data atual em timestamp");
Serial.println(dataAtual);
delay(7000);
}
void NTPCIniciar()
{
//INICIALIZA O NTPC CLIENT PARA PEGAR DATA E HORA
timeClient.begin();
// Set offset time in seconds to adjust for your timezone, for example:
// GMT +1 = 3600
// GMT +8 = 28800
// GMT -1 = -3600
// GMT 0 = 0
timeClient.setTimeOffset(-10800 /*CONFIGURADO PARA O FUSO HORÁRIO NO BRASIL*/);
}
void defineData()
{
String formattedDate;
String dayStamp;
String timeStamp;
while (!timeClient.update()) {
timeClient.forceUpdate();
}
// The formattedDate comes with the following format:
// 2018-05-28T16:00:13Z
// We need to extract date and time
Serial.println("TIMESTAMP");
unsigned long timeStamp2 = timeClient.getEpochTime();
Serial.println(timeStamp2);
formattedDate = timeClient.getFormattedDate();
Serial.println(formattedDate);
// Extract date
int splitT = formattedDate.indexOf("T");
dayStamp = formattedDate.substring(0, splitT);
Serial.print("DATE: ");
Serial.println(dayStamp);
// Extract time
timeStamp = formattedDate.substring(splitT + 1, formattedDate.length() - 1);
Serial.print("HOUR: ");
Serial.println(timeStamp);
//delay(6000);
formattedDate.toCharArray(dataHora2, sizeof(dataHora2));
for (int i = 0; i < 4; i++)
{
ano2[i] = dataHora2[i];
}
for (int i = 0; i < 2; i++)
{
mes2[i] = dataHora2[i + 5];
dia2[i] = dataHora2[i + 8];
hora2[i] = dataHora2[i + 11];
minuto2[i] = dataHora2[i + 14];
segundo2[i] = dataHora2[i + 17];
}
anoInt2 = atol(ano2);
mesInt2 = atol(mes2);
diaInt2 = atol(dia2);
horaInt2 = atol(hora2);
minInt2 = atol(minuto2);
segInt2 = atol(segundo2);
}
void dataRTC()
{
//rtc.setTime(segInt2, minInt2, horaInt2, diaInt2, mesInt2, anoInt2);
// Serial.println(rtc.getTime()); // (String) 15:24:38
// Serial.println(rtc.getDate()); // (String) Sun, Jan 17 2021
// Serial.println(rtc.getDate(true)); // (String) Sunday, January 17 2021
// Serial.println(rtc.getDateTime()); // (String) Sun, Jan 17 2021 15:24:38
// Serial.println(rtc.getDateTime(true)); // (String) Sunday, January 17 2021 15:24:38
// Serial.println(rtc.getTimeDate()); // (String) 15:24:38 Sun, Jan 17 2021
// Serial.println(rtc.getTimeDate(true)); // (String) 15:24:38 Sunday, January 17 2021
//
// Serial.println(rtc.getSecond()); // (int) 38 (0-59)
// Serial.println(rtc.getMinute()); // (int) 24 (0-59)
// Serial.println(rtc.getHour()); // (int) 3 (0-12)
// Serial.println(rtc.getHour(true)); // (int) 15 (0-23)
// Serial.println(rtc.getAmPm()); // (String) pm
// Serial.println(rtc.getAmPm(true)); // (String) PM
// Serial.println(rtc.getDay()); // (int) 17 (1-31)
// Serial.println(rtc.getDayofWeek()); // (int) 0 (0-6)
// Serial.println(rtc.getDayofYear()); // (int) 16 (0-365)
// Serial.println(rtc.getMonth()); // (int) 0 (0-11)
// Serial.println(rtc.getYear()); // (int) 2021
anortc = rtc.getYear();
mesrtc = rtc.getMonth() + 1;
diartc = rtc.getDay();
horartc = rtc.getHour(true);
minrtc = rtc.getMinute();
segrtc = rtc.getSecond();
}
The result is this, the result of the second loop is wrong:
Ano2 convertido em int
2021
Mes2 convertido em int
5
Dia2 convertido em int
8
Hora2 convertido em int
18
Minutos2 convertido em int
46
Segundos2 convertido em int
59
Data atual em timestamp
1620499619
Ano2 convertido em int
2021
Mes2 convertido em int
5
Dia2 convertido em int
8
Hora2 convertido em int
18
Minutos2 convertido em int
28
Segundos2 convertido em int
56
Data atual em timestamp
1620498536
Hi,
I ran your sketch here and I didn't have any problems.
See the listing.
Ano2 convertido em int 2021
Mes2 convertido em int 5
Dia2 convertido em int 9
Hora2 convertido em int 13
Minutos2 convertido em int 49
Segundos2 convertido em int 28
Data atual em timestamp 1620568168
Ano2 convertido em int 2021
Mes2 convertido em int 5
Dia2 convertido em int 9
Hora2 convertido em int 13
Minutos2 convertido em int 49
Segundos2 convertido em int 35
Data atual em timestamp 1620568175
Ano2 convertido em int 2021
Mes2 convertido em int 5
Dia2 convertido em int 9
Hora2 convertido em int 13
Minutos2 convertido em int 49
Segundos2 convertido em int 42
Data atual em timestamp 1620568182
Ano2 convertido em int 2021
Mes2 convertido em int 5
Dia2 convertido em int 9
Hora2 convertido em int 13
Minutos2 convertido em int 49
Segundos2 convertido em int 49
Data atual em timestamp 1620568189
Ano2 convertido em int 2021
Mes2 convertido em int 5
Dia2 convertido em int 9
Hora2 convertido em int 13
Minutos2 convertido em int 49
Segundos2 convertido em int 56
Data atual em timestamp 1620568196
Ano2 convertido em int 2021
Mes2 convertido em int 5