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 cu matrice LED RGB ESP32-S3 conectat la internet - Afișaj de oră și dată în 2 ceasuri multicolore
Ceas Internet NeoMatrix RGB ESP32-S3 cu afișare a orei și datei
Acest proiect este un ceas Internet îmbunătățit cu matrice RGB ESP32-S3, care nu doar afișează ora curentă, dar afișează și data periodic. ESP32-S3 se conectează la Wi-Fi, sincronizează ora de la un server NTP și derulează fie HH:MM, fie data (de exemplu SEP 21) pe o matrice NeoMatrix RGB 8×8. Afișajul suportă control automat al luminozității zi/noapte și culori RGB personalizabile.

Ce face acest ceas
După conectarea la rețeaua ta Wi-Fi, ESP32-S3 preia ora locală curentă de pe internet. Ceasul derulează în mod normal ora, dar la un interval fix comută pentru a afișa data. Culoarea textului poate fi fixată la o singură culoare sau poate cicla automat prin mai multe culori definite de utilizator. Luminozitatea este redusă automat noaptea pentru a face afișajul mai ușor pentru ochi.
Biblioteci utilizate
Acest sketch depinde de următoarele biblioteci:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
Instalează Adafruit NeoMatrix din Arduino Library Manager. Toate dependențele necesare, cum ar fi Adafruit GFX Library și Adafruit NeoPixel, vor fi instalate automat.

Configurare importantă pentru utilizator
SSID și parola Wi-Fi (sensibile la majuscule)
Trebuie să înlocuiești credențialele Wi-Fi cu informațiile propriei rețele:

const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
Important: SSID-urile Wi-Fi sunt sensibile la majuscule. De exemplu, un SSID numit "Book" nu este același cu "book". Dacă majusculele nu se potrivesc exact, ESP32 nu se va putea conecta.
Server NTP, fus orar și ora de vară
Ceasul folosește un server de timp de pe internet:
const char* ntpServer = "pool.ntp.org";
Ora locală este calculată folosind aceste decalaje:
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_sec: Decalajul tău UTC în secunde (exemplu: UTC-5 =-5 * 3600)daylightOffset_sec: Folosește3600pentru ora de vară sau0dacă ora de vară nu este utilizată
Aceste setări sunt aplicate folosind:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Controlul luminozității (zi / noapte)
Acest proiect ajustează automat luminozitatea în funcție de ora zilei:
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, luminozitatea este redusă pentru a face afișajul mai puțin deranjant în medii întunecate. Poți ajusta aceste valori după preferințele tale.
Configurarea culorilor RGB
Ceasul suportă atât modul cu culoare fixă, cât și ciclarea automată a culorilor. Culorile RGB definite de utilizator sunt stocate într-un array:
uint8_t userColors[][3] = {
{17, 43, 171}, // Albastru deschis
{255, 0, 0}, // Roșu
{0, 255, 0}, // Verde
{255, 165, 0}, // Portocaliu
{255, 0, 255} // Magenta
};
Fiecare culoare folosește valori RGB (Roșu, Verde, Albastru) cuprinse între 0 și 255. Schimbând aceste numere, poți crea practic orice culoare pentru afișaj. Dacă useFixedColor este setat la true, ceasul folosește întotdeauna o singură culoare. Dacă este setat la false, culoarea se schimbă automat după fiecare derulare completă.
Pentru a găsi rapid valori RGB precise pentru orice culoare dorită, folosește instrumentul RGB Color Picker Color Picker .
Formatarea orei și datei
Ora este formatată ca HH:MM și stocată într-un mic buffer de caractere. Data este formatată ca un șir de caractere cu majuscule, cum ar fi SEP 21. Afișajul comută automat între oră și dată la un interval fix.
Logica de derulare pe un afișaj 8×8
Deoarece o matrice 8×8 este prea mică pentru a afișa tot textul deodată, sketch-ul derulează textul orizontal. Odată ce textul părăsește complet afișajul, culoarea este actualizată și conținutul comută între oră și dată atunci când este necesar.
Demonstrație
După încărcarea sketch-ului:
- ESP32 se conectează la Wi-Fi
- Ora este sincronizată de pe internet
- Ora curentă se derulează pe matrice
- Data apare periodic
- Luminozitatea se ajustează automat pentru zi și noapte
Descărcări și linkuri
Codul sursă complet este furnizat mai jos în acest articol. Linkuri către componente, unelte și fișe tehnice sunt, de asemenea, disponibile 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 - 3 culori de noapte cu dată
- Proiect de ceas internet cu matrice LED RGB ESP32-S3 - 5 culori curcubeu
- 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 INTERNET RGB CLOCK (8x8 Matrix) - Project 2
Multi color
* =====================================================================================
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT839
* Author: 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 when text finishes a full scroll.
* 3. Auto-Brightness: Dims the LEDs during night hours (User-configurable).
* 4. Periodic Date: Scrolls the date (e.g., "JAN 07") every 2 minutes.
* * USER CONFIGURATION GUIDE:
* -------------------------
* - WiFi: Change 'WIFI_SSID' and 'WIFI_PASSWORD' to your local network.
* - Colors: Add or remove {R, G, B} sets in the 'userColors' array.
* - Night Mode: Adjust 'NIGHT_START_HOUR' and 'NIGHT_BRIGHTNESS'.
* =====================================================================================
*/
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define MATRIX_PIN 14
// --- BRIGHTNESS CONFIGURATION ---
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;
// --- COLOR CONFIGURATION ---
bool useFixedColor = false;
int fixedColorIndex = 0;
uint8_t userColors[][3] = {
{17, 43, 171}, // Light Blue
{255, 0, 0}, // Red
{0, 255, 0}, // Green
{255, 165, 0}, // Orange
{255, 0, 255} // Magenta
};
// 👇 REPLACE these with your real home WiFi name & password
const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
int currentColorIndex = 0;
int totalColors = sizeof(userColors) / sizeof(userColors[0]);
// --- DATE/TIME INTERVALS ---
unsigned long lastDateShowMs = 0;
const uint32_t dateIntervalMs = 30000; // 2 minutes
unsigned long lastTimeUpdateMs = 0;
const uint16_t timeUpdateIntervalMs = 1000;
unsigned long lastScrollMs = 0;
const uint16_t scrollIntervalMs = 100;
// --- GLOBAL VARIABLES ---
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;
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
void updateTimeAndDate() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return;
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]);
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);
// FIXED LOGIC: Uses currentColorIndex which only changes at the end of a scroll
int idx = useFixedColor ? fixedColorIndex : currentColorIndex;
matrix.setTextColor(matrix.Color(userColors[idx][0], userColors[idx][1], userColors[idx][2]));
matrix.setCursor(scrollX, 0);
matrix.print(currentDisplayText);
matrix.show();
scrollX--;
int16_t textWidth = strlen(currentDisplayText) * 6;
// THE TRIGGER POINT: This happens only when text is fully off-screen
if (scrollX < -textWidth) {
scrollX = matrix.width();
// 1. Cycle the color now and only now
if (!useFixedColor) {
currentColorIndex = (currentColorIndex + 1) % totalColors;
}
// 2. Decide whether to switch between Time and Date
if (millis() - lastDateShowMs > dateIntervalMs) {
strcpy(currentDisplayText, dateText);
lastDateShowMs = millis();
} else {
strcpy(currentDisplayText, timeText);
}
}
}
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
matrix.begin();
matrix.setTextWrap(false);
matrix.setBrightness(DAY_BRIGHTNESS);
updateTimeAndDate();
strcpy(currentDisplayText, timeText);
}
void loop() {
unsigned long now = millis();
if (now - lastTimeUpdateMs >= timeUpdateIntervalMs) {
lastTimeUpdateMs = now;
updateTimeAndDate();
}
if (now - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = now;
scrollDisplay();
}
}
Lucruri de care ai putea avea nevoie
-
Amazon
-
eBay
-
AliExpressPurchase ESP32-S3 RGB Matrix from AliExpresss.click.aliexpress.com
-
AliExpressPurchase ESP32-S3 RGB Matrix from AliExpress (2)s.click.aliexpress.com
Resurse și referințe
-
Video
Fișiere📁
Fișier Fritzing
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB