Ten poradnik jest częścią: Matryca LED RGB ESP32-S3
Fajny projekt do stworzenia dla zabawy i praktycznych zastosowań z wykorzystaniem modułu matrycy RGB ESP32-S3. Linki do innych filmów znajdują się poniżej tego artykułu.
Projekt zegara internetowego z matrycą LED RGB ESP32-S3 - 3 kolory nocne z datą
Zegar internetowy ESP32-S3 RGB NeoMatrix z automatyczną jasnością dzień/noc
Ten projekt to zegar internetowy ESP32-S3 RGB Matrix, który automatycznie dostosowuje jasność w ciągu dnia i nocy. ESP32-S3 łączy się z Wi-Fi, synchronizuje aktualny czas z serwera NTP i przewija czas w formacie HH:MM przez matrycę 8×8 RGB NeoMatrix. Zegar obsługuje również stałe lub cyklicznie zmieniające się kolory RGB dla tekstu wyświetlacza.

Co robi ten zegar
Po włączeniu zasilania ESP32-S3 łączy się z siecią Wi-Fi i pobiera aktualny czas lokalny z internetu. Czas płynnie przewija się przez matrycę LED. W godzinach nocnych wyświetlacz automatycznie przyciemnia się do niższej jasności, a w ciągu dnia wraca do jaśniejszego poziomu.
Użyte biblioteki
Ten szkic używa następujących bibliotek:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
Zainstaluj Adafruit NeoMatrix z Menedżera bibliotek Arduino. Wszystkie wymagane zależności, takie jak Adafruit GFX Library i Adafruit NeoPixel, zostaną zainstalowane automatycznie.

Ważna konfiguracja użytkownika
Nazwa SSID i hasło Wi-Fi (rozróżniane są wielkie i małe litery)
Zastąp następujące wartości własnymi danymi logowania do Wi-Fi:

const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
Ważne: Nazwy SSID Wi-Fi są rozróżniane pod względem wielkości liter. Nazwa SSID "Book" nie jest taka sama jak "book". Jeśli wielkość liter nie będzie dokładnie zgodna, ESP32 nie połączy się.
Serwer NTP, strefa czasowa i czas letni
Zegar synchronizuje czas za pomocą następującego serwera NTP:
const char* ntpServer = "pool.ntp.org";
Czas lokalny jest obliczany przy użyciu tych przesunięć:
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_secokreśla przesunięcie względem UTC w sekundachdaylightOffset_secdodaje jedną godzinę, gdy obowiązuje czas letni (użyj0, jeśli nie jest potrzebny)
Te wartości są stosowane za pomocą:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Automatyczna jasność dzień / noc
Jasność wyświetlacza zmienia się automatycznie w zależności od bieżącej godziny:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22; // 22:00
const int NIGHT_END_HOUR = 6; // 6:00
Między 22:00 a 6:00 jasność matrycy jest zmniejszana, aby zapewnić komfort w ciemnym otoczeniu. Poza tymi godzinami przywracana jest pełna jasność dzienna. Możesz dostosować te wartości do oświetlenia w swoim pomieszczeniu.
Konfiguracja kolorów RGB
Kolor tekstu zegara jest definiowany za pomocą wartości RGB (czerwony, zielony, niebieski), gdzie każdy kanał ma zakres od 0 do 255. Wiele kolorów można przechowywać w tablicy i automatycznie cyklicznie zmieniać:
uint8_t userColors[][3] = {
{17, 43, 171}, // Jasnoniebieski
{255, 0, 0}, // Czerwony
{0, 255, 0}, // Zielony
{255, 165, 0}, // Pomarańczowy
{255, 0, 255} // Magenta
};
Jeśli useFixedColor jest ustawione na true, zegar zawsze używa jednego koloru. Jeśli ustawione na false, kolor automatycznie zmienia się po każdym pełnym przewinięciu czasu.
Aby szybko znaleźć dokładne wartości RGB dla dowolnego koloru, użyj narzędzia do wyboru kolorów RGB: Wybór koloru .
Wyświetlanie czasu i przewijanie
Aktualny czas jest formatowany jako HH:MM i przechowywany w małym buforze znaków. Ponieważ wyświetlacz ma tylko 8 pikseli szerokości, tekst płynnie przewija się od prawej do lewej. Gdy czas całkowicie opuści wyświetlacz, wybierany jest następny kolor (jeśli włączony) na kolejne przejście.
Demonstracja
Po wgraniu szkicu:
- ESP32-S3 łączy się z Wi-Fi
- Czas jest synchronizowany z internetu
- Aktualny czas przewija się przez matrycę RGB
- Jasność automatycznie zmienia się między dniem a nocą
- Kolor tekstu pozostaje stały lub zmienia się cyklicznie zgodnie z ustawieniami
Pliki do pobrania i linki
Pełny kod źródłowy znajduje się poniżej tego artykułu. Linki do części, narzędzi i kart katalogowych są dostępne poniżej tego artykułu.
Ten poradnik jest częścią: Matryca LED RGB ESP32-S3
- ESP32-S3 RGB LED Matrix Project 1- Basic Dot
- ESP32-S3 RGB LED Matrix Project 2 - Scrolling Text
- ESP32-S3 RGB LED Matrix Project 3 - Text from mobile phone
- ESP32-S3 RGB LED Matrix Project 4 - Tilt dot
- ESP32-S3 RGB LED Matrix Project 5 - Arrow always up
- ESP32-S3 RGB LED Matrix Project 6 - Cible game
- ESP32-S3 RGB LED Matrix Wi-Fi + NTP Time Clock Project -1 Basic Clock
- ESP32-S3 RGB LED Matrix Internet Clock Project - 2 Clock multi color Time & Date Display
- Projekt zegara internetowego z matrycą LED RGB ESP32-S3 - 5 kolorów tęczy
- Projekt zegara internetowego z matrycą LED RGB ESP32-S3 - 4 losowe kolory
- ESP32-S3 RGB LED Matrix test for RGB, GRB setting
/*
* =====================================================================================
* ESP32-S3 INTERNET RGB CLOCK (8x8 Matrix) - Project 3- Night color with Date
* =====================================================================================
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT840
* Author: Gemini (AI Thought Partner) & 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 after the time finishes a full scroll.
* 3. Auto-Brightness: Dims the LEDs during night hours (User-configurable).
* =====================================================================================
*/
#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; // 10 PM
const int NIGHT_END_HOUR = 6; // 6 AM
// --- 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]);
// --- INTERVALS ---
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";
int16_t scrollX = 8;
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
void updateTimeText() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return;
// Format HH:MM
snprintf(timeText, sizeof(timeText), "%02d:%02d", timeinfo.tm_hour, timeinfo.tm_min);
// Apply Auto-Brightness
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);
// Pick the color (Fixed or Cycle)
int idx = useFixedColor ? fixedColorIndex : currentColorIndex;
matrix.setTextColor(matrix.Color(userColors[idx][0], userColors[idx][1], userColors[idx][2]));
matrix.setCursor(scrollX, 0);
matrix.print(timeText);
matrix.show();
scrollX--;
// Width for "HH:MM" is roughly 30 pixels
int16_t textWidth = 30;
// TRIGGER: When time is fully off-screen
if (scrollX < -textWidth) {
scrollX = matrix.width(); // Reset position to right side
// Cycle to the next color in the array for the next pass
if (!useFixedColor) {
currentColorIndex = (currentColorIndex + 1) % totalColors;
Serial.print("Next cycle color index: ");
Serial.println(currentColorIndex);
}
}
}
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);
updateTimeText();
}
void loop() {
unsigned long now = millis();
// Update time digits and brightness once per second
if (now - lastTimeUpdateMs >= timeUpdateIntervalMs) {
lastTimeUpdateMs = now;
updateTimeText();
}
// Handle the scrolling animation
if (now - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = now;
scrollTime();
}
}
Rzeczy, których możesz potrzebować
-
Amazon
-
Allegro
-
AliExpressPurchase ESP32-S3 RGB Matrix from AliExpresss.click.aliexpress.com
-
AliExpressPurchase ESP32-S3 RGB Matrix from AliExpress (2)s.click.aliexpress.com
Zasoby i odniesienia
-
Wideo
-
Wewnętrzny🎨 Color picker Toolrobojax.com
Pliki📁
Plik Fritzing
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB