No tutorial anterior, criamos um relógio RTC usando DS3231 e ESP32. Para minimizar os requisitos de hardware, faremos um relógio para Internet sem usar o módulo RTC. Isso é mais preciso em comparação com o relógio RTC. O ESP32 é um módulo Wi-Fi e pode ser facilmente conectado à internet, então usaremos NTP (Network Time Protocol) e UDP (User Datagram Protocol) para buscar o tempo da internet usando Wi-Fi. Este relógio da Internet pode ser muito útil durante a construção de Projetos IoT.
O que é NTP ??
Network Time Protocol (NTP) é um protocolo de rede usado para sincronização de tempo entre sistemas e redes de dados. A estrutura do NTP depende dos servidores de horário da Internet. O NTP possui algoritmos para ajustar com precisão a hora do dia. Os servidores NTP possuem software que envia a hora do dia do relógio para computadores clientes usando UDPport 123. Então, aqui neste projeto, estamos obtendo o tempo do servidor NTP usando ESP32 e exibindo-o no display OLED.
Materiais requisitados:
- ESP32
- Tela OLED de 128 * 64
- Tábua de pão
- Fios macho-fêmea
Diagrama de circuito:
Aqui, estamos usando o modo SPI para conectar nosso Módulo de display OLED de 128 × 64 (SSD1306) ao ESP32. Portanto, ele usará 7 pinos. As conexões com ESP32 são fornecidas como:
- Pino CS (seleção de chip) de OLED -> PIN D5 de ESP32
- Pino DC do OLED -> PIN D4 do ESP32
- PIN RES de OLED -> PIN D2 de ESP32
- PIN SDA do OLED -> PIN D23, ou seja, MOSI do ESP32
- Pino SCK do OLED -> PIN D18 ou seja, SCK do ESP32
- Vdd de OLED -> Vcc de ESP32
- GND de OLED -> GND de ESP32
Você precisa de arquivos de placa para o ESP32. Menu suspenso do gerenciador de placa de check-in do Arduino IDE para kit de desenvolvimento ESP32. Caso não esteja, siga os passos indicados no link abaixo:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Você também pode usar ESP12 para este projeto, aprenda aqui como usar ESP12.
Usaremos o Arduino IDE para escrever nosso programa conforme explicado no artigo acima.
Explicação do código:
O código completo do ESP32 Internet Clock é fornecido no final do artigo. Aqui estamos explicando algumas partes importantes do código.
Precisamos de várias bibliotecas para usar em nosso código, que podem ser baixadas nos links abaixo:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5.WiFiUdp:
Portanto, incluímos todas as bibliotecas e variáveis definidas para inserir o nome e a senha do Wi-Fi.
#incluir
Aqui, a biblioteca NTPClient.h é usada para se conectar ao servidor de horário. Demora um servidor NTP para mantê-lo sincronizado. E a biblioteca Hhre WiFiUdp.h é usada para enviar e receber mensagens UDP. UDP é um protocolo que envia e recebe mensagens curtas do nosso sistema para o servidor NTP.
Portanto, para obter o tempo da Internet, temos que definir três variáveis em nosso programa para NTP.
NTP_OFFSET que é o fuso horário do seu país, ou seja, para a Índia, é +5: 30 horas. Portanto, é 19800 em segundos.
NTP_INTERVAL que é o intervalo de tempo levado pelo NTP para atualizar o tempo. É 60-64 segundos.
NTP_ADDRESS é o servidor NTP do seu país. Para a Índia, você pode usar “ in.pool.ntp.org ”.
#define NTP_OFFSET 19800 // Em segundos #define NTP_INTERVAL 60 * 1000 // Em milissegundos #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
Na função de configuração , inicialize as configurações de Wi-Fi para se conectar à internet.
void setup () { display.begin (); Serial.begin (9600); Serial.println (); Serial.println (); Serial.print ("Conectando a"); Serial.println (ssid); WiFi.begin (ssid, senha); enquanto (WiFi.status ()! = WL_CONNECTED) { delay (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi conectado."); Serial.println ("endereço IP:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
Em seguida, inicialize as funções de exibição para mostrar a hora no OLED.
display.begin (SSD1306_SWITCHCAPVCC);
Na função de loop, usamos timeClient.update (), esta função pega o tempo atualizado do NTP na forma de string e o armazena na variável formattedTime . Em seguida, exiba-o no OLED usando a função display.println () .
void loop () { timeClient.update (); String formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // defina esses parâmetros de acordo com sua necessidade.. display.setCursor (0, 0); display.println (formattedTime);
O programa completo é fornecido abaixo. Agora, finalmente, programe o ESP32 com o Arduino IDE e seu relógio da Internet estará pronto para mostrar a hora.