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 - 5 Regenbogenfarben
ESP32-S3 Internetuhr mit Regenbogenfarbeffekt
Dieses Projekt ist eine ESP32-S3 RGB-Matrix-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. Im Gegensatz zu festen oder zufälligen Farbvarianten verwendet diese Uhr ein sanftesRegenbogenfarbeneffekt, wo jedes Zeichen kontinuierlich durch das RGB-Spektrum wechselt, während es scrollt. Die Uhr zeigt auch regelmäßig das Datum an und passt die Helligkeit automatisch zwischen Tag und Nacht an.

Wie diese Uhr funktioniert
Sobald das ESP32-S3 über USB-C mit Strom versorgt wird, verbindet es sich mit Ihrem Wi-Fi-Netzwerk und ruft die aktuelle Ortszeit aus dem Internet ab. Das Display scrollt normalerweise die Uhrzeit, wechselt jedoch in einem festgelegten Intervall zur Anzeige des Datums. Sowohl die Uhrzeit als auch das Datum werden mit einem dynamischen Regenbogeneffekt dargestellt, wodurch ein lebendiges und animiertes Display auf der kleinen 8×8-Matrix entsteht.
Verwendete Bibliotheken
Das Skript basiert auf den folgenden Bibliotheken:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>InstallierenAdafruit NeoMatrixVerwenden des Arduino Bibliotheksmanagers. Seine Abhängigkeiten, einschließlichAdafruit GFX LibraryundAdafruit NeoPixel, wird automatisch installiert.

Wichtige Benutzerkonfiguration
Matrixdaten-Pin (integrierte RGB-Matrix)
Obwohl die RGB-Matrix an das ESP32-S3-Board angeschlossen ist, muss der Datenpin 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.
Wi-Fi-SSID und Passwort (groß- und kleinschreibung beachten)
Ersetzen Sie die Wi-Fi-Anmeldeinformationen durch Ihre eigenen Netzwerkdetails:
const char* WIFI_SSID = "your WIFI";
const char* WIFI_PASSWORD = "passW0rd";Wichtig:Wi-Fi-SSIDs sindgroß- und kleinschreibungsempfindlichEin SSID namens"Book"ist nicht dasselbe wie"book"Wenn die Groß- und Kleinschreibung nicht genau übereinstimmt, kann sich der ESP32-S3 nicht verbinden.
NTP-Server, Zeitzone und Sommerzeit
Die Uhr synchronisiert die Zeit über einen Internet-NTP-Server:
const char* ntpServer = "pool.ntp.org";Die lokale Zeit wird unter Verwendung dieser Zeitverschiebungen 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 (Beispiel: UTC-5 =-5 * 3600)daylightOffset_secVerwenden3600wenn die Sommerzeit aktiv ist, oder0wenn nicht verwendet
Diese Werte werden angewendet mit:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);Automatische Tages-/Nachthelligkeit
Die Helligkeit ändert sich automatisch je nach aktueller Uhrzeit:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;Zwischen 22 Uhr und 6 Uhr dimmt die Matrix, um Blendung zu reduzieren. Während der Tagesstunden wird die normale Helligkeit wiederhergestellt.
Regenbogenfarbeneffekt
Dieses Projekt verwendet ein klassisches RGB-Farbrad, um sanfte Regenbogenfarben zu erzeugen. Jedes Zeichen wird mit einem leicht unterschiedlichen Farbversatz gezeichnet, und die Farben ändern sich im Laufe der Zeit, was eine fließende Regenbogenanimation erzeugt.
// 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);
}Während der Text scrollt, bewegt sich jedes Zeichen durch das RGB-Spektrum und erzeugt einen kontinuierlichen Regenbogeneffekt, der auf dem kleinen 8×8-Display besonders beeindruckend aussieht.
Verhalten der Zeit- und Datumsanzeige
Die Uhr hat separate Puffer für Zeit und Datum.
- Zeit:
HH:MM - Datum:
MMM DD(zum BeispielJAN 08)
Das Datum wird in festen Intervallen angezeigt:
const uint32_t dateIntervalMs = 60000; // Show date every 1 minuteAm Ende jedes vollständigen Scroll-Zyklus entscheidet der Code, ob die Uhrzeit weiterhin angezeigt wird oder ob zur Datumsanzeige gewechselt wird.
Scroll-Logik auf einer 8×8-Matrix
Da das Display nur 8 Pixel breit ist, scrollt der Text sanft von rechts nach links. Sobald der Text den Bildschirm vollständig verlässt, setzt sich der Cursor zurück und der nächste Inhalt (Uhrzeit oder Datum) wird für die nächste Durchgang geladen.
Demonstration
Nachdem Sie das Sketch hochgeladen und das Board über USB-C mit Strom versorgt haben:
- Der ESP32-S3 verbindet sich mit Ihrem Wi-Fi-Netzwerk.
- Die Zeit wird über das Internet synchronisiert.
- Die Zeit rollt herein.
HH:MMFormat - Das Datum erscheint periodisch.
- Aller Text wird mit einem sanften, animierten Regenbogeneffekt dargestellt.
- Der Bildschirm dimmt automatisch nachts und hellt sich tagsüber auf.
Downloads und Links
Der vollständige Quellcode wird unter diesem Artikel bereitgestellt. Nützliche Werkzeuge und Referenzen, einschließlich des RGB-Farbwähler, sind ebenfalls unter diesem Artikel 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 - 4 Zufallsfarben
- ESP32-S3 RGB-LED-Matrix-Test für RGB-, GRB-Einstellung
/*
* =====================================================================================
* 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();
}
}
Ressourcen & Referenzen
-
Video
-
Intern🎨 Farbauswahlwerkzeugrobojax.com
Dateien📁
Fritzing-Datei
-
esp32-S3-supermini-tht Fritzing-Teil
esp32-S3-supermini-tht.fzpz0.02 MB