Help with Intern RTC | ESP32

Hi

I have a problem. I need to use the ESP32 internal RTC to get the current date. I was using an NTC library to get the date from the internet and then I set that date on the RTC with the ESP32Time library. ( GitHub - fbiego/ESP32Time: An Arduino library for setting and retrieving internal RTC time on ESP32 boards)

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?

Thanks in advance.

Please post your sketch that shows the problem

The easier you make it to read and copy the code the more likely it is that you will get help

Please follow the advice given in the link below when posting code and use code tags

Sorry.

#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

Thanks

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