Proyecto de Reloj Básico con Matriz LED RGB ESP32-S3 Wi-Fi + Reloj NTP

Proyecto de Reloj Básico con Matriz LED RGB ESP32-S3 Wi-Fi + Reloj NTP

Reloj de Internet ESP32-S3 con NeoMatrix 8×8 (Wi-Fi + Hora NTP)

Este proyecto convierte un ESP32-S3 y una matriz RGB NeoMatrix de 8×8 (NeoPixel/WS2812) en un pequeño reloj de Internet. El ESP32 se conecta a Wi-Fi, sincroniza la hora local desde un servidor NTP y luego despliega la hora comoHH:MMa través de la pantalla de 8×8.

ESP32-s3_animación_reloj_internet

Cómo funciona (a alto nivel)

1) ESP32-S3 se conecta a tu enrutador utilizando<WiFi.h>.
2) Sincroniza la hora desde un servidor NTP usando"time.h"yconfigTime().
3) La hora está formateada comoHH:MMy guardado en un pequeño búfer de texto.
4) El NeoMatrix muestra el texto y lo desplaza a través del panel de 8×8.

Color RGB

El color del texto del reloj se controla utilizando valores RGB (Rojo, Verde, Azul), donde cada canal de color varía de 0 a 255 y diferentes combinaciones crean diferentes colores en el NeoMatrix. Al ajustar elcolor_RED,color_GREEN, andcolor_BLUEvariables, puedes personalizar fácilmente la apariencia del reloj a cualquier color que desees. Para encontrar rápidamente los valores RGB exactos de un color específico, puedes usar la herramienta en línea RGB Color Picker aquí:Selector de color RGB.

Bibliotecas utilizadas

Estos incluyen te dicen exactamente de qué depende el boceto:

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

InstalarAdafruit NeoMatrixusando el Administrador de Bibliotecas de Arduino. También descargará las dependencias requeridas comoAdafruit GFX LibraryyAdafruit NeoPixel.

Configuraciones de usuario importantes que DEBES editar

1) Color de texto (RGB)

Establece el color del texto del reloj utilizando 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;

Estos valores se utilizan aquí:

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

Nota:Si estableces todos los colores en 0 (negro), el texto se vuelve invisible. El boceto incluye una verificación de seguridad:

// 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;
}

Esto asegura que la matriz nunca parezca "muerta" debido a una configuración de color invisible.

2) SSID de Wi-Fi y contraseña

Reemplaza esto con el nombre y la contraseña reales de tu Wi-Fi:

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

Durante el inicio, el ESP32 imprime el progreso de la conexión en el Monitor Serial y espera un tiempo de espera de aproximadamente 15 segundos (30 intentos × 500 ms).

Servidor NTP

El servidor NTP por defecto es:

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

Puedes mantenerlo tal como está. Si alguna vez deseas usar un servidor local, reemplaza el nombre del host con tu servidor NTP preferido.

4) Desviación horaria y ajuste por horario de verano

Estas dos configuraciones controlan la 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

Cómo configurarlos:

  • gmtOffset_sec= (horas de desplazamiento UTC) × 3600. Ejemplo: UTC-5 →-5*3600, UTC+2 →2*3600.
  • daylightOffset_sec=0si no deseas el ajuste de horario de verano, o3600si su región está observando actualmente el horario de verano (+1 hora).

Se aplican aquí:

configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

Configuración de pantalla

Datos de pin de matriz

El pin de datos se define aquí:

#define MATRIX_PIN 14

Si tu cableado utiliza un GPIO diferente, cambia este número para que coincida.

Orden de diseño y color de NeoMatrix

Tu matriz se inicializa así:

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

Dos razones comunes por las que la pantalla se ve "incorrecta":

  • Dirección de rotación / cableado:Si el texto aparece al revés o reflejado, ajusta elNEO_MATRIX_*banderas (ARRIBA/ABAJO, IZQUIERDA/DERECHA, FILAS/COLUMNAS, PROGRESIVO/ZIGZAG).
  • Orden de colores:Este código utilizaNEO_RGB. Algunos paneles sonNEO_GRB. Si el rojo/verde/azul no coinciden, cambiaNEO_RGBal orden correcto.

Brillo

El brillo está configurado eninitMatrix():

matrix.setBrightness(40);

Aumenta para una pantalla más brillante, reduce para disminuir el calor y el consumo de energía.

Cómo se genera el tiempo comoHH:MM

El reloj almacena la hora formateada en un búfer de 6 caracteres:

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

LuegoupdateTimeText()lee la hora local sincronizada con NTP y escribe el texto:

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

Esto se actualiza una vez por segundo en el bucle principal.

Cómo funciona el desplazamiento en una pantalla de 8×8

Una matriz de 8×8 es demasiado estrecha para mostrar.HH:MMde inmediato, así que el boceto desplaza el texto. Dibuja el tiempo en una posición X cambiante (scrollX), luego lo mueve hacia la izquierda un píxel en cada actualización.

int16_t scrollX = 8;
const uint16_t scrollIntervalMs = 120;

Cada paso de desplazamiento:

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

Cuando el texto sale completamente del lado izquierdo, el código lo restablece para comenzar de nuevo desde el borde derecho:

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

Salida del Monitor Serial (depuración)

Este boceto imprime mensajes útiles:

  • Progreso de conexión Wi-Fi y dirección IP
  • Si la sincronización de tiempo tuvo éxito
  • La cadena de tiempo formateada (por ejemplo,Time text: 14:32)

Si la pantalla está en blanco, el Monitor Serial es el primer lugar para verificar si Wi-Fi y NTP están funcionando.

Demostración del proyecto

Después de cargar y restablecer:

  • ESP32 se conecta a Wi-Fi
  • Sincroniza la hora depool.ntp.org
  • EspectáculosOKbrevemente sobre la matriz
  • Desplaza continuamente la hora actual comoHH:MM

Descargas y enlaces

El código completo se proporciona a continuación de este artículo. Las piezas, herramientas y hojas de datos también están vinculadas a continuación de este artículo.

Imágenes

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!

Cosas que podrías necesitar

Recursos y referencias

Archivos📁

Archivo de Fritzing