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:
- Introdução ao NTP (Network Time Protocol)
- Servidor NTP e configurações de hora
- 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.