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 de Internet con Matriz de LED RGB ESP32-S3 - 3 Colores Nocturnos con Fecha
Reloj de Internet ESP32-S3 RGB NeoMatrix con brillo automático de día/noche
Este proyecto es un reloj de Internet con matriz RGB ESP32-S3 que ajusta automáticamente el brillo durante el día y la noche. El ESP32-S3 se conecta a Wi-Fi, sincroniza la hora actual desde un servidor NTP y desplaza la hora enHH:MMformato a través de una NeoMatrix RGB de 8×8. El reloj también admite colores RGB fijos o en ciclo para el texto de la pantalla.

Lo que hace este reloj
Después de encenderse, el ESP32-S3 se conecta a su red Wi-Fi y recupera la hora local actual de Internet. La hora se desplaza suavemente a través de la matriz de LED. Durante las horas nocturnas, la pantalla se atenuará automáticamente a un nivel de brillo más bajo, mientras que durante el día vuelve a un nivel más brillante.
Bibliotecas utilizadas
Este boceto utiliza 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 y contraseña de Wi-Fi (distingue entre mayúsculas y minúsculas)
Reemplace los siguientes valores con sus propias credenciales de Wi-Fi:

const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";Importante:Las SSID de Wi-Fi sonsensible a mayúsculas y minúsculasUn SSID llamado"Book"esnolo 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 sincroniza la hora utilizando el siguiente servidor NTP:
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_secdefine tu diferencia horaria UTC en segundosdaylightOffset_secagrega una hora cuando el horario de verano está activo (usar0si no es necesario)
Estos valores se aplican con:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);Brillo automático de día/noche
El brillo de la pantalla cambia automáticamente según la hora actual:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22; // 10 PM
const int NIGHT_END_HOUR = 6; // 6 AMEntre las 10 PM y las 6 AM, el brillo de la matriz se reduce para hacerlo cómodo en entornos oscuros. Fuera de esas horas, se restaura el brillo completo del día. Puedes ajustar estos valores para adaptarlos a la iluminación de tu habitación.
Configuración de color RGB
El color del texto del reloj se define utilizando valores RGB (Rojo, Verde, Azul), donde cada canal varía de 0 a 255. Se pueden almacenar múltiples colores en un arreglo y ciclar automáticamente.
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
};SiuseFixedColorestá programado paratrue, el reloj siempre utiliza un color. Si se ajusta afalse, el color cambia automáticamente después de cada desplazamiento completo del tiempo.
Para encontrar rápidamente los valores RGB exactos de cualquier color, utiliza la herramienta Selector de Color RGB:Selector de color RGB.
Visualización del tiempo y desplazamiento
La hora actual está formateada comoHH:MMy se almacena en un pequeño búfer de caracteres. Debido a que la pantalla tiene solo 8 píxeles de ancho, el texto se desplaza suavemente de derecha a izquierda. Una vez que el tiempo sale completamente de la pantalla, se selecciona el siguiente color (si está habilitado) para el siguiente pase.
Demostración
Después de subir el boceto:
- El ESP32-S3 se conecta a Wi-Fi.
- El tiempo está sincronizado desde internet.
- El tiempo actual se desplaza a través de la matriz RGB.
- El brillo cambia automáticamente entre el día y la noche.
- El color del texto permanece fijo o cambia según tu configuración.
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 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 por Internet con Matriz LED RGB ESP32-S3 - Pantalla de Hora y Fecha multicolor de 2 Relojes
- 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 3- Night color with Date
* =====================================================================================
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT840
* Author: Gemini (AI Thought Partner) & 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 after the time finishes a full scroll.
* 3. Auto-Brightness: Dims the LEDs during night hours (User-configurable).
* =====================================================================================
*/
#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; // 10 PM
const int NIGHT_END_HOUR = 6; // 6 AM
// --- 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]);
// --- INTERVALS ---
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";
int16_t scrollX = 8;
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
void updateTimeText() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return;
// Format HH:MM
snprintf(timeText, sizeof(timeText), "%02d:%02d", timeinfo.tm_hour, timeinfo.tm_min);
// Apply Auto-Brightness
if (timeinfo.tm_hour >= NIGHT_START_HOUR || timeinfo.tm_hour < NIGHT_END_HOUR) {
matrix.setBrightness(NIGHT_BRIGHTNESS);
} else {
matrix.setBrightness(DAY_BRIGHTNESS);
}
}
void scrollTime() {
matrix.fillScreen(0);
// Pick the color (Fixed or Cycle)
int idx = useFixedColor ? fixedColorIndex : currentColorIndex;
matrix.setTextColor(matrix.Color(userColors[idx][0], userColors[idx][1], userColors[idx][2]));
matrix.setCursor(scrollX, 0);
matrix.print(timeText);
matrix.show();
scrollX--;
// Width for "HH:MM" is roughly 30 pixels
int16_t textWidth = 30;
// TRIGGER: When time is fully off-screen
if (scrollX < -textWidth) {
scrollX = matrix.width(); // Reset position to right side
// Cycle to the next color in the array for the next pass
if (!useFixedColor) {
currentColorIndex = (currentColorIndex + 1) % totalColors;
Serial.print("Next cycle color index: ");
Serial.println(currentColorIndex);
}
}
}
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);
updateTimeText();
}
void loop() {
unsigned long now = millis();
// Update time digits and brightness once per second
if (now - lastTimeUpdateMs >= timeUpdateIntervalMs) {
lastTimeUpdateMs = now;
updateTimeText();
}
// Handle the scrolling animation
if (now - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = now;
scrollTime();
}
}
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
-
Interno🎨 Herramienta de selección de colorrobojax.com
Archivos📁
Archivo de Fritzing
-
parte fritzing esp32-S3-supermini-tht
esp32-S3-supermini-tht.fzpz0.02 MB