ESPTOP 10 NTP Client -Server Get Date and Hour - Arduino IDE

ESPTOP 10 NTP Client -Server Get Date and Hour - Arduino IDE
O ESP32 é um quadro da Internet das Coisas (IoT) baseado em microcontrolador que pode ser interfocado com uma ampla gama de dispositivos. O ESP32 é amplamente utilizado em projetos baseados em IoT.

Trabalhar com o ESP32 ou qualquer outro tempo de microcontrolador é muito importante, pois o cronômetro embutido não é tão preciso para que possamos usar um Ntp Servidor para buscar tempo real e pode armazená -lo dentro de uma variável que pode ser usada posteriormente dentro do código ESP32.

O 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 nos fornecer relógios tão precisos quanto 1 ms, enquanto redes maiores, como LAN (Rede de Área Local), pode dar precisão com dezenas de milissegundos pela Internet. O uso deste relógio preciso ESP32 pode executar instruções em um horário específico.

Este guia contém o seguinte conteúdo:

  • 1: Introdução ao NTP (Network Time Protocol)
  • 2: Servidor NTP e configurações de tempo
    • 2.1: Servidor NTP:
    • 2.2: Offset GMT:
    • 2.3: Offset de luz do dia
  • 3: Imprimir em tempo real usando a função printlocaltime ()
    • 3.1: Código para imprimir em tempo real
    • 3.2: saída

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

NTP é um acrônimo de NEtwork Time PRotocol é um padrão usado para sincronizar os dispositivos tempo com seu fuso horário. O Protocolo de Time da rede sincroniza o tempo de todos os dispositivos de rede com o UTC também conhecido como tempo universal coordenado.

O UTC é semelhante ao GMT (Greenwich Mean Time), mas não muda e permanece o mesmo em todo o mundo. A idéia principal por trás do uso do UTC é ler o tempo do Ntp Servidor e, aplicando o deslocamento do UTC, podemos obter horário local de acordo com nosso fuso horário.

2: Servidor NTP e configurações de tempo

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

  • Servidor NTP
  • Offset GMT
  • Offset da luz do dia

1: servidor NTP

Vamos solicitar o tempo de piscina.ntp.org que contém dados de tempo em todo o mundo no servidor e qualquer um pode solicitar a hora local usando este pool. A seguir, alguns outros servidores que podemos acessar:

Área Nome de anfitrião
Mundialmente piscina.ntp.org
Ásia Ásia.piscina.ntp.org
Europa Europa.piscina.ntp.org
América do Norte América do Norte.piscina.ntp.org
Oceânia Oceânia.piscina.ntp.org
América do Sul América do Sul.piscina.ntp.org

2: Offset GMT

O deslocamento do GMT descreve a diferença de horário nas horas entre o fuso horário que você está vivendo para o GMT. Por exemplo, se usarmos o fuso horário dos EUA, podemos defini -lo como UTC = -11: 00.

3: Offset de luz do dia

Aqui, o deslocamento da luz do dia é o tempo de economia do dia que geralmente é tomado como 1 hora. O horário de verão significa avançar o relógio 1 hora durante o verão e alterá -los novamente no inverno. Este comando geralmente é usado onde um fuso horário personalizado é usado e a regra de poupança do dia é aplicada.

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

3: Imprimir em tempo real usando a função printlocaltime ()

O printlocaltime () função chamará o getLocalTime () função que envia a solicitação para o servidor NTP e armazena a data e hora de recebimento dentro do TimeInfo variável.

1: Código para imprimir em tempo real

Cole o código para NTP Server no Arduino IDE Editor. Conecte o ESP32 ao PC, selecione a porta COM e faça o upload do código.

#incluir
#include "tempo.h "
const char* ssid = "rede ssid";
const char* senha = "senha da rede";
const char* ntpServer = "Pool.ntp.org ";
const long gmtoffset_sec = 18000; /*Offset GMT +5 horas (18000 s)*/
const int DaylightOffset_sec = 3600; /*Offset de 1 hora de luz do dia*/
void printlocaltime ()
estrutura tm timeinfo;
se(!getLocalTime (& timeinfo))
Serial.println ("Falha ao obter tempo");
retornar;

Serial.println (& timeinfo, " %a, %b %d %y %h: %m: %s");

Void Setup ()
Serial.começar (115200);
// Conecte -se ao WiFi
Serial.printf ("conectando a %s", ssid);
Wi-fi.BEGIN (SSID, senha);
enquanto (wifi.status() != Wl_connected)
atraso (500);
Serial.imprimir(".");

Serial.println ("conectado");
// init e obtenha tempo
configtime (gmtoffset_sec, DaylightOffset_sec, ntpServer);
printlocaltime ();
// Desconecte o WiFi como não é mais necessário
Wi-fi.desconectar (verdadeiro);
Wi-fi.modo (wifi_off);

Void Loop ()
atraso (1000);
printlocaltime ();

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

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

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

const char* ntpServer = "Pool.ntp.org ";

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

No final, configuramos o ESP32 como cliente NTP e para obter data e hora. Para isso, usamos o configtime () função.

Por fim, 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 no TimeInfo variável.

Os seguintes comandos representam o TimeInfo estrutura.

Serial.println (& timeinfo, " %a, %b %d %y %h: %m: %s");

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

Especificadores Informação
%A Dia de retorno da semana
%B Mês de retorno
%d Dia de retorno do mês
%Y Retornar o ano atual
%H Retorne a hora atual
%M Retorne minutos atuais
%S Retornar segundos atuais

2: saída

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

O horário atual no meu PC e ESP32 é correspondido.

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

Conclusão

O tempo é muito importante para aplicações como carimbo de hora e executar instruções em horários específicos para gerar saída. Os temporizadores embutidos não são tão precisos, para que possamos 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 um tempo preciso de qualquer fuso horário em todo o mundo usando o ESP32.