O ESP32 Projeto Relógio OLED é um dispositivo que utiliza o Protocolo de Rede NTP para sincronização de dados e obtenção de informações de tempo, como por exemplo, o horário que utilizaremos para o nosso relógio.
Normalmente em projetos com Arduino utilizamos o tradicional Módulo RTC (Relógio de Tempo Real) que nos possibilita um controle preciso do horário, porém com a possibilidade de termos um acesso à internet, dispensamos a utilização deste módulo.
Esta talvez seja uma grande vantagem deste protocolo, porém como o Módulo RTC precisa sempre de sua bateria para a manutenção dos dados em eventuais desligamentos, o ESP32 Projeto Relógio OLED também torna-se dependente da rede de internet para isto.
No projeto iremos descobrir como acessar os dados do Servidor NTP usando o ESP32 através da IDE Arduino, assim como realizar a conexão de um Display OLED junto ao mesmo para a impressão dos dados obtidos.
O que é NTP?
A sigla NTP vem do inglês Network Time Protocol e é traduzido de forma literal como Protocolo de Tempo para Rede, um protocolo padrão para a sincronização dos computadores em um mesmo horário com os dados obtidos de um IP externo.
O protocolo NTP pode ser utilizado na sincronização de dispositivos em rede junto ao UTC (Tempo Universal Coordenado) dentro de alguns milissegundos. Por ser um padrão de tempo mundial, intimamente relacionado ao GMT (Horário Médio de Greenwich), o UTC não varia, é o mesmo em todo o mundo, o que muda é o fuso, veja:
O NTP define os relógios para UTC e qualquer deslocamento no fuso horário local ou deslocamento terrestre com sincronização de sinal faz com que as informações sejam atualizadas, independentemente das diferenças de localização e fuso horário.
Como funciona a Arquitetura NTP?
O Protocolo NTP usa uma arquitetura hierárquica que pode ser constituída por até 16 níveis, sendo que cada nível é mundialmente conhecido como estrato. No topo desta constituição hierárquica estão os dispositivos de estrato 0, os famosos relógios atômicos, responsáveis pela perfeita sincronização do tempo, uma espécie de relógio de hardware.
Após feita a obtenção dos dados pelos relógios de hardware do estrato 0 temos os servidores do estrato 1, responsáveis pelo recebimento e organização dos dados, consequentemente são os dispositivos com maior precisão de tempo.
Cada estrato na hierarquia é sincronizado com o estrato acime e atua como servidor para estratos inferiores, por exemplo, o nosso ESP32 é um estrato inferior da rede UDP (Protocolo de Datagrama do Usuário), possuindo um estrato semelhante ao do computador que utilizamos.
Display OLED 128×64 – I2C
O Display OLED é a melhor opção para quem deseja incluir ao projeto um dispositivo com alta eficiência e resolução gráfica, um dispositivo como este garante ao ESP32 Projeto Relógio OLED a devida profissionalidade que procuramos.
Seu pequeno, mas eficiente painel monocromático disponibiliza um total de 128 pixels de largura e 64 pixels de altura, medindo 0,96” (polegadas) de diâmetro proporciona uma tela legível com alto contraste e ajuste preciso e de qualidade.
Como cada pixel ilumina-se individualmente, não é necessária uma luz de fundo, o que reduz significativamente a energia necessária para executar o OLED, garantindo um ângulo de visão extremamente alto e amplo com níveis profundos de preto.
Por que utilizar o Display OLED com o ESP32?
Um dos fatores que destaca a utilização em especial deste display com o ESP32 é a sua tensão de comunicação que é de 1,65 a 3,3V, afinal de contas o ESP32 possui uma linguagem de comunicação também de 3,3V.
Existe modelos de Display OLED diferentes?
Sim, além deste modelo de display OLED que possui 4 pinos, dentre eles dois de comunicação I2C e dois para alimentação, existe um modelo de Display SPI que conta com 6 pinos, quatro pinos para a comunicação SPI e dois para alimentação.
O que foi Utilizado no ESP32 Projeto Relógio OLED?
NodeMCU ESP32 Iot com WiFi e Bluetooth – 38 Pinos;
Cabo Micro USB 1,2m para Nodemcu ESP32;
Display OLED 0.96″ I2C 128×64;
Protoboard 400 Pontos para Montagem de Projetos;
4 Jumper para Protoboard Macho-Macho 10cm.
Esquema de Ligação do ESP32 Projeto Relógio OLED
O esquema de ligação do ESP32 Projeto Relógio OLED é extremamente simples uma vez que utiliza apenas dois pinos para a comunicação I2C e dois pinos para sua alimentação, para melhor compreensão segue abaixo uma tabela com o diagrama de pinos.
Além disto, disponibilizamos também o esquema de ligação completo com todos os componentes utilizados, veja:
Como vemos, não existe segredo no esquema de ligação do produto e como estamos utilizando o protocolo NTP para capturar os dados de horário, dispensamos a necessidade de um módulo RTC e assim simplificamos nosso projeto.
Código de Funcionamento do ESP32 Projeto Relógio OLED
Antes de darmos continuidade ao nosso ESP32 Projeto Relógio OLED precisamos nos certificar que a nossa IDE Arduino esteja pronto para a utilização deste dispositivo, caso você já o tenha utilizado antes, este procedimento não precisa ser realizado, porém caso esteja utilizando o ESP32 pela primeira vez em seu computador, veja:
Com o seu Arduino IDE pronto para programar o ESP32, vamos copiar o seguinte código e fazer algumas alterações antes de carrega-lo em nosso microcontrolador. Após o código estão especificadas as alterações necessárias.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#include <NTPClient.h> #include <WiFi.h> #include <Adafruit_SSD1306.h> const char* ssid = "NOME_DA_REDE"; // Nome da rede Wi-Fi const char* password = "SENHA_DA_REDE"; // Senha da rede Wi-Fi #define OLED_LARGURA 128 // Número de Pixels do display OLED (Largura) #define OLED_ALTURA 64 // Número de Pixels do display OLED (Altura) #define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(OLED_LARGURA, OLED_ALTURA, &Wire, OLED_RESET); WiFiUDP udp; NTPClient ntp(udp, "a.st1.ntp.br", -3 * 3600, 60000); String hora; void setup() { WiFi.begin(ssid, password); delay(2000); ntp.begin(); ntp.forceUpdate(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); } void loop() { hora = ntp.getFormattedTime(); display.setTextSize(2); // Tamanho da fonte display.setTextColor(WHITE); // Cor da fonte display.setCursor(10,8); // Local de início do texto display.println(hora); // Variável a ser imprimida display.display(); delay(1000); display.clearDisplay(); // Limpa p display } |
Como mencionado anteriormente, antes de iniciarmos o upload do código é necessário fazermos algumas alterações que ele funcione normalmente, dentre elas temos:
– O nome da rede e a senha postos no código estão entre as aspas e precisam ser alterados de acordo com a rede Wi-Fi que irá utilizar para se conectar, então deve trocar NOME_DA_REDE pelo nome da sua rede e SENHA_DA_REDE pela senha da mesma, abaixo as duas linhas que precisa alterar:
1 2 |
const char* ssid = "NOME_DA_REDE"; // Nome da rede Wi-Fi const char* password = "SENHA_DA_REDE"; // Senha da rede Wi-Fi |
– O fuso horário das regiões do brasil podem se alterar assim como na tabela demonstrada acima, para isto verifique e altere se necessário, na região em que me encontro o fuso é -3, mas se for do estado de Roraima, por exemplo, deve alterar por -4, veja a linha em questão:
1 |
NTPClient ntp(udp, "a.st1.ntp.br", -3 * 3600, 60000); |
Outros servidores NTP assim como um relógio conectado diretamente a um estrato 0 você encontra na página oficial da NTP.br, para isto CLIQUE AQUI.
Após alteradas as informações da rede Wi-Fi e verificado o fuso se de acordo com a sua região, pode-se fazer o upload normalmente.
Se tudo tiver dado certo, o seu ESP32 em instantes se conectará com a sua rede de internet Wi-Fi e já estará pronto para exibir o horário exato do local ao qual foi programado. Caso o horário não apareça, é porque o seu ESP não conseguiu se conectar com a internet então veja o seu usuário e senha de rede se está correto.
Caso o seu dispositivo carregue e o horário exibido não esteja correto, é possível que o seu microcontrolador tenha se conectado com a Internet, mas esta esteja sem sinal, ou seja, o dispositivo precisa se conectar com a internet e ela precisa estar funcionando normalmente.
Conclusão
O protocolo de comunicação NTP é bastante útil para quem deseja desenvolver projeto com o ESP32 e precisam do acesso ao horário para alguma coisa, como por exemplo, para quem deseja programar um relé para armar-se em algum horário específico ou até mesmo para quem deseja fazer um sistema de cadastramento de dados com referência no tempo.
Este método torna-se extremamente prático e funcional uma vez que elimina a necessidade de um módulo RTC e também simplifica o seu projeto, neste caso do ESP32 Projeto Relógio OLED, podemos incrementar adicionando um Buzzer e fazermos um despertador, por exemplo.
Diversas possibilidades podem ser exploradas em conjunto com este protocolo de comunicação, até o desenvolvimento de um relógio internacional que exibe o fuso de diversos lugares do mundo, basta escolher a biblioteca certa para isto.
Se você gostou, tem alguma sugestão ou dúvida, não esqueça de deixar o seu comentário logo a baixo, espero que tenham gostado.
Olá, boa tarde.
Seria possível utilizar um display de 128×64 ST 7920?
Bom Dia Fabio! Já que o display que citou possui tensões de trabalho tanto de 3,3V quanto de 5V, acredito que seja possível a inclusão dele sem problema, porém vale verificar as alterações necessárias no esquema de ligação e também no código.
Olá, pode ser feito sim, inclusive muitos sistemas utilizam essa forma de funcionamento, porem esses sistemas atualizam o horário a cada x tempo, em vez de atualizar a cada queda de energia.
Espero que possa ajudar!
Obrigado pela ajuda mano!
Olá fábio, se eu definir o IP Estático, funciona? Aqui não funcionou.
Olá Marcel! Este projeto já está definido para funcionar junto de sistemas de IP estático.