Dieses Tutorial ist Teil von: ESP32-S3 RGB-LED-Matrix
Ein cooles Projekt zum Nachbauen – sowohl für Spaß als auch für praktische Anwendungen – mit dem ESP32-S3 RGB-Matrix-Modul. Links zu weiteren Videos finden Sie unter diesem Artikel.
ESP32-S3 RGB-LED-Matrix-Internet-Uhr Projekt - 4 Zufallsfarben
ESP32-S3 Internet-Uhr mit zufälligen RGB-Farben
Dieses Projekt ist eine ESP32-S3 RGB-Matrix-Internet-Uhr, die sich mit Wi-Fi verbindet, die lokale Zeit von einem NTP-Server synchronisiert und die Zeit scrollt inHH:MMFormat über das integrierte 8×8 RGB NeoMatrix. In dieser Version werden die Stunden, der Doppelpunkt und die Minuten jeweils dargestellt inzufällige Farbenausgewählt bei jedem vollständigen Scroll-Zyklus, wodurch eine dynamische und verspielte Uhranzeige entsteht, die sich ständig verändert.

Wie diese Uhr funktioniert
Nachdem das Board über USB-C mit Strom versorgt wird, verbindet sich das ESP32-S3 mit Ihrem WLAN und ruft die aktuelle lokale Uhrzeit aus dem Internet ab. Die Zeit wird in drei Teile aufgeteilt - Stunden, Doppelpunkt und Minuten - und jeder Teil wird separat auf der RGB-Matrix angezeigt. Wenn der Text vollständig vom Bildschirm gescrollt ist, werden neue zufällige Farben für den nächsten Durchlauf ausgewählt.
Verwendete Bibliotheken
Dieser Sketch verwendet die folgenden Bibliotheken:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>InstallierenAdafruit NeoMatrixaus dem Arduino-Bibliotheks-Manager. Benötigte Abhängigkeiten wieAdafruit GFX LibraryundAdafruit NeoPixelwird automatisch installiert.

Wichtige Benutzereinstellungen
Matrix-Daten-Pin (integrierte RGB-Matrix)
Obwohl die RGB-Matrix auf der Platine integriert ist, muss der Datapin dennoch im Code definiert werden:

#define MATRIX_PIN 14GPIO 14 wird häufig auf ESP32-S3 RGB-Matrix-Boards verwendet. Wenn Ihre Board-Variante einen anderen Pin verwendet, aktualisieren Sie diesen Wert entsprechend.
Wi-Fi-SSID und Passwort (groß- und kleinschreibungssensitiv)
Ersetzen Sie die Wi-Fi-Anmeldeinformationen mit Ihren eigenen Netzwerkdetails:
const char* WIFI_SSID = "your WiFi SSID";
const char* WIFI_PASSWORD = "passW0rd";Wichtig:Wi-Fi-SSIDs sindgroß- und kleinschreibungsempfindlich. Ein SSID namens"Book"ist nicht das gleiche wie"book"Wenn die Groß- und Kleinschreibung nicht genau übereinstimmt, wird der ESP32-S3 keine Verbindung herstellen.
NTP-Server, Zeitzone und Sommerzeit
Die Zeitsynchronisation erfolgt über einen Internet-NTP-Server:
const char* ntpServer = "pool.ntp.org";Die lokale Zeit wird unter Verwendung von UTC und den Zeitverschiebungen für die Sommerzeit berechnet:
// Toronto-ish: UTC-5, plus 1 hour DST
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;gmtOffset_secUTC-Versatz in Sekunden (passen Sie es an Ihren Standort an)daylightOffset_secBenutzen3600wenn die Sommerzeit aktiv ist, oder0ansonsten
Diese Einstellungen werden angewendet mit:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);Automatische Helligkeit für Tag/Nacht
Die Uhr passt die Helligkeit automatisch basierend auf der aktuellen Stunde an:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;Zwischen 22:00 Uhr und 6:00 Uhr wird das Display abgedunkelt, um Blendung in dunklen Umgebungen zu reduzieren. Während der Tagesstunden kehrt die Matrix zur normalen Helligkeit zurück.
Zufälliges RGB-Farbenverhalten
Eine vordefinierte Liste von RGB-Farben wird in einem Array gespeichert, wobei jede Farbe mit Rot-, Grün- und Blauwerten von 0 bis 255 definiert ist:
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
};Bei jedem vollständigen Scroll-Zyklus:
- DieStundenzahlenwerden eine zufällige Farbe zugewiesen
- DieDoppelpunkterhält eine andere zufällige Farbe
- DieMinutenziffernempfange eine weitere zufällige Farbe
Dies erzeugt eine ständig wechselnde Farbkombination, die die Uhr visuell interessant hält. Um Ihre eigenen benutzerdefinierten Farben zu erstellen, können Sie das RGB-Farbwähler-Tool verwenden:RGB-Farbauswahl.
Zeit Render-Logik
Die Zeit wird in drei Komponenten unterteilt:
- Stunden:
HH - Doppelpunkt:
: - Minuten:
MM
Jeder Teil wird einzeln gezeichnet, sodass er seine eigene Farbe haben kann, während sich alle Teile gemeinsam bewegen, um eine sanfte Scrollanimation über das 8×8-Display zu bilden.
Zufällige Farbgenerierung
Um die Farbzufälligkeit zu gewährleisten, initialisiert der Sketch den Zufallszahlengenerator beim Start über einen unverbundenen analogen Pin:
randomSeed(analogRead(0));Das stellt sicher, dass die Farbkombinationen bei jedem Power-up und jedem Scroll-Zyklus unterschiedlich sind.
Demonstration
Nachdem Sie den Sketch hochgeladen und das Board über USB-C mit Strom versorgt haben:
- Der ESP32-S3 verbindet sich mit Ihrem Wi-Fi-Netzwerk.
- Die Zeit ist vom Internet synchronisiert.
- Die Zeit rollt herein
HH:MMFormat - Stunden, Doppelpunkt und Minuten ändern sich in jeder Runde in zufällige Farben.
- Der Bildschirm dimmt sich nachts automatisch.
Downloads und Links
Der vollständige Quellcode wird unterhalb dieses Artikels bereitgestellt. Nützliche Werkzeuge und Referenzen sind unterhalb dieses Artikels verlinkt.
Dieses Tutorial ist Teil von: ESP32-S3 RGB-LED-Matrix
- ESP32-S3 RGB-LED-Matrix-Projekte (Kippspiel, Text, Pfeil, WiFi-Demo)
- ESP32-S3 RGB-LED-Matrix-Projekt 2 - Lauftext
- ESP32-S3 RGB-LED-Matrix-Projekt 3 - Text vom Mobiltelefon
- ESP32-S3 RGB-LED-Matrix-Projekt 4 - Neigungspunkt
- ESP32-S3 RGB-LED-Matrix-Projekt 5 - Pfeil immer nach oben
- ESP32-S3 RGB-LED-Matrix-Projekt 6 - Cible-Spiel
- ESP32-S3 RGB-LED-Matrix Wi-Fi + NTP-Uhrzeit-Projekt - 1 Grundlegende Uhr
- ESP32-S3 RGB-LED-Matrix-Internet-Uhrprojekt - 2-Uhr mehrfarbige Zeit- und Datumsanzeige
- ESP32-S3 RGB-LED-Matrix-Internet-Uhr-Projekt - 3 Nachtfarben mit Datum
- ESP32-S3 RGB-LED-Matrix-Internet-Uhr-Projekt - 5 Regenbogenfarben
- ESP32-S3 RGB-LED-Matrix-Test für RGB-, GRB-Einstellung
/*
* =====================================================================================
* ESP32-S3 INTERNET RGB UHR (8x8 Matrix) - Projekt 4 - Zufällige Farbe
* =====================================================================================
* Video ansehen https://youtube.com/shorts/4iWjLiD7fS8
* 📚⬇️ Download und Ressourcen-Seite https://robojax.com/RJT838
* Autor: Gemini (AI Thought Partner) & Ahmad Shamshiri (Robojax.com)
* Datum: 07. Januar 2026
*
* MERKMALE:
* 1. WiFi/NTP Zeit: Synchronisiert sich automatisch mit Internet-Zeitservern.
* 2. Zyklusbasierte Farbe: Die Farbe ändert sich NUR, nachdem der Zeitzyklus vollständig abgeschlossen ist.
* 3. Automatische Helligkeit: Dimmt die LEDs in der Nacht (Benutzerkonfigurierbar).
* =====================================================================================
*
* =====================================================================================
* ESP32-S3 INTERNET UHR - MEHRFARBIGE ELEMENTE
* =====================================================================================
* Jeder Teil der Zeit (HH : MM) erhält eine andere zufällige Farbe aus Ihrer Liste.
* Farben ändern sich nur, wenn der vollständige Scroll-Zyklus abgeschlossen ist.
* =====================================================================================
*/
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define MATRIX_PIN 14
// --- KONFIGURATION ---
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}, // Rot
{0, 255, 0}, // Grün
{0, 0, 255}, // Blau
{255, 165, 0}, // Orange
{255, 0, 255}, // Magenta
{0, 255, 255}, // Zyan
{255, 255, 0} // Gelb
};
int totalColors = sizeof(userColors) / sizeof(userColors[0]);
// Variablen zur Speicherung der aktuellen Zufallsfarbindexe
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;
// 👇 ERSETZEN Sie diese durch Ihren echten WLAN-Namen und Ihr Passwort
const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
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. Zeichenstunden
matrix.setTextColor(matrix.Color(userColors[hourColorIdx][0], userColors[hourColorIdx][1], userColors[hourColorIdx][2]));
matrix.setCursor(x, 0);
matrix.print(hourText);
x += 12; // Verschiebe 12 Pixel (2 Ziffern * 6px)
// 2. Zeichne einen Doppelpunkt
matrix.setTextColor(matrix.Color(userColors[colonColorIdx][0], userColors[colonColorIdx][1], userColors[colonColorIdx][2]));
matrix.setCursor(x, 0);
matrix.print(":");
x += 6; // Bewege 6 Pixel
// 3. Protokoll zeichnen
matrix.setTextColor(matrix.Color(userColors[minColorIdx][0], userColors[minColorIdx][1], userColors[minColorIdx][2]));
matrix.setCursor(x, 0);
matrix.print(minText);
matrix.show();
scrollX--;
// Die Gesamtbreite beträgt ungefähr 30 Pixel (HH=12, :=6, MM=12)
if (scrollX < -30) {
scrollX = matrix.width();
// Wählen Sie NEUE zufällige Farben für den nächsten Zyklus.
hourColorIdx = random(0, totalColors);
colonColorIdx = random(0, totalColors);
minColorIdx = random(0, totalColors);
}
}
void setup() {
Serial.begin(115200);
// Setze den Zufallszahlengenerator mit einem nicht verbundenen Analogpin in Gang.
randomSeed(analogRead(0));
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(500);
configTime(-5 * 3600, 3600, "pool.ntp.org");
matrix.begin();
matrix.setTextWrap(false);
matrix.setBrightness(DAY_BRIGHTNESS);
}
void loop() {
if (millis() % 1000 == 0) updateTimeParts();
if (millis() - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = millis();
scrollTime();
}
}
Ressourcen & Referenzen
-
Video
-
Intern🎨 Farbauswahlwerkzeugrobojax.com
Dateien📁
Fritzing-Datei
-
esp32-S3-supermini-tht Fritzing-Teil
esp32-S3-supermini-tht.fzpz0.02 MB