ESP32-C6 na Prática: Sincronizando a Hora com NTP Server

Este post faz parte da série ESP32-C6 na Prática

Introdução

Neste artigo, mostraremos como utilizar o NTP Server para sincronizar o relógio da placa de desenvolvimento ESP32-C6 DevKitC-1 com a internet. Ideal para projetos IoT que precisam manter a data e a hora sempre atualizadas, sem hardware adicional como um RTC (relógio de tempo real). 

Um NTP Server (Network Time Protocol) é um serviço na rede que fornece a hora atual (baseada no UTC) para dispositivos clientes. Se quiser saber mais sobre o NTP, consulte a documentação deles em https://ntp.br

Para conhecer mais a placa de desenvolvimento consulte nosso artigo Introdução à Placa ESP32-C6-DevKitC-1: Ideal para IoT

Características do NTP Server

  • Alta precisão: sincronização da hora com precisão de milissegundos (suficiente para a maioria das aplicações embarcadas e IoT).
  • Sincronização entre múltiplos dispositivos: todos os dispositivos na rede podem ter a mesma hora baseados em um servidor comum.
  • Confiável para registros e automações: ideal para gerar logs, agendar tarefas e controlar eventos com base em horário real.
  • Requer conexão com a internet: para obter a hora, o dispositivo precisa acessar um servidor NTP externo (como pool.ntp.org).
  • Dispensa hardware adicional: não é necessário um RTC (Real Time Clock) físico no sistema.
  • Utiliza protocolo UDP (porta 123): comunicação leve e rápida via UDP, mas pode ser bloqueada por firewalls ou roteadores restritivos.

Materiais Necessários

Para desenvolver nossa aplicação os materiais utilizados foram:

  • Placa ESP23-C6 DevKitC-1
  • Cabo USB-C
  • Arduino IDE

Para configurar o ambiente e instalar o suporte a ESP32-C6 veja o artigo ESP32-C6 na Prática: Seu Primeiro “Hello World”

Circuito

O circuito utilizado para este artigo será a placa ESP32-C6 DevKitC-1 para mostrar as informações de tempo no monitor serial.

Figura 1: Circuito desenvolvido

Código

No projeto proposto, o ESP23-C6 DevKitC-1 é conectado à rede local para realizar a solicitação ao servidor NTP. Assim, é necessário conectar a placa à rede utilizando as credenciais do Wi-Fi. 

Adicione um arquivo credentials.h ao projeto com a seguinte estrutura para proteger suas credenciais do código principal.

#ifndef CREDENTIALS_H
#define CREDENTIALS_H
const char* SSID     = "****";
const char* PASSWORD = "****";
#endif

Para acompanhar o funcionamento do projeto, abra o monitor serial e verifique as etapas do código. 

Abaixo temos os pontos mais importantes para se trabalhar com o NTP Server. O código também está disponível para download no Github

#include <WiFi.h>         // Inclui a biblioteca WiFi para conectar ao WiFi
#include "credentials.h"  // Inclui o arquivo de credenciais do WiFi
#include <time.h>         // Inclui a biblioteca time para manipulação de tempo


// Configuração do NTP Server
const char* ntpServer  = "pool.ntp.org";  // Servidor NTP para sincronização de tempo  pool.ntp.org
const int32_t gmtOffset_sec  = -3 * 3600; // Offset de tempo em segundos (UTC -3 horas para o Brasil)
const int32_t daylightOffset_sec  = 0;    // Offset de horário de verão (0 para desativado)

void printTime() {
  struct tm timeinfo; // Estrutura de tempo tm chamada timeinfo
  if (!getLocalTime(&timeinfo)) {
    Serial.println("Falha ao obter tempo via NTP");
    return;
  }
  // Exibe a hora atual formatada com especificadores de formato
  Serial.println(&timeinfo, "Tempo atual: %H:%M:%S - %d/%m/%Y");
  Serial.println(&timeinfo, "Tempo atual: %A, %B %d %Y %H:%M:%S");
  Serial.println(&timeinfo, "Tempo atual: %c");
  Serial.println(&timeinfo, "Segundos: %S");


  char timeWeekDay[10]; // Variável para armazenar o dia da semana
  strftime(timeWeekDay,10, "%A", &timeinfo); // Formata o dia da semana
  Serial.println("Dia da semana: " + String(timeWeekDay)); // Exibe o dia da semana formatado
}

Na linha 29 fizemos o uso da estrutura de tempo tm chamada timeinfo que contém (min,seg,hora, etc…). Para saber mais consulte a documentação da estrutura tm em https://cplusplus.com/reference/ctime/tm/

Também utilizamos os especificadores para a estrutura de data e hora que você pode consultar mais exemplos em https://cplusplus.com/reference/ctime/strftime/

EspecificadorDescriçãoExemplo
%aDia da semana abreviadoThu
%ADia da semanaMonday
%bNome do mês abreviadoAug
%BNome do mês completoAugust
%cRepresentação Data e TempoThu Aug 23 14:55:02 2001
Tabela 1: Exemplo especificadores

Quer aprender a desenvolver projetos profissionais para ESP32 usando o Arduino? Confira o curso: Domine o ESP32 com Arduino: Da Base aos Projetos Avançados, Um Curso completo de ESP32 com Arduino: programação, conectividade e projetos.

Resultados

Se aparecer “Falha ao obter tempo via NTP”, é provável que a porta UDP 123 esteja bloqueada no seu roteador. Tente conectar o ESP32 ao hotspot do seu celular para verificar se o problema é da rede.

Figura 2: Monitor Serial com resultados

Conclusão

Neste artigo, mostramos como utilizar o NTP Server para sincronizar o relógio da placa de desenvolvimento ESP32-C6 DevKitC-1 com a internet. Visto que o NTP é uma ferramenta fundamental em qualquer projeto IoT que exige tempo confiável, sem RTC. E o ESP32 torna essa integração fácil com apenas algumas linhas de código.

Convidamos você a explorar projetos com sincronização de tempo pelo NTP Server, a fim de criar aplicações mais robustas e compartilhar seus resultados com a comunidade por meio de artigos ou vídeos.

Referências

ESP32-C6 na Prática

Criando uma Biblioteca de Botões para Arduino ESP32-C6 na Prática: Comunicação Bidirecional sem Wi-Fi usando ESP-NOW
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Internet Das Coisas » ESP32-C6 na Prática: Sincronizando a Hora com NTP Server

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: