Ao construir um projeto de IoT que depende da hora do dia, você deseja que ele mostre a hora correta sem precisar de ajustes manuais. Parece que isso seria fácil de realizar com o ESP32, pois possui wireless embutido e pode se conectar à Internet.

No entanto, embora existam muitos exemplos online que mostram como configurar o ESP32 para se conectar à Internet e sincronizar a hora com um servidor, a maioria deles exige que você ajuste o horário de verão manualmente duas vezes por ano, o que parece bastante ridículo para qualquer computador eletrônico do século XXI. dispositivo.

Aqui apresentaremos uma solução que permitirá que o ESP32 mostre a hora correta, para qualquer lugar do mundo, durante todo o ano. Mas primeiro, vamos dar uma olhada no exemplo SimpleTime no Arduino IDE e ver o que ele faz e como podemos melhorá-lo.

O Exemplo SimpleTime

Se você usar o Arduino IDE com o ESP32, verá que ele tem um exemplo chamado SimpleTime que se parece com isso:

Você pode acessar este exemplo configurando o Arduino IDE para usar uma placa ESP32, a partir do

instagram viewer
Ferramentas menu, como selecionando o Módulo de desenvolvimento ESP32. Depois de ter feito isso, você pode acessar o exemplo SimpleTime do Ferramentas menu abaixo Exemplos,ESP32,Tempo, e Tempo Simples.

Pode-se esperar que este exemplo oficial demonstre a melhor maneira de fazer as coisas, mas há um grande problema neste exemplo. Para configurar o fuso horário e o horário de verão, você deve alterar as duas linhas a seguir:

const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;

Definir o fuso horário usando gmtOffset_sec é inconveniente porque você precisa encontrar o deslocamento GMT para sua localização específica. Você pode fazer isso consultando o Site da Hora Média de Greenwich. Felizmente, você só precisa fazer isso uma vez. O daylightOffset_sec apresenta um problema maior, no entanto, porque você precisa ajustá-lo duas vezes por ano. Isso pode exigir que você desative seu projeto e conecte-o ao Arduino IDE duas vezes por ano, tornando-o totalmente inadequado para um projeto de IoT que você deseja configurar e esquecer.

Procurando uma abordagem melhor

Então, qual seria a melhor maneira de configurar o fuso horário e o horário de verão? Para responder a essa pergunta, não procure mais, como seu PC com Windows lida com a situação:

Observe como, em vez de ter que fornecer deslocamentos de horário do GMT, informamos ao Windows qual é nosso fuso horário e local - no nosso caso Horário das Montanhas (EUA e Canadá)— e marque a caixa de seleção Ajuste automaticamente o relógio para o horário de verão. A partir desse ponto, o Windows lida com isso automaticamente para nós durante todo o ano. Este é o tipo de conveniência que queremos do nosso ESP32.

Relacionado: Como personalizar o relógio da bandeja do sistema no Windows

Criando um banco de dados de localização para o ESP32

Fazer a mesma coisa no ESP32 requer algum trabalho braçal. começamos com um postagem do blog que descrevia como configurar o fuso horário usando a variável de ambiente TZ. Para a nossa localização, aconteceu MST7MDT, M3.2.0, M11.1.0, de acordo com isso tabela de fuso horário. Embora isso tenha resolvido o problema de ter que ajustar manualmente o horário de verão, queríamos o processo seja mais simples, sem a necessidade de procurar uma sequência de números e letras para cada localização.

Convertemos os dados do site em um banco de dados que você pode usar diretamente de seus esboços do Arduino. Seguir esse link para baixar diretamente um arquivo zip com o esboço do Arduino.

O próprio banco de dados é armazenado no arquivo time_zone.h. Usando o banco de dados, o código para SimpleTime fica assim:

Destacamos as modificações no exemplo SimpleTime em amarelo. Esta linha permitirá que o sketch use o banco de dados:

#include "time_zones.h"

Esta linha configura sua localização:

const char* location = "América/Denver";

Existem 461 localizações possíveis. Você pode encontrar os locais disponíveis consultando o time_zone.h arquivo, ou olhando para a lista de fuso horário em esse site.

Por fim, a linha a seguir informa ao ESP32 para sincronizar a hora com um servidor de Internet usando o Network Time Protocol (NTP):

configTimeWithTz (getTzByLocation (local), ntpServer);

O servidor de horário da Internet específico pode ser configurado usando a seguinte linha, embora o padrão deva funcionar bem para você:

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

Você também deseja certificar-se de adicionar as informações do seu ponto de acesso sem fio nas duas linhas a seguir:

const char* ssid = "SEU_SSID";
const char* senha = "SEU_PASS";

Substituir YOUR_SSID com o nome da sua rede sem fio e SEU PASSE com a senha usada para se conectar a ele.

Relacionado: Maneiras de configurar com segurança um roteador sem fio como um ponto de acesso público

Terminando

Depois de concluir as etapas de configuração, faça o upload do esboço para o ESP32 e ele usará a hora correta durante todo o ano sem nenhuma intervenção!

Embora esse código seja um bom ponto de partida, existem maneiras mais fáceis de usar para realizar a mesma coisa. Por exemplo, você pode permitir que o usuário configure tudo a partir de uma página da Web em vez de fazer isso em tempo de compilação. Fazer isso é um pouco mais trabalhoso, pois você precisaria fazer as seguintes coisas no seu esboço do Arduino:

  1. Configure o ESP32 como um ponto de acesso sem fio para configuração inicial
  2. Inicie um servidor web para apresentar ao usuário uma página de configuração
  3. Crie um formulário HTML para permitir que o usuário insira as informações da rede sem fio e selecione sua localização
  4. Criar o código para processar as escolhas do usuário e armazená-lo em memória não volátil
  5. Ao ligar a placa:
    • Leia a configuração da memória não volátil
    • Conecte-se à rede sem fio e sincronize a hora

Um projeto que demonstra essas etapas é o Relógio ESP32 Dali. Foi este projeto que nos levou a encontrar uma maneira melhor de fazer a sincronização de tempo no ESP32.

Crédito da imagem: Márcio Teixeira/Flickr

Confira a Código fonte para o ESP32 Dali Clock para ver como mostrar uma página de configuração da Web com todos os recursos. A página de configuração mostra um menu suspenso para permitir que o usuário selecione sua localização e fuso horário e também permite que o usuário defina a hora manualmente usando um widget de hora e calendário, para um não conectado alternativo!

Sincronização de tempo de rede baseada em localização no ESP32

Agora você tem todas as informações necessárias para poder ajustar automaticamente o relógio do seu ESP32 para a hora correta e também ajustá-lo para o horário de verão. Isso é perfeito para projetos de IoT que você não deseja ajustar manualmente.

7 projetos interessantes que usam o ESP32 para gerar vídeo composto

Se você está procurando projetos interessantes com o ESP32, está no lugar certo.

Leia a seguir

CompartilhadoTweetE-mail
Tópicos relacionados
  • faça você mesmo
  • ESP32
  • Internet das Coisas
Sobre o autor
Márcio Teixeira (4 artigos publicados)

Sou um fabricante com interesse especial em software de código aberto, eletrônica, impressão 3D, computação gráfica e retro-computação.

Mais de Márcio Teixeira

Assine a nossa newsletter

Junte-se à nossa newsletter para dicas de tecnologia, análises, e-books gratuitos e ofertas exclusivas!

Clique aqui para assinar