This tutorial is part of: Matrice LED RGB ESP32-S3
Proiect interesant de creat pentru aplicații distractive și practice folosind modulul ESP32-S3 RGB Matrix. Linkuri către alte videoclipuri sunt sub acest articol.
Proiect de ceas internet cu matrice LED RGB ESP32-S3 - 5 culori curcubeu
Ceas Internet ESP32-S3 cu efect de culoare curcubeu
Acest proiect este un ceas Internet cu matrice RGB ESP32-S3 care se conectează la Wi-Fi, sincronizează ora locală de la un server NTP și defilează ora în format HH:MM pe matricea RGB NeoMatrix 8×8 încorporată. Spre deosebire de versiunile cu culori solide sau aleatorii, acest ceas folosește un efect de culoare curcubeu lin, în care fiecare caracter se schimbă continuu prin spectrul RGB pe măsură ce defilează. Ceasul afișează, de asemenea, periodic data și ajustează automat luminozitatea între zi și noapte.

Cum funcționează acest ceas
Odată alimentat prin USB-C, ESP32-S3 se conectează la rețeaua ta Wi-Fi și preia ora locală curentă de pe internet. Afișajul afișează în mod normal ora prin defilare, dar la un interval definit trece la afișarea datei. Atât ora, cât și data sunt redate folosind un efect dinamic de curcubeu, creând un afișaj vibrant și animat pe mica matrice 8×8.
Biblioteci folosite
Schița se bazează pe următoarele biblioteci:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
Instalează Adafruit NeoMatrix folosind Managerul de Biblioteci Arduino. Dependențele sale, inclusiv Adafruit GFX Library și Adafruit NeoPixel, vor fi instalate automat.

Configurare importantă pentru utilizator
Pinul de date al matricei (matrice RGB încorporată)
Deși matricea RGB este atașată la placa ESP32-S3, pinul de date trebuie totuși definit în cod:

#define MATRIX_PIN 14
GPIO 14 este folosit în mod obișnuit pe plăcile cu matrice RGB ESP32-S3. Dacă varianta plăcii tale folosește un pin diferit, actualizează această valoare.
SSID-ul și parola Wi-Fi (sensibile la majuscule)
Înlocuiește credențialele Wi-Fi cu detaliile propriei rețele:
const char* WIFI_SSID = "your WIFI";
const char* WIFI_PASSWORD = "passW0rd";
Important: SSID-urile Wi-Fi sunt sensibile la majuscule. Un SSID numit "Book" nu este același cu "book". Dacă majusculele nu se potrivesc exact, ESP32-S3 nu se va putea conecta.
Server NTP, fus orar și ora de vară
Ceasul sincronizează ora folosind un server NTP de pe internet:
const char* ntpServer = "pool.ntp.org";
Ora locală este calculată folosind aceste decalaje:
// Toronto-ish: UTC-5, plus 1 oră DST
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_sec: decalajul UTC în secunde (exemplu: UTC-5 =-5 * 3600)daylightOffset_sec: folosește3600dacă ora de vară este activă, sau0dacă nu este folosită
Aceste valori sunt aplicate folosind:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Luminozitate automată zi / noapte
Luminozitatea se schimbă automat în funcție de ora curentă:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;
Între 22:00 și 6:00, matricea se diminuează pentru a reduce strălucirea. În timpul orelor de zi, luminozitatea normală este restabilită.
Efect de culoare curcubeu
Acest proiect folosește o roată clasică de culori RGB pentru a genera culori curcubeu line. Fiecare caracter este desenat cu un decalaj de culoare ușor diferit, iar culorile se schimbă în timp, producând o animație fluidă de curcubeu.
// Helper pentru a crea culori curcubeu
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);
}
Pe măsură ce textul defilează, fiecare caracter avansează prin spectrul RGB, creând un efect continuu de curcubeu care arată deosebit de impresionant pe micul afișaj 8×8.
Comportamentul afișării orei și datei
Ceasul menține buffere separate pentru oră și dată:
- Ora:
HH:MM - Data:
MMM DD(de exempluJAN 08)
Data este afișată la un interval fix:
const uint32_t dateIntervalMs = 60000; // Afișează data la fiecare 1 minut
La sfârșitul fiecărui ciclu complet de defilare, codul decide dacă să continue afișarea orei sau să treacă la dată.
Logica de defilare pe o matrice 8×8
Deoarece afișajul are doar 8 pixeli lățime, textul defilează lin de la dreapta la stânga. Odată ce textul iese complet de pe ecran, cursorul se resetează și următorul conținut (ora sau data) este încărcat pentru următoarea trecere.
Demonstrație
După încărcarea schiței și alimentarea plăcii prin USB-C:
- ESP32-S3 se conectează la rețeaua ta Wi-Fi
- Ora este sincronizată de pe internet
- Ora defilează în format
HH:MM - Data apare periodic
- Tot textul este redat cu un efect animat lin de curcubeu
- Afișajul se diminuează automat noaptea și se luminează ziua
Descărcări și linkuri
Codul sursă complet este furnizat mai jos în acest articol. Instrumente utile și referințe, inclusiv selectorul de culori RGB, sunt, de asemenea, legate mai jos în acest articol.
This tutorial is part of: Matrice LED RGB ESP32-S3
- Proiect ESP32-S3 cu Matrice LED RGB 1 - Punct de bază
- Proiect ESP32-S3 cu Matrice LED RGB 2 - Text Derulant
- Proiect 3 cu matrice LED RGB ESP32-S3 - Text de pe telefonul mobil
- Proiect ESP32-S3 cu matrice LED RGB 4 - Punct de înclinare
- Proiect ESP32-S3 cu matrice LED RGB 5 - Săgeata mereu în sus
- Proiect Matrice LED RGB ESP32-S3 6 - Joc Cible
- Proiect de ceas Wi-Fi + NTP cu matrice LED RGB ESP32-S3 -1 Ceas de bază
- Proiect de ceas cu matrice LED RGB ESP32-S3 conectat la internet - Afișaj de oră și dată în 2 ceasuri multicolore
- Proiect de ceas cu matrice LED RGB ESP32-S3 conectat la internet - 3 culori de noapte cu dată
- Proiect de ceas internet cu matrice LED RGB ESP32-S3 - 4 culori aleatorii
- 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();
}
}
Resurse și referințe
-
Video
-
Internă🎨 Color picker Toolrobojax.com
Fișiere📁
Fișier Fritzing
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB