Этот учебник является частью: ESP32-S3 RGB LED матрица
Замечательный проект для создания развлекательных и практических приложений с использованием модуля RGB-матрицы ESP32-S3. Ссылки на другие видеоролики находятся ниже этой статьи.
Проект интернет-часы с матрицей RGB LED на ESP32-S3 - 4 случайных цвета
Часы с интернетом на базе ESP32-S3 с случайными RGB цветами
Этот проект представляет собой интернет-часы на базе RGB-матрицы ESP32-S3, которые подключаются к Wi-Fi, синхронизируют местное время с NTP-сервера и прокручивают время вHH:MMформате на встроенном 8×8 RGB NeoMatrix. В этой версии часы, двоеточие и минуты отображаются вслучайные цветавыбран на каждом полном цикле прокрутки, создавая динамичное и игривое отображение часов, которое постоянно меняется.

Как работает эти часы
После подачи питания на плату через USB-C ESP32-S3 подключается к вашей Wi-Fi сети и получает текущее местное время из интернета. Время делится на три части: часы, двоеточие и минуты, и каждая часть отображается отдельно на RGB-матрице. Когда текст полностью уходит с экрана, для следующего прохода выбираются новые случайные цвета.
Используемые библиотеки
Этот скетч использует следующие библиотеки:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>УстановитьAdafruit NeoMatrixиз Диспетчера библиотек Arduino. Необходимые зависимости, такие какAdafruit GFX LibraryиAdafruit NeoPixelбудет установлено автоматически.

Важная конфигурация пользователя
Матрица данных пина (встроенная RGB матрица)
Хотя RGB-матрица интегрирована на плате, вывод данных все равно должен быть определен в коде:

#define MATRIX_PIN 14GPIO 14 обычно используется на платах RGB матрицы ESP32-S3. Если ваша версия платы использует другой вывод, обновите это значение соответственно.
SSID и пароль Wi-Fi (регистрозависимые)
Замените данные Wi-Fi на информацию о вашей сети:
const char* WIFI_SSID = "your WiFi SSID";
const char* WIFI_PASSWORD = "passW0rd";Важно:Wi-Fi SSID-ы этос учетом регистра. SSID с именем"Book"не то же самое, что"book"Если регистр букв не совпадает точно, ESP32-S3 не сможет подключиться.
Сервер NTP, часовой пояс и переход на летнее время
Синхронизация времени осуществляется с использованием интернет-сервера NTP:
const char* ntpServer = "pool.ntp.org";Местное время рассчитывается с использованием UTC и коэффициентов перехода на летнее время:
// Toronto-ish: UTC-5, plus 1 hour DST
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;gmtOffset_secUTC смещение в секундах (откорректируйте для вашего местоположения)daylightOffset_secИспользовать3600когда действует переход на летнее время, или0иначе
Эти настройки применяются с помощью:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);Автоматическая регулировка яркости днем / ночью
Часы автоматически регулируют яркость в зависимости от текущего часа:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;С 10 вечера до 6 утра дисплей тускнеет, чтобы уменьшить блики в темной обстановке. В дневное время матрица возвращается к нормальной яркости.
Случайное поведение RGB-цвета
Заранее определённый список RGB-цветов хранится в массиве, где каждый цвет задаётся значениями красного, зелёного и синего, варьирующимися от 0 до 255:
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
};На каждом полном цикле прокрутки:
- Тотцифры часовназначается случайный цвет
- Тотдвоеточиеполучает другой случайный цвет
- Тотминутные цифрыполучить другой случайный цвет
Это создает постоянно меняющуюся цветовую комбинацию, которая делает часы визуально интересными. Чтобы создать свои собственные нестандартные цвета, вы можете воспользоваться инструментом выбора цвета RGB:RGB цветовой выборщик.
Логика рендеринга времени
Время делится на три компонента:
- Часы:
HH - Двоеточие:
: - Минуты:
MM
Каждая часть рисуется индивидуально, так что она может иметь свой собственный цвет, в то время как все части движутся вместе, образуя плавную прокручиваемую анимацию на дисплее 8×8.
Случайная генерация цвета
Чтобы обеспечить случайность цвета, эскиз инициализирует генератор случайных чисел при запуске с помощью неподключенного аналогового вывода:
randomSeed(analogRead(0));Это гарантирует, что цветовые комбинации разные на каждом усилении и в каждом цикле прокрутки.
Демонстрация
После загрузки эскиза и питания платы через USB-C:
- ESP32-S3 подключается к вашей Wi-Fi сети.
- Время синхронизируется из интернета.
- Время скользит вперёд.
HH:MMформат - Часы, двоеточие и минуты меняют цвет на случайный в каждом цикле.
- Экран автоматически затемняется ночью.
Загрузки и ссылки
Полный исходный код приведен ниже этой статьи. Полезные инструменты и ссылки находятся ниже этой статьи.
Этот учебник является частью: ESP32-S3 RGB LED матрица
- Проект матрицы RGB LED ESP32-S3 1 - Основной штрих
- Проект RGB LED матрицы ESP32-S3 2 - Прокручиваемый текст
- Проект RGB LED матрицы ESP32-S3 3 - Текст с мобильного телефона
- Проект RGB LED матрицы ESP32-S3 4 - Наклоненная точка
- Проект матрицы RGB LED на ESP32-S3 5 - Стрелка всегда вверх
- Проект матрицы RGB LED ESP32-S3 6 - Игра цель
- ESP32-S3 RGB LED матрица Wi-Fi + NTP проект часы - 1 базовые часы
- ESP32-S3 RGB светодиодная матрица Интернет-часы - 2-часовой многоцветный дисплей времени и даты
- Проект интернет-часов на матрице RGB LED ESP32-S3 - 3 ночных цвета с датой
- Проект интернет-часов на матрице RGB LED ESP32-S3 - 5 радуга цветов
- Тест матрицы RGB LED ESP32-S3 для настройки RGB, GRB
/*
* =====================================================================================
* ESP32-S3 INTERNET RGB CLOCK (8x8 Matrix) - Project 4- Random Color
* =====================================================================================
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT843
* 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).
* =====================================================================================
*/
/*
* =====================================================================================
* ESP32-S3 INTERNET CLOCK - MULTI-COLOR ELEMENTS
* =====================================================================================
* Each part of the time (HH : MM) gets a different random color from your list.
* Colors only change once the full scroll cycle is finished.
* =====================================================================================
*/
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define MATRIX_PIN 14
// --- CONFIGURATION ---
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}, // 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
};
int totalColors = sizeof(userColors) / sizeof(userColors[0]);
// Variables to store the current random color indices
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;
// 👇 REPLACE these with your real home WiFi name & password
const char* WIFI_SSID = "your WiFi SSID";
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
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. Draw Hours
matrix.setTextColor(matrix.Color(userColors[hourColorIdx][0], userColors[hourColorIdx][1], userColors[hourColorIdx][2]));
matrix.setCursor(x, 0);
matrix.print(hourText);
x += 12; // Move 12 pixels (2 digits * 6px)
// 2. Draw Colon
matrix.setTextColor(matrix.Color(userColors[colonColorIdx][0], userColors[colonColorIdx][1], userColors[colonColorIdx][2]));
matrix.setCursor(x, 0);
matrix.print(":");
x += 6; // Move 6 pixels
// 3. Draw Minutes
matrix.setTextColor(matrix.Color(userColors[minColorIdx][0], userColors[minColorIdx][1], userColors[minColorIdx][2]));
matrix.setCursor(x, 0);
matrix.print(minText);
matrix.show();
scrollX--;
// Total width is roughly 30 pixels (HH=12, :=6, MM=12)
if (scrollX < -30) {
scrollX = matrix.width();
// Pick NEW random colors for the next cycle
hourColorIdx = random(0, totalColors);
colonColorIdx = random(0, totalColors);
minColorIdx = random(0, totalColors);
}
}
void setup() {
Serial.begin(115200);
// Seed the random generator using an unconnected analog pin
randomSeed(analogRead(0));
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(500);
// 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);
}
void loop() {
if (millis() % 1000 == 0) updateTimeParts();
if (millis() - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = millis();
scrollTime();
}
}
Ресурсы и ссылки
-
Внутренний🎨 Инструмент выбора цветаrobojax.com
Файлы📁
Файл Fritzing
-
esp32-S3-supermini-tht часть фритзинга
esp32-S3-supermini-tht.fzpz0.02 MB