Este tutorial es parte de: Matriz de LED RGB ESP32-S3
Proyecto genial para crear aplicaciones prácticas y divertidas con el módulo de matriz RGB ESP32-S3. Encontrará enlaces a otros videos debajo de este artículo.
Proyecto de Reloj por Internet con Matriz LED RGB ESP32-S3 - Pantalla de Hora y Fecha multicolor de 2 Relojes
Reloj de Internet ESP32-S3 RGB NeoMatrix con visualización de hora y fecha
Este proyecto es un reloj de Internet con matriz RGB mejorado basado en el ESP32-S3 que no solo muestra la hora actual, sino que también muestra periódicamente la fecha. El ESP32-S3 se conecta a Wi-Fi, sincroniza la hora desde un servidor NTP y desplaza ya seaHH:MMo la fecha (por ejemploSEP 21) a través de una NeoMatrix RGB de 8×8. La pantalla admite control automático de brillo día/noche y colores RGB personalizables.

Lo que hace este reloj
Después de conectarse a su red Wi-Fi, el ESP32-S3 obtienen la hora local actual de Internet. El reloj normalmente desplaza la hora, pero a intervalos fijos cambia para mostrar la fecha. El color del texto se puede fijar a un color o ciclar automáticamente a través de múltiples colores definidos por el usuario. El brillo se reduce automáticamente por la noche para facilitar la lectura en la pantalla.
Bibliotecas utilizadas
Este boceto depende de las siguientes bibliotecas:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>InstalarAdafruit NeoMatrixdesde el Administrador de Bibliotecas de Arduino. Todas las dependencias requeridas comoAdafruit GFX LibraryyAdafruit NeoPixelse instalará automáticamente.

Configuración de usuario importante
SSID de Wi-Fi y contraseña (distinción entre mayúsculas y minúsculas)
Debes reemplazar las credenciales de Wi-Fi con la información de tu propia red:

const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";Importante:Las SSIDs de Wi-Fi sonsensible a mayúsculas y minúsculas. Por ejemplo, un SSID llamado"Book"estánolo mismo que"book"Si la capitalización no coincide exactamente, el ESP32 no podrá conectarse.
Servidor NTP, zona horaria y horario de verano
El reloj utiliza un servidor de tiempo por internet:
const char* ntpServer = "pool.ntp.org";La hora local se calcula utilizando estos desfases:
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;gmtOffset_secSu desfase horario UTC en segundos (ejemplo: UTC-5 =-5 * 3600)daylightOffset_secUsar3600para DST o0si no se utiliza el horario de verano
Estos ajustes se aplican utilizando:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);Control de brillo (día / noche)
Este proyecto ajusta automáticamente el brillo según la hora del día:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;Entre las 10 PM y las 6 AM, el brillo se reduce para hacer que la pantalla sea menos distractora en entornos oscuros. Puedes ajustar estos valores según tu preferencia.
Configuración de color RGB
El reloj admite tanto el modo de color fijo como el ciclo de color automático. Los colores RGB definidos por el usuario se almacenan en un arreglo:
uint8_t userColors[][3] = {
{17, 43, 171}, // Light Blue
{255, 0, 0}, // Red
{0, 255, 0}, // Green
{255, 165, 0}, // Orange
{255, 0, 255} // Magenta
};Cada color utiliza valores RGB (Rojo, Verde, Azul) que van de 0 a 255. Al cambiar estos números, puedes crear virtually cualquier color para la pantalla. SiuseFixedColorestá configurado paratrue, el reloj siempre utiliza un color. Si está configurado enfalseel color cambia automáticamente después de cada desplazamiento completo.
Para encontrar rápidamente valores RGB precisos para cualquier color que desees, utiliza la herramienta Selector de Color RGB:Selector de color RGB.
Formato de hora y fecha
El tiempo está formateado comoHH:MMy almacenado en un pequeño búfer de caracteres. La fecha está formateada como una cadena en mayúsculas comoSEP 21La pantalla cambia automáticamente entre la hora y la fecha a intervalos fijos.
Lógica de desplazamiento en una pantalla de 8×8
Debido a que una matriz de 8×8 es demasiado pequeña para mostrar el texto completo a la vez, el boceto desplaza el texto horizontalmente. Una vez que el texto sale completamente de la pantalla, se actualiza el color y el contenido cambia entre hora y fecha cuando es necesario.
Demostración
Después de subir el boceto:
- El ESP32 se conecta a Wi-Fi.
- El tiempo está sincronizado desde internet.
- El tiempo actual se desplaza a través de la matriz.
- La fecha aparece periódicamente
- El brillo se ajusta automáticamente para el día y la noche.
Descargas y enlaces
El código fuente completo se proporciona a continuación de este artículo. Los enlaces a las partes, herramientas y hojas de datos también están disponibles a continuación de este artículo.
Este tutorial es parte de: Matriz de LED RGB ESP32-S3
- Proyectos con Matriz LED RGB para ESP32-S3 (Juego de Inclinación, Texto, Flecha, Demostración WiFi)
- Proyecto 2 de matriz de LED RGB ESP32-S3 - Texto en desplazamiento
- Proyecto de matriz LED RGB ESP32-S3 3 - Texto desde teléfono móvil
- Proyecto de matriz de LED RGB ESP32-S3 4 - Punto inclinado
- Proyecto de Matriz LED RGB ESP32-S3 5 - Flecha siempre arriba
- Proyecto de Matriz LED RGB ESP32-S3 6 - Juego de Cible
- Proyecto de reloj básico con matriz LED RGB ESP32-S3 Wi-Fi + hora NTP -1
- Proyecto de Reloj de Internet con Matriz de LED RGB ESP32-S3 - 3 Colores Nocturnos con Fecha
- Proyecto de reloj de internet con matriz de LED RGB ESP32-S3 - 5 colores del arcoíris
- Proyecto de reloj en Internet con matriz de LED RGB ESP32-S3 - 4 colores aleatorios
- Prueba de matriz LED RGB ESP32-S3 para configuración RGB, GRB
/*
* =====================================================================================
* ESP32-S3 INTERNET RGB CLOCK (8x8 Matrix) - Project 2
Multi color
* =====================================================================================
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT839
* Author: Ahmad Shamshiri (Robojax.com)
* Date: 07 Jan 2026
* * FEATURES:
* 1. WiFi/NTP Time: Syncs automatically with internet time servers.
* 2. Cycle-Based Color: Color changes ONLY when text finishes a full scroll.
* 3. Auto-Brightness: Dims the LEDs during night hours (User-configurable).
* 4. Periodic Date: Scrolls the date (e.g., "JAN 07") every 2 minutes.
* * USER CONFIGURATION GUIDE:
* -------------------------
* - WiFi: Change 'WIFI_SSID' and 'WIFI_PASSWORD' to your local network.
* - Colors: Add or remove {R, G, B} sets in the 'userColors' array.
* - Night Mode: Adjust 'NIGHT_START_HOUR' and 'NIGHT_BRIGHTNESS'.
* =====================================================================================
*/
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define MATRIX_PIN 14
// --- BRIGHTNESS CONFIGURATION ---
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;
// --- COLOR CONFIGURATION ---
bool useFixedColor = false;
int fixedColorIndex = 0;
uint8_t userColors[][3] = {
{17, 43, 171}, // Light Blue
{255, 0, 0}, // Red
{0, 255, 0}, // Green
{255, 165, 0}, // Orange
{255, 0, 255} // Magenta
};
// 👇 REPLACE these with your real home WiFi name & password
const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
int currentColorIndex = 0;
int totalColors = sizeof(userColors) / sizeof(userColors[0]);
// --- DATE/TIME INTERVALS ---
unsigned long lastDateShowMs = 0;
const uint32_t dateIntervalMs = 30000; // 2 minutes
unsigned long lastTimeUpdateMs = 0;
const uint16_t timeUpdateIntervalMs = 1000;
unsigned long lastScrollMs = 0;
const uint16_t scrollIntervalMs = 100;
// --- GLOBAL VARIABLES ---
Adafruit_NeoMatrix matrix(8, 8, MATRIX_PIN,
NEO_MATRIX_TOP + NEO_MATRIX_LEFT +
NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
NEO_RGB + NEO_KHZ800);
char timeText[6] = "00:00";
char dateText[10] = "";
char currentDisplayText[12] = "";
int16_t scrollX = 8;
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
void updateTimeAndDate() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return;
snprintf(timeText, sizeof(timeText), "%02d:%02d", timeinfo.tm_hour, timeinfo.tm_min);
strftime(dateText, sizeof(dateText), "%b %d", &timeinfo);
for (int i = 0; dateText[i]; i++) dateText[i] = toupper(dateText[i]);
if (timeinfo.tm_hour >= NIGHT_START_HOUR || timeinfo.tm_hour < NIGHT_END_HOUR) {
matrix.setBrightness(NIGHT_BRIGHTNESS);
} else {
matrix.setBrightness(DAY_BRIGHTNESS);
}
}
void scrollDisplay() {
matrix.fillScreen(0);
// FIXED LOGIC: Uses currentColorIndex which only changes at the end of a scroll
int idx = useFixedColor ? fixedColorIndex : currentColorIndex;
matrix.setTextColor(matrix.Color(userColors[idx][0], userColors[idx][1], userColors[idx][2]));
matrix.setCursor(scrollX, 0);
matrix.print(currentDisplayText);
matrix.show();
scrollX--;
int16_t textWidth = strlen(currentDisplayText) * 6;
// THE TRIGGER POINT: This happens only when text is fully off-screen
if (scrollX < -textWidth) {
scrollX = matrix.width();
// 1. Cycle the color now and only now
if (!useFixedColor) {
currentColorIndex = (currentColorIndex + 1) % totalColors;
}
// 2. Decide whether to switch between Time and Date
if (millis() - lastDateShowMs > dateIntervalMs) {
strcpy(currentDisplayText, dateText);
lastDateShowMs = millis();
} else {
strcpy(currentDisplayText, timeText);
}
}
}
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
matrix.begin();
matrix.setTextWrap(false);
matrix.setBrightness(DAY_BRIGHTNESS);
updateTimeAndDate();
strcpy(currentDisplayText, timeText);
}
void loop() {
unsigned long now = millis();
if (now - lastTimeUpdateMs >= timeUpdateIntervalMs) {
lastTimeUpdateMs = now;
updateTimeAndDate();
}
if (now - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = now;
scrollDisplay();
}
}
Cosas que podrías necesitar
-
Amazonas
-
eBay
-
AliExpressCompra ESP32-S3 Matriz RGB en AliExpress (2)s.click.aliexpress.com
-
AliExpressCompra la matriz RGB ESP32-S3 en AliExpress.s.click.aliexpress.com
Recursos y referencias
-
Vídeo
Archivos📁
Archivo de Fritzing
-
parte fritzing esp32-S3-supermini-tht
esp32-S3-supermini-tht.fzpz0.02 MB