Como fazer um relógio de Internet usando ESP8266

A Internet das coisas (IoT) oferece diversas aplicações interessantes, incluindo um relógio de Internet. Este dispositivo de cronometragem usa uma conexão com a Internet para sincronizar a hora com um servidor de horário. Isso garante cronometragem altamente precisa, alinhando-se com o tempo universal coordenado (UTC) dos servidores online.

A maioria dos relógios da Internet usa NTP, um protocolo projetado para sincronizar relógios em uma rede. Os relógios da Internet mantêm alta precisão sincronizando com relógios atômicos ou horário do GPS. Esses relógios também se ajustam automaticamente ao fuso horário correto com base na localização da rede.

Neste projeto, projetaremos um relógio de Internet usando ESP8266. As informações de hora e clima são obtidas pelo relógio em WeatherAPI.com e exibidas em uma tela OLED SSD1306. Qualquer tela de exibição, como uma de tamanho maior, pode ser usada para exibir o relógio.

Componentes

1. ESP8266/ESP32 x1
2. SSD1306 OLEDx1
3. Conectando ou fios Dupont
4. Cabo microUSB para conectar ESP ao computador
5. Fonte de alimentação para ESP8266/ESP32

Conexões de circuito
Para este projeto, você precisará fazer a interface do ESP8266 ou ESP32 com um OLED SSD1306. Estamos construindo nosso projeto usando ESP8266. O display OLED SSD1306 é um módulo OLED de 7 pinos com interfaces SPI e I2C. Um OLED de 0,96″ está na imagem abaixo.

Para fazer a interface do SSD1306 OLED com o ESP8266, faça as conexões do circuito conforme descrito na tabela abaixo.

Lembre-se de substituir o SSID e a chave de rede no esboço pelos da sua conexão WiFi pessoal. Além disso, substitua a chave API pela sua em WeatherAPI.com (que pode ser obtida registrando-se lá).

Como funciona este projeto
Um microcontrolador com recursos Ethernet ou WiFi (integrado ou através de uma blindagem externa ou placa de interrupção) é necessário para construir este relógio de Internet.

Usamos ESP8266 para construir nosso relógio, que possui funcionalidade WiFi, por isso se conecta facilmente a qualquer rede. Quando o ESP8266 está ligado, ele se conecta ao WiFi usando o SSID e a senha de rede fornecidos. Em seguida, ele faz uma solicitação HTTP para WeatherAPI.com para os dados JSON da API Realtime.

Os dados JSON recebidos são desserializados e os dados específicos sobre data, hora, local e clima são recuperados. Esses dados são formatados e exibidos no display OLED em um modelo definido pelo usuário.

O código
O esboço começa importando ESP8266WiFi.h, ESP8266HTTPClient.h, ArduinoJson.h, SPI.h, Wire.h, Adafruit_GFX.h e as bibliotecas Adafruit_SSD1306.h.

Aqui está um resumo de cada processo:

  • ESP8266WiFi.h é usado para conectar o ESP8266 à rede WiFi.
  • ESP8266HTTPClient.h faz solicitações HTTP do ESP8266 para o servidor web, que é WeatherAPI.com.
  • ArduinoJson.h analisa e desserializa os dados JSON recebidos da API Realtime do WeatherAPI.
  • SPI.h e Wire.h são usados ​​para fazer a interface do SSD1306 OLED com o ESP8266.
  • As bibliotecas Adafruit_GFX.h e Adafruit_SSD1306.h gerenciam o display OLED SSD1306.

A seguir, as variáveis ​​​​são declaradas para as atribuições de pinos que fazem a interface do ESP8266 com o SSD1306 OLED. Um objeto “display” da classe Adafruit_SSD1306 é instanciado. As variáveis ​​são declaradas para armazenar o SSID, a senha da rede WiFi e a chave API do WeatherAPI.com. Em seguida, algumas variáveis ​​globais são declaradas para armazenar temperatura, umidade, velocidade do vento, precipitação, data, hora, data formatada, hora formatada e o dia da semana.

A função definida pelo usuário dayOfWeek é definida em seguida para derivar o dia da semana da data do calendário gregoriano usando o algoritmo de Congruência de Zeller. A função definida pelo usuário fetchData também é definida para que a solicitação HTTP para a API Realtime do WeatherAPI seja feita, e os dados sejam recebidos como um documento JSON.

A função definida pelo usuário parseData desserializa os dados JSON, extraindo a data, hora, localização, temperatura, umidade, velocidade do vento, precipitação e condições climáticas nas respectivas variáveis. A data, hora, local e informações meteorológicas são convertidas nos formatos adequados para exibição.

A função definida pelo usuário displayClock coloca a data, hora, localização e informações meteorológicas no SSD1306 OLED em um layout predefinido. É importante observar que o programa em fetchData é codificado para que o ESP8266 recupere os dados da API Realtime por meio de uma pesquisa de IP. O relógio detecta automaticamente a localização atual e recupera a data, hora, localização e informações meteorológicas em tempo real com base na localização.

Na função setup , a placa ESP8266 é conectada à rede WiFi, e o display OLED SSD1306 é inicializado. Na função loop , o fetchData é chamado para recuperar a data, hora, local e informações meteorológicas com base na pesquisa de IP. Isso é então exibido na tela OLED chamando a função displayClock .

Um atraso de cinco segundos é fornecido antes da atualização do relógio. Pode levar mais tempo para o relógio atualizar a data, a hora e outras informações, dependendo da conectividade da rede e do tempo de resposta do servidor WeatherAPI.

Resultados

Related Content

Back to blog

Leave a comment

Please note, comments need to be approved before they are published.