25 de abril de 2021

Data e Hora no ESP32 - NTP

O NTP (Network Time Protocol) é o protocolo que permite a sincronização do relógio do circuito com a internet. Mantendo a data e a hora sempre atualizadas em tempo real.


Um circuito com a data e a hora sempre atualizadas, principalmente para projetos IoT (Internet das Coisas), é muito importante.

No ESP32 utilizaremos uma atualização da biblioteca NTPClient, que inclui a função getFormattedDate(), com a conversão do Epoch Time para Data e Hora atuais.

O exemplo mostra através da comunicação serial o retorno dos valores de data e hora atualizados via internet.


Referências:
https://ntp.br/ntp.php
https://pt.wikipedia.org/wiki/Network_Time_Protocol


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/*---------------------------------------------------------
  Programa : DATA/HORA - NTP
  Autor    : Fellipe Couto [ http://www.efeitonerd.com.br ]
  Data     : 25/04/2021
  ---------------------------------------------------------*/
#include <NTPClient.h> //https://github.com/taranais/NTPClient
#include <WiFi.h>

const char ssid[] = "REDE_WIFI";
const char password[] = "PASSWORD";

WiFiUDP ntpUDP;
NTPClient ntp(ntpUDP);

void setup() {
  Serial.begin(115200);

  WiFi.begin(ssid, password);
  Serial.print("Conectando no WiFi..");
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
    Serial.print(".");
  }
  Serial.println("\nConectado!\n");

  ntp.begin();

  //GMT em segundos
  // +1 = 3600
  // +8 = 28800
  // -1 = -3600
  // -3 = -10800 (BRASIL)
  ntp.setTimeOffset(-10800);
}

void loop() {
  if (ntp.update()) {
    Serial.print("DATA/HORA: ");
    Serial.println(ntp.getFormattedDate());

    Serial.print("HORARIO: ");
    Serial.println(ntp.getFormattedTime());

    Serial.print("HORA: ");
    Serial.println(ntp.getHours());

    Serial.print("MINUTOS: ");
    Serial.println(ntp.getMinutes());

    Serial.print("SEGUNDOS: ");
    Serial.println(ntp.getSeconds());

    Serial.print("DIA DA SEMANA (0=domingo): ");
    Serial.println(ntp.getDay());

    Serial.print("EPOCH TIME (Segundos desde 01/01/1970): ");
    Serial.println(ntp.getEpochTime());

    Serial.println();

  } else {
    Serial.println("!Erro ao atualizar NTP!\n");
  }
  delay(10000);
}

2 comentários:

  1. ntp.getFormattedDate() está dando erro

    ResponderExcluir
    Respostas
    1. Bom dia! A biblioteca NTPClient padrão não possui a getFormattedDate(). Conforme escrevi na postagem, utilizei a NTPClient modificada [ https://github.com/taranais/NTPClient ].
      A diferença entre elas é somente a inclusão da getFormattedDate().
      Abraços!

      Excluir