Relógio com ESP32 e OLED conectado com servidor NTP - MakerHero
relógio com ESP32 e OLED

Relógio com ESP32 e OLED conectado com servidor NTP 10

Neste post será mostrado como criar um relógio que atualiza as horas automaticamente pela internet (se conectando a um servidor de horários NTP) utilizando apenas o Módulo WiFi ESP32 Bluetooth com Display OLED. O horário será apresentado diretamente no display OLED integrado à placa. Para descarregar o código, será utilizada a IDE do Arduino. No final você terá um projeto de relógio com ESP32 e OLED.

O display OLED embutido na placa opera com o barramento de comunicação I2C, que utiliza as portas SDA (conectado ao pino digital 5 e responsável pelo clock) e SCL (conectado ao pino digital 4 e responsável pela transmissão dos dados). Além disso, todo dispositivo I2C possui um endereço, sendo o endereço padrão do display 0x3C.

Configurando o suporte para a ESP32 na IDE do Arduino

Para descarregar o seu código na ESP32 utilizando a IDE do Arduino, você precisará instalar a biblioteca da placa na sua IDE.

Para isso, você deve acessar o menu Arquivo > Preferências.

Preferências IDE Arduino

Adicione a seguinte url no campo URLs Adicionais para Gerenciadores de Placas, como mostrado na foto abaixo:

https://dl.espressif.com/dl/package_esp32_index.json

Configuração IDE Arduino para ESP32

Em seguida, acesse o menu Ferramentas > Placas > Gerenciador de Placas e instale o pacote “esp32 by Espressif Systems”.

Instalação da placa ESP32 na IDE Arduino

Para descarregar o código para a versão da ESP32 com o display OLED, devem ser utilizados os seguinte parâmetros (presentes no menu Ferramentas):

  • Placa: WEMOS LOLIN 32
  • Upload Speed: 921600
  • Flash Frequency: 80MHz
  • Partition Scheme: “Padrão”

Não esqueça de selecionar a porta em que a sua placa está conectada.

Informações Adicionais de Configuração

Erro de compilação

Caso você receba alguma mensagem de erro (como a apresentada acima) ao descarregar algum código para a sua ESP32, talvez você não possua a biblioteca pyserial do Python instalada.

Para isso, você deverá instalar alguma versão do Python em sua máquina (caso ainda não tenha instalado) e utilizar o gerenciador de pacotes pip para instalar a biblioteca pyserial no seu computador.

Instalar Bibliotecas do Servidor NTP e do Display

Antes de executar o código do relógio na sua ESP32, será necessário instalar as bibliotecas NTPClient e SSD1306Wire na sua IDE do Arduino. Para isso, acesse o menu Ferramentas > Gerenciar Bibliotecas… e instale as seguintes bibliotecas:

  • ESP8266 and ESP32 Oled Driver for SSD1306 display by Daniel Eichhorn, Fabrice Weinberg
  • NTPClient by Fabrice Weinberg

Instalação da biblioteca para display OLED Instalação da biblioteca para HTTP

Código-Fonte do relógio com ESP32 e OLED

O código abaixo irá conectar a sua placa em uma rede Wi-Fi, atualizar as informações de horário do servidor NTP e imprimir essas informações no display embutido.

A conexão com o servidor NTP ocorre através do protocolo UDP: é feita uma requisição ao servidor, que retorna a informação do horário em Posix Time, um formato de tempo adotado em sistemas computacionais. A biblioteca NPTClient, então, faz a conversão da informação para o formato tradicional de hora.

O serviço de impressão do display funciona de forma semelhante a uma lista: você irá adicionar na lista itens a serem impressos (como textos, linhas e polígonos) e, quando o comando display.display( ) for chamado, esses itens serão impressos. Para limpar a lista, utilize o comando display.clear( ). Outros comandos referentes ao display podem ser encontrados na documentação da biblioteca.

Antes de descarregar o código, lembre-se de alterar o nome e a senha da rede Wi-Fi que você deseja se conectar.

Após descarregar o código, você deve ter um resultado como o do GIF abaixo:

relógio com ESP32 e OLED

Gostou do relógio com ESP32 e OLED? Ajude-nos a melhorar o blog comentando abaixo sobre este tutorial.

Faça seu comentário

Acesse sua conta e participe

10 Comments

  1. Olá.

    Onde consigo o PINOUT completo dessa placa com display, por favor?

    1. Olá Igor,

      Você encontra o pinout aqui: https://ae01.alicdn.com/kf/HTB1O.bgX_HuK1RkSndVq6xVwpXa9.jpg

      Abraços!
      Vinícius – Equipe MakerHero

  2. Olá! Parabéns pelo trabalho. Só uma dúvida. Aonde eu consigo a biblioteca wifiudp.h?

  3. Excelente!

    Existe algum meio de passar os dados da rede (ssid e password) por uma função?

    Assim, quando estiver em uma rede diferente bastaria informar via HMI (display touch por exemplo).

    Obrigado!

    1. Edelson

      Você teria que retirar a propriedade “const” dessas variáveis no código. Depois, criar um método em que espera o usuário digitar os dados. Os dados digitados vão ser então armazenados nas variáveis ssid e password novamente.

      Abraços!
      Diogo – Equipe MakerHero

  4. Italo, bastante simples e interessante. Pergunto: tem alguma função para separar a hora, minuto, mes, ano etc ?
    Obrigado. O código ajudou muito.

    1. Olá, Ivan

      A biblioteca tem alguns métodos para conseguir alguns valores:

      getDay //adquire os dias
      getHours //adquire as horas
      getMinutes //adquire os minutos
      getSeconds //adquire os segundos

      Abraços!
      Diogo – Equipe MakerHero

  5. Fantastico.
    It works at firts test.
    I onli changed the fuso.
    Now I want to make that changes the fuso ever spring and autumn.

    1. Olá,

      É muito bom saber que você gostou do nosso trabalho!

      Abraço!
      Rosana – Equipe MakerHero