ESP32 NTP Client-Server: obter data e hora – Arduino IDE

Esp32 Ntp Client Server Obter Data E Hora Arduino Ide



O ESP32 é uma placa de Internet das Coisas (IoT) baseada em microcontrolador que pode ser conectada a uma ampla variedade de dispositivos. O ESP32 é amplamente utilizado em projetos baseados em IoT.

Trabalhar com o ESP32 ou qualquer outro tempo do microcontrolador é muito importante, pois o timer embutido não é tão preciso, então podemos usar um NTP server para buscar em tempo real e pode armazená-lo dentro de uma variável que pode ser usada posteriormente dentro do código ESP32.

Network Time Protocol (NTP) usa o Tempo Universal Coordenado (UTC) que sincroniza o relógio do sistema com grande precisão e precisão. Em redes menores, o NTP pode fornecer relógios com precisão de 1 ms, enquanto redes maiores, como LAN (Local Area Network), o NTP pode fornecer precisão com dezenas de milissegundos pela Internet. Usando este relógio preciso, o ESP32 pode executar instruções em um horário específico.







Este guia contém os seguintes conteúdos:



  1. Introdução ao NTP (Network Time Protocol)
  2. Servidor NTP e configurações de hora



  3. Imprimindo em tempo real usando a função printLocalTime()





1: Introdução ao NTP (Network Time Protocol)

NTP é um acrônimo de N rede T façam P rotocol é um padrão usado para sincronizar a hora dos dispositivos com seu fuso horário. O protocolo de horário da rede sincroniza o horário de todos os dispositivos de rede com o UTC, também conhecido como Tempo Universal Coordenado.

UTC é como GMT (Greenwich Mean Time), mas não muda e permanece o mesmo em todo o mundo. A ideia principal por trás do uso do UTC é ler o tempo do NTP servidor e aplicando o deslocamento UTC, podemos obter a hora local de acordo com nosso fuso horário.



2: Servidor NTP e configurações de horário

Para ler a hora do servidor NTP, precisamos declarar as seguintes variáveis ​​dentro do código usando essas variáveis, podemos obter a hora do servidor NTP.

  • Servidor NTP
  • Compensação GMT
  • Deslocamento da luz do dia

2.1: Servidor NTP

Solicitaremos tempo de pool.ntp.org que contém dados de hora mundial no servidor e qualquer um pode solicitar sua hora local usando este pool. A seguir estão alguns outros servidores que podemos acessar:

Área nome de anfitrião
No mundo todo pool.ntp.org
Ásia asia.pool.ntp.org
Europa europe.pool.ntp.org
América do Norte north-america.pool.ntp.org
Oceânia oceania.pool.ntp.org
América do Sul south-america.pool.ntp.org

2.2: Compensação GMT

O deslocamento GMT descreve a diferença de tempo em horas entre o fuso horário em que você vive e o GMT. Por exemplo, se usarmos o fuso horário dos EUA, podemos configurá-lo para UTC = -11:00 .

2.3: Deslocamento da luz do dia

Aqui, o deslocamento da luz do dia é o horário de verão, que geralmente é considerado como 1 hora. O horário de verão significa adiantar o relógio 1 hora durante o verão e atrasá-lo novamente no inverno. Esse comando geralmente é usado onde um fuso horário personalizado é usado e a regra de horário de verão é aplicada.

Como abordamos o básico do servidor NTP, agora verificaremos como podemos enviar uma solicitação ao servidor NTP e ler a hora local usando o ESP32 com o código Arduino IDE.

3: Imprimindo em tempo real usando a função printLocalTime()

o printLocalTime() função irá chamar o getLocalTime() função que envia a solicitação ao servidor NTP e armazena a data e hora recebidas dentro do informação de tempo variável.

3.1: Código para imprimir em tempo real

Cole o código fornecido para o servidor cliente NTP no editor Arduino IDE. Conecte o ESP32 com o PC, selecione a porta COM e faça o upload do código.

#include
#include 'tempo.h'
caracter const * ssid     = “REPLACE_WITH_YOUR_SSID”;
caracter const * senha = “REPLACE_WITH_YOUR_PASSWORD”;
caracter const * ntpServer = 'pool.ntp.org' ;
const longo  gmtOffset_sec = 18000 ; /* GMT OFFSET + 5 HORAS ( 18000 SEC ) */
const int   daylightOffset_sec = 3600 ; /* 1 horas de compensação da luz do dia */
void printLocalTime ( )
{
struct tm timeinfo;
E se ( ! getLocalTime ( & informação de tempo ) ) {
Serial.println ( 'Falha ao obter tempo' ) ;
Retorna ;
}
Serial.println ( & informação de tempo, '%A, %B %d %Y %H:%M:%S' ) ;
}
anular configuração ( )
{
Serial.begin ( 115200 ) ;
// conectar ao Wi-Fi
Serial.printf ( 'Conectando a %s' , ssid ) ;
WiFi.begin ( ssid, senha ) ;
enquanto ( WiFi.status ( ) ! = WL_CONNECTED ) {
atraso ( 500 ) ;
Serial.print ( '.' ) ;
}
Serial.println ( ' CONECTADO' ) ;
// inicialize e obtenha o Tempo
configTime ( gmtOffset_sec, daylightOffset_sec, ntpServer ) ;
printLocalTime ( ) ;
// desconectar wi-fi Como isto não é mais necessário
WiFi.disconnect(true);
WiFi.modo(WIFI_OFF);
}
laço vazio()
{
atraso(1000);
printLocalHora();
}

O código começou incluindo o WiFi e a biblioteca de tempo. Wi-fi biblioteca ajudará a conectar o ESP32 com uma rede enquanto Tempo A biblioteca lidará com a sincronização do servidor NTP.

Depois disso, é definido o SSID e a senha da rede à qual o ESP32 se conectará. Substitua sua credencial de rede aqui. Depois disso definimos Compensação GMT como 18000 segundos, que é (UTC + 5 horas). Você pode substituir seu próprio fuso horário UTC aqui. Segue o link para obter o Compensação GMT para o seu fuso horário.

Além disso, o endereço do servidor NTP é especificado usando o comando:

caracter const * ntpServer = 'pool.ntp.org' ;

Este comando seleciona automaticamente o servidor de horário que irá procurar você. No entanto, também podemos definir um fuso horário usando os servidores NTP explicados no Servidor NTP seção.

Ao final configuramos o ESP32 como cliente NTP e obtemos data e hora. Para isso utilizamos o configTime() função.

Por último, usando o printLocalTime() função, a data e hora atuais são impressas no monitor serial. Esta função contém uma estrutura de tempo tm que armazena todas as informações do informação de tempo variável.

Os comandos a seguir representam o informação de tempo estrutura.

Serial.println ( & informação de tempo, '%A, %B %d %Y %H:%M:%S' ) ;

Cada letra da estrutura do tempo refere-se a uma informação específica:

Especificadores Em formação
%UMA Dia de retorno de uma semana
%B mês de retorno
%d Dia do mês de retorno
%Y Retorna o ano atual
%H Retorna a hora atual
% M Retornar os minutos atuais
%S Retornar os segundos atuais

3.2: Saída

Após o upload do código, o ESP32 se conectará a uma rede WiFi e enviará uma solicitação ao servidor NTP para receber a data e hora atuais. A saída a seguir pode ser vista no monitor serial do Arduino.

A hora atual no meu PC e ESP32 é compatível.

Lemos com sucesso o tempo do servidor NTP usando o ESP32 como cliente.

Conclusão

O tempo é muito importante para aplicativos como registro de data e hora e execução de instruções em horários específicos para gerar saída. Os temporizadores embutidos não são tão precisos, então podemos usar um servidor NTP para ler a hora e a data atuais. Este tempo pode ser armazenado dentro de uma variável para usar dentro do nosso código. Esta lição ajuda a obter a hora exata de qualquer fuso horário do mundo usando o ESP32.