Projeto de Relógio Básico com Matriz de LED RGB ESP32-S3 Wi-Fi + NTP

Projeto de Relógio Básico com Matriz de LED RGB ESP32-S3 Wi-Fi + NTP

Relógio de Internet ESP32-S3 com NeoMatrix 8×8 (Wi-Fi + Hora NTP)

Este projeto transforma um ESP32-S3 e uma matriz RGB NeoMatrix 8×8 (NeoPixel/WS2812) em um pequeno relógio da Internet. O ESP32 conecta-se ao Wi-Fi, sincroniza a hora local a partir de um servidor NTP e, em seguida, rola o tempo comoHH:MMatravés do display 8×8.

ESP32-s3_animação_de_relogio_internet

Como funciona (em alto nível)

1) ESP32-S3 conecta-se ao seu roteador usando<WiFi.h>.
2) Ele sincroniza o tempo a partir de um servidor NTP usando"time.h"econfigTime().
3) A hora está formatada comoHH:MMe salvo em um pequeno buffer de texto.
4) O NeoMatrix renderiza o texto e o rola pelo painel 8×8.

Cor RGB

A cor do texto do relógio é controlada usando valores RGB (Vermelho, Verde, Azul), onde cada canal de cor varia de 0 a 255 e combinações diferentes criam cores diferentes na NeoMatrix. Ajustando ocolor_RED,color_GREEN, ecolor_BLUEvariáveis, você pode personalizar facilmente a aparência do relógio para qualquer cor que desejar. Para encontrar rapidamente os valores RGB exatos para uma cor específica, você pode usar a ferramenta de Selecionador de Cores RGB online aqui:Seletor de Cores RGB.

Bibliotecas utilizadas

Isto inclui dizer exatamente do que o esboço depende:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>

InstalarAdafruit NeoMatrixusando o Gerenciador de Bibliotecas do Arduino. Ele também irá puxar as dependências necessárias, comoAdafruit GFX LibraryeAdafruit NeoPixel.

Configurações importantes do usuário que você DEVE editar

1) Cor do texto (RGB)

Defina a cor do texto do seu relógio usando valores de 0 a 255:

//set the color of display made of Red, Green and Blue 
unsigned int color_RED = 17;
unsigned int color_GREEN = 43;
unsigned int color_BLUE = 171;

Estes valores são utilizados aqui:

matrix.setTextColor(matrix.Color(color_RED, color_GREEN, color_BLUE));

Nota:Se você definir todas as cores como 0 (preto), o texto se torna invisível. O esboço inclui uma verificação de segurança:

// if user set all colors to 0, the display will be turned off so set it green
if (color_RED == 0 && color_GREEN == 0 && color_BLUE == 0) {
  color_GREEN = 200;
}

Isso garante que a matriz nunca fique "morta" devido a uma configuração de cor invisível.

2) SSID e senha do Wi-Fi

Substitua isso pelo seu verdadeiro nome e senha do Wi-Fi:

const char* WIFI_SSID     = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";

Durante a inicialização, o ESP32 imprime o progresso da conexão no Monitor Serial e expira após cerca de 15 segundos (30 tentativas × 500ms).

3) Servidor NTP

O servidor NTP padrão é:

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

Você pode mantê-lo como está. Se você quiser usar um servidor local, substitua o nome do host pelo seu servidor NTP preferido.

4) Deslocamento de fuso horário e deslocamento do horário de verão

Essas duas configurações controlam a hora local:

// Toronto-ish: UTC-5, plus 1 hour DST
const long  gmtOffset_sec      = -5 * 3600;  // -5 hours
const int   daylightOffset_sec = 3600;       // +1 hour for DST

Como configurá-los:

  • gmtOffset_sec= (horas de deslocamento UTC) × 3600. Exemplo: UTC-5 →-5*3600, UTC+2 →2*3600.
  • daylightOffset_sec=0se você não quiser o ajuste de Horário de Verão, ou3600se a sua região está atualmente observando o horário de verão (+1 hora).

Estes são aplicados aqui:

configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

Configuração de exibição

Dados de pino da matriz

O pino de dados está definido aqui:

#define MATRIX_PIN 14

Se sua fiação usar um GPIO diferente, altere este número para corresponder.

Layout e ordem de cores do NeoMatrix

Sua matriz é inicializada assim:

Adafruit_NeoMatrix matrix(8, 8, MATRIX_PIN,
  NEO_MATRIX_TOP    + NEO_MATRIX_LEFT +
  NEO_MATRIX_ROWS   + NEO_MATRIX_PROGRESSIVE,
  NEO_RGB           + NEO_KHZ800);

Duas razões comuns pelas quais a tela parece "errada":

  • Direção de rotação / fiação:Se o texto aparecer de cabeça para baixo ou espelhado, ajuste oNEO_MATRIX_*bandeiras (CIMA/BAIXO, ESQUERDA/DIREITA, LINHAS/COLUNAS, PROGRESSIVO/ZIGZAG).
  • Ordem das cores:Este código utilizaNEO_RGB. Alguns painéis sãoNEO_GRB. Se vermelho/verde/azul não corresponderem, mudeNEO_RGBpara a ordem correta.

Brilho

A luminosidade está definida eminitMatrix():

matrix.setBrightness(40);

Aumente para um display mais brilhante, reduza para diminuir o calor e o consumo de energia.

Como o tempo é gerado comoHH:MM

O relógio armazena o tempo formatado em um buffer de 6 caracteres:

char timeText[6] = "00:00";

EntãoupdateTimeText()lê a hora local sincronizada com NTP e escreve o texto:

// Format HH:MM
snprintf(timeText, sizeof(timeText), "%02d:%02d",
         timeinfo.tm_hour,
         timeinfo.tm_min);

Isso é atualizado uma vez por segundo no loop principal.

Como a rolagem funciona em um display 8×8

Uma matriz 8×8 é muito estreita para ser exibida.HH:MMde uma só vez, então o esboço rola o texto. Ele desenha o tempo em uma posição X variávelscrollX), em seguida, move-o para a esquerda um pixel a cada atualização.

int16_t scrollX = 8;
const uint16_t scrollIntervalMs = 120;

Cada passo de rolagem:

matrix.fillScreen(0);
matrix.setCursor(scrollX, 0);
matrix.print(timeText);
matrix.show();
scrollX--;

Quando o texto sai completamente do lado esquerdo, o código o reinicializa para começar novamente a partir da borda direita:

int16_t textWidth = 30;
if (scrollX < -textWidth) {
  scrollX = matrix.width();
}

Saída do Monitor Serial (depuração)

Este esboço imprime mensagens úteis:

  • Progresso da conexão Wi-Fi e endereço IP
  • Se a sincronização de tempo foi bem-sucedida
  • A string de tempo formatada (por exemplo,Time text: 14:32)

Se o display estiver em branco, o Monitor Serial é o primeiro lugar a verificar para confirmar se o Wi-Fi e o NTP estão funcionando.

Demonstração do projeto

Após o upload e reinicialização:

  • ESP32 conecta-se ao Wi-Fi
  • Sincroniza o tempo depool.ntp.org
  • ShowsOKbrevemente sobre a matriz
  • Rola continuamente o horário atual comoHH:MM

Downloads e links

O código completo está disponível abaixo deste artigo. Peças, ferramentas e folhas de dados também estão vinculadas abaixo deste artigo.

Imagens

ESP32 S3 Matrix
ESP32 S3 Matrix
ESP32 S3 Matrix  pin out
ESP32 S3 Matrix pin out
ESP32-S3_RGB_8x8_matrix-3
ESP32-S3_RGB_8x8_matrix-3
ESP32-S3_RGB_8x8_matrix1
ESP32-S3_RGB_8x8_matrix1
ESP32-S3_RGB_8x8_matrix-2
ESP32-S3_RGB_8x8_matrix-2
ESP32-s3_internet_clock_animation
ESP32-s3_internet_clock_animation
868-ESP32-S3 RGB LED Matrix Internte Clock Project 1 - Basic Clock
Idioma: C++
Copiado!

Coisas que você pode precisar

Recursos e referências

Arquivos📁

Arquivo Fritzing