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.
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/.
| Especificador | Descrição | Exemplo |
| %a | Dia da semana abreviado | Thu |
| %A | Dia da semana | Monday |
| %b | Nome do mês abreviado | Aug |
| %B | Nome do mês completo | August |
| %c | Representação Data e Tempo | Thu Aug 23 14:55:02 2001 |
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.
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.




