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 - 5 Reënboogkleur
ESP32-S3 Internet-klok met Reënboog-kleureffek
Hierdie projek is 'n ESP32-S3 RGB-matriks Internet-klok 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. Anders as soliede of ewekansige kleurweergawes, gebruik hierdie klok 'n gladde reënboog-kleureffek, waar elke karakter deurlopend deur die RGB-spektrum verskuif soos dit rol. Die klok vertoon ook periodiek die datum en pas helderheid outomaties tussen dag en nag aan.

Hoe hierdie klok werk
Sodra dit via USB-C aangeskakel word, verbind die ESP32-S3 met jou Wi-Fi-netwerk en haal die huidige plaaslike tyd van die internet af. Die vertoning rol normaalweg die tyd, maar teen 'n bepaalde interval skakel dit oor om die datum te wys. Beide die tyd en datum word met 'n dinamiese reënboog-effek weergegee, wat 'n lewendige en geanimeerde vertoning op die klein 8×8-matriks skep.
Biblioteke gebruik
Die skets maak staat op die volgende biblioteke:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
Installeer Adafruit NeoMatrix met die Arduino Library Manager. Sy afhanklikhede, insluitend Adafruit GFX Library en Adafruit NeoPixel, sal outomaties geïnstalleer word.

Belangrike gebruikerkonfigurasie
Matriks-data-pen (ingeboude RGB-matriks)
Alhoewel die RGB-matriks aan die ESP32-S3-bord geheg is, moet die data-pen 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 by.
Wi-Fi SSID en wagwoord (hooflettergevoelig)
Vervang die Wi-Fi-geloofsbriewe met jou eie netwerkbesonderhede:
const char* WIFI_SSID = "jou WIFI";
const char* WIFI_PASSWORD = "wagw0ord";
Belangrik: Wi-Fi-SSID'e 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
Die klok sinchroniseer tyd met 'n internet-NTP-bediener:
const char* ntpServer = "pool.ntp.org";
Plaaslike tyd word met hierdie 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 (voorbeeld: UTC-5 =-5 * 3600)daylightOffset_sec: Gebruik3600as somertyd aktief is, of0as dit nie gebruik word nie
Hierdie waardes word toegepas met:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Outomatiese dag / nag helderheid
Helderheid verander outomaties gebaseer op 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 10 nm en 6 vm verdof die matriks om glans te verminder. Gedurende dagure word normale helderheid herstel.
Reënboog-kleureffek
Hierdie projek gebruik 'n klassieke RGB-kleurwiel om gladde reënboogkleure te genereer. Elke karakter word met 'n effens verskillende kleur-afwyking geteken, en die kleure verskuif oor tyd, wat 'n vloeiende reënboog-animasie produseer.
// Helper om Reënboogkleure te skep
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if (WheelPos < 85) {
return matrix.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if (WheelPos < 170) {
WheelPos -= 85;
return matrix.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return matrix.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
Soos die teks rol, vorder elke karakter deur die RGB-spektrum, wat 'n deurlopende reënboog-effek skep wat veral indrukwekkend op die klein 8×8-vertoning lyk.
Tyd- en datumvertoningsgedrag
Die klok hou aparte buffers vir tyd en datum:
- Tyd:
HH:MM - Datum:
MMM DD(byvoorbeeldJAN 08)
Die datum word teen 'n vaste interval gewys:
const uint32_t dateIntervalMs = 60000; // Wys datum elke 1 minuut
Aan die einde van elke volle rolsiklus besluit die kode of dit die tyd moet aanhou wys of na die datum moet oorskakel.
Rol-logika op 'n 8×8-matriks
Omdat die vertoning net 8 pixels wyd is, rol die teks glad van regs na links. Sodra die teks volledig van die skerm af is, stel die wyser terug en word die volgende inhoud (tyd of datum) vir die volgende gang gelaai.
Demonstrasie
Na die oplaai van die skets en die aanskakel van die bord via USB-C:
- Die ESP32-S3 verbind met jou Wi-Fi-netwerk
- Tyd word van die internet gesinchroniseer
- Die tyd rol in
HH:MM-formaat - Die datum verskyn periodiek
- Alle teks word met 'n gladde geanimeerde reënboog-effek weergegee
- Die vertoning verdof outomaties snags en verhelder gedurende die dag
Aflaaie en skakels
Die volledige bronkode word hieronder in hierdie artikel verskaf. Nuttige gereedskap en verwysings, insluitend die RGB-kleurkieser, word ook hieronder in hierdie artikel geskakel.
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 - 4 Ewekansige kleure
- ESP32-S3 RGB LED Matrix test for RGB, GRB setting
/*
* =====================================================================================
* ESP32-S3 CLOCK - RAINBOW DATE & SOLID TIME - Project 5- RAINBOW MODE
* =====================================================================================
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT842
* Author: Gemini (AI Thought Partner) & Ahmad Shamshiri (Robojax.com)
* Date: 07 Jan 2026
* =====================================================================================
* ESP32-S3 INTERNET RGB CLOCK - RAINBOW MODE
* * FEATURES:
* - Full Rainbow: Time and Date use flowing rainbow colors.
* - Auto-Brightness: Dims at night (22:00 to 06:00).
* - Custom WiFi: Robust connection logic with retries.
* =====================================================================================
*/
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define MATRIX_PIN 14
// 👇 REPLACE these with your real home WiFi name & password
const char* WIFI_SSID = "your WIFI";
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
// --- BRIGHTNESS CONFIGURATION ---
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;
// --- INTERVALS & TRACKING ---
unsigned long lastDateShowMs = 0;
const uint32_t dateIntervalMs = 60000; // Show date every 1 minute
bool isShowingDate = false;
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;
unsigned long lastScrollMs = 0;
const uint16_t scrollIntervalMs = 100;
unsigned long lastTimeUpdateMs = 0;
// Helper to create Rainbow Colors
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return matrix.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return matrix.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return matrix.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
void updateClockData() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return;
// Update Time and Date strings
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]);
// Handle Night Dimming
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);
int len = strlen(currentDisplayText);
int16_t x = scrollX;
// Draw each character with a shifting rainbow color
for (int i = 0; i < len; i++) {
uint8_t colorPos = (uint8_t)((i * 30) + (millis() / 5));
matrix.setTextColor(Wheel(colorPos));
matrix.setCursor(x + (i * 6), 0);
matrix.print(currentDisplayText[i]);
}
matrix.show();
scrollX--;
int16_t textWidth = len * 6;
if (scrollX < -textWidth) {
scrollX = matrix.width();
// Switch between Date and Time at end of cycle
if (millis() - lastDateShowMs > dateIntervalMs) {
strcpy(currentDisplayText, dateText);
lastDateShowMs = millis();
isShowingDate = true;
} else {
strcpy(currentDisplayText, timeText);
isShowingDate = false;
}
}
}
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("\nESP32-S3 Rainbow Clock Initializing...");
// Connect to WiFi
Serial.print("Connecting to WiFi: ");
Serial.println(WIFI_SSID);
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
int retries = 0;
while (WiFi.status() != WL_CONNECTED && retries < 30) { // ~15s timeout
delay(500);
Serial.print(".");
retries++;
}
Serial.println();
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi connection FAILED");
} else {
Serial.print("WiFi connected. IP: ");
Serial.println(WiFi.localIP());
}
// 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);
updateClockData();
strcpy(currentDisplayText, timeText); // Load initial time
}
void loop() {
unsigned long now = millis();
// Update time digits and check brightness every second
if (now - lastTimeUpdateMs >= 1000) {
lastTimeUpdateMs = now;
updateClockData();
}
// Handle the scrolling animation
if (now - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = now;
scrollDisplay();
}
}
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