Hierdie tutorialie is deel van: ESP32-S3 RGB LED-matriks
'n Koel projek om te skep vir prettige en praktiese toepassings met die ESP32-S3 RGB Matriksmodule. Skakels na ander video's is onder hierdie artikel.
ESP32-S3 RGB LED-matriks-internetklokprojek - 4 Ewekansige kleure
ESP32-S3 Internetklok met Willekeurige RGB-kleure
Hierdie projek is 'n ESP32-S3 RGB-matriks-internetklok wat met Wi-Fi verbind, die plaaslike tyd van 'n NTP-bediener sinchroniseer, en die tyd in HH:MM-formaat oor die ingeboude 8×8 RGB NeoMatrix laat rol. In hierdie weergawe word die ure, dubbelpunt en minute elk in willekeurige kleure weergegee wat by elke volle rolsiklus gekies word, wat 'n dinamiese en speelse klokvertoning skep wat voortdurend verander.

Hoe hierdie klok werk
Nadat die bord via USB-C aangeskakel is, verbind die ESP32-S3 met jou Wi-Fi-netwerk en haal die huidige plaaslike tyd van die internet af. Die tyd word in drie dele verdeel—ure, dubbelpunt en minute—en elke deel word afsonderlik op die RGB-matriks geteken. Wanneer die teks heeltemal van die skerm af rol, word nuwe willekeurige kleure vir die volgende deurgang gekies.
Biblioteke gebruik
Hierdie skets gebruik die volgende biblioteke:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
Installeer Adafruit NeoMatrix vanaf die Arduino-biblioteekbestuurder. Vereiste afhanklikhede soos Adafruit GFX Library en Adafruit NeoPixel sal outomaties geïnstalleer word.

Belangrike gebruikerkonfigurasie
Matriksdatapen (ingeboude RGB-matriks)
Alhoewel die RGB-matriks op die bord geïntegreer is, moet die datapen steeds in die kode gedefinieer word:

#define MATRIX_PIN 14
GPIO 14 word algemeen op ESP32-S3 RGB-matriksborde gebruik. As jou bordvariant 'n ander pen gebruik, werk hierdie waarde dienooreenkomstig by.
Wi-Fi-SSID en wagwoord (hooflettergevoelig)
Vervang die Wi-Fi-geloofsbriewe met jou eie netwerkbesonderhede:
const char* WIFI_SSID = "jou WiFi SSID";
const char* WIFI_PASSWORD = "passW0rd";
Belangrik: Wi-Fi-SSID's is hooflettergevoelig. 'n SSID genaamd "Book" is nie dieselfde as "book" nie. As die hoofletters nie presies ooreenstem nie, sal die ESP32-S3 nie kan verbind nie.
NTP-bediener, tydsone en somertyd
Tydsinchronisasie word met 'n internet-NTP-bediener gedoen:
const char* ntpServer = "pool.ntp.org";
Plaaslike tyd word met UTC- en somertyd-afwykings bereken:
// Toronto-agtig: UTC-5, plus 1 uur somertyd
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_sec: UTC-afwyking in sekondes (pas aan vir jou ligging)daylightOffset_sec: Gebruik3600wanneer somertyd aktief is, of0andersins
Hierdie instellings word toegepas met:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Outomatiese dag / nag helderheid
Die klok pas helderheid outomaties aan op grond van die huidige uur:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;
Tussen 22:00 en 06:00 verdof die vertoning om glans in donker omgewings te verminder. Gedurende dagure keer die matriks terug na normale helderheid.
Willekeurige RGB-kleurgedrag
'n Voorafbepaalde lys RGB-kleure word in 'n skikking gestoor, waar elke kleur met Rooi-, Groen- en Blou-waardes van 0 tot 255 gedefinieer word:
uint8_t userColors[][3] = {
{255, 0, 0}, // Rooi
{0, 255, 0}, // Groen
{0, 0, 255}, // Blou
{255, 165, 0}, // Oranje
{255, 0, 255}, // Magenta
{0, 255, 255}, // Siaan
{255, 255, 0} // Geel
};
By elke volle rolsiklus:
- Die uursyfers kry 'n willekeurige kleur toegewys
- Die dubbelpunt ontvang 'n ander willekeurige kleur
- Die minutesyfers ontvang nog 'n willekeurige kleur
Dit produseer 'n voortdurend veranderende kleurkombinasie wat die klok visueel interessant hou. Om jou eie pasgemaakte kleure te skep, kan jy die RGB-kleurkieser-nutsding gebruik: RGB-kleurkieser.
Tydweergawe-logika
Die tyd word in drie komponente verdeel:
- Ure:
HH - Dubbelpunt:
: - Minute:
MM
Elke deel word individueel geteken sodat dit sy eie kleur kan hê, terwyl alle dele saam beweeg om 'n gladde rol-animasie oor die 8×8-vertoning te vorm.
Willekeurige kleur-generering
Om kleur-willekeurigheid te verseker, saai die skets die ewekansige-nommergenerator by aanvang met 'n onverbinde analoogpen:
randomSeed(analogRead(0));
Dit verseker dat kleurkombinasies by elke aanskakeling en elke rolsiklus verskil.
Demonstrasie
Nadat die skets opgelaai is en die bord via USB-C aangeskakel is:
- Die ESP32-S3 verbind met jou Wi-Fi-netwerk
- Tyd word van die internet gesinchroniseer
- Die tyd rol in
HH:MM-formaat - Ure, dubbelpunt en minute verander elke siklus na willekeurige kleure
- Die vertoning verdof outomaties snags
Aflaaie en skakels
Die volledige bronkode word hieronder in hierdie artikel verskaf. Nuttige gereedskap en verwysings word hieronder in hierdie artikel gekoppel.
Hierdie handleiding is deel van: ESP32-S3 RGB LED-matriks
- ESP32-S3 RGB LED-matriksprojek 1- Basiese Punt
- ESP32-S3 RGB LED-matriksprojek 2 - Roltelende teks
- ESP32-S3 RGB LED-matriksprojek 3 - Teks vanaf selfoon
- ESP32-S3 RGB LED-matriksprojek 4 - Kantelkolletjie
- ESP32-S3 RGB LED-matriksprojek 5 - Pyl altyd op
- ESP32-S3 RGB LED-matriksprojek 6 - Cible-speletjie
- ESP32-S3 RGB LED-matriks Wi-Fi + NTP-tydklokprojek -1 Basiese klok
- ESP32-S3 RGB LED-matriks Internet-klokprojek - 2 Klok multi-kleur Tyd & Datum Vertoning
- ESP32-S3 RGB LED-matriks-internetklokprojek - 3 Nagkleure met Datum
- ESP32-S3 RGB LED-matriks-internetklokprojek - 5 Reënboogkleur
- ESP32-S3 RGB LED Matrix test for RGB, GRB setting
/*
* =====================================================================================
* ESP32-S3 INTERNET RGB CLOCK (8x8 Matrix) - Project 4- Random Color
* =====================================================================================
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT843
* 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).
* =====================================================================================
*/
/*
* =====================================================================================
* ESP32-S3 INTERNET CLOCK - MULTI-COLOR ELEMENTS
* =====================================================================================
* Each part of the time (HH : MM) gets a different random color from your list.
* Colors only change once the full scroll cycle is finished.
* =====================================================================================
*/
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define MATRIX_PIN 14
// --- CONFIGURATION ---
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;
uint8_t userColors[][3] = {
{255, 0, 0}, // Red
{0, 255, 0}, // Green
{0, 0, 255}, // Blue
{255, 165, 0}, // Orange
{255, 0, 255}, // Magenta
{0, 255, 255}, // Cyan
{255, 255, 0} // Yellow
};
int totalColors = sizeof(userColors) / sizeof(userColors[0]);
// Variables to store the current random color indices
int hourColorIdx = 0;
int colonColorIdx = 1;
int minColorIdx = 2;
// --- GLOBALS ---
Adafruit_NeoMatrix matrix(8, 8, MATRIX_PIN,
NEO_MATRIX_TOP + NEO_MATRIX_LEFT +
NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
NEO_RGB + NEO_KHZ800);
char hourText[3], minText[3];
int16_t scrollX = 8;
unsigned long lastScrollMs = 0;
const uint16_t scrollIntervalMs = 100;
// 👇 REPLACE these with your real home WiFi name & password
const char* WIFI_SSID = "your WiFi SSID";
const char* WIFI_PASSWORD = "passW0rd";
// NTP (time) server
const char* ntpServer = "pool.ntp.org";
// 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
void updateTimeParts() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return;
snprintf(hourText, sizeof(hourText), "%02d", timeinfo.tm_hour);
snprintf(minText, sizeof(minText), "%02d", timeinfo.tm_min);
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);
int x = scrollX;
// 1. Draw Hours
matrix.setTextColor(matrix.Color(userColors[hourColorIdx][0], userColors[hourColorIdx][1], userColors[hourColorIdx][2]));
matrix.setCursor(x, 0);
matrix.print(hourText);
x += 12; // Move 12 pixels (2 digits * 6px)
// 2. Draw Colon
matrix.setTextColor(matrix.Color(userColors[colonColorIdx][0], userColors[colonColorIdx][1], userColors[colonColorIdx][2]));
matrix.setCursor(x, 0);
matrix.print(":");
x += 6; // Move 6 pixels
// 3. Draw Minutes
matrix.setTextColor(matrix.Color(userColors[minColorIdx][0], userColors[minColorIdx][1], userColors[minColorIdx][2]));
matrix.setCursor(x, 0);
matrix.print(minText);
matrix.show();
scrollX--;
// Total width is roughly 30 pixels (HH=12, :=6, MM=12)
if (scrollX < -30) {
scrollX = matrix.width();
// Pick NEW random colors for the next cycle
hourColorIdx = random(0, totalColors);
colonColorIdx = random(0, totalColors);
minColorIdx = random(0, totalColors);
}
}
void setup() {
Serial.begin(115200);
// Seed the random generator using an unconnected analog pin
randomSeed(analogRead(0));
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(500);
// Configure time via NTP
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Serial.println("Waiting for time...");
delay(2000); // small wait for initial sync
matrix.begin();
matrix.setTextWrap(false);
matrix.setBrightness(DAY_BRIGHTNESS);
}
void loop() {
if (millis() % 1000 == 0) updateTimeParts();
if (millis() - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = millis();
scrollTime();
}
}
Hulpbronne en verwysings
-
Video
-
Internaal🎨 Color picker Toolrobojax.com
Lêers📁
Fritzing-lêer
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB