Этот учебник является частью: ESP32-S3 RGB LED матрица
Замечательный проект для создания развлекательных и практических приложений с использованием модуля RGB-матрицы ESP32-S3. Ссылки на другие видеоролики находятся ниже этой статьи.
ESP32-S3 RGB светодиодная матрица Интернет-часы - 2-часовой многоцветный дисплей времени и даты
Часы Интернета на базе ESP32-S3 RGB NeoMatrix с отображением времени и даты
Этот проект представляет собой улучшенные часы с интернетом на основе RGB-матрицы ESP32-S3, которые не только показывают текущее время, но и периодически отображают дату. ESP32-S3 подключается к Wi-Fi, синхронизирует время с NTP-сервера и прокручивает либоHH:MMили дату (напримерSEP 21) по 8×8 RGB NeoMatrix. Дисплей поддерживает автоматическое управление яркостью в зависимости от времени суток и настраиваемые RGB цвета.

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

#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будет установлено автоматически.

Важная настройка пользователя
SSID и пароль Wi-Fi (регистр имеет значение)
Вы должны заменить учетные данные Wi-Fi на информацию о вашей сети:

const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";Важно:Wi-Fi SSID-ы эточувствительный к региструНапример, SSID с именем"Book"естьнето же самое как"book"Если регистр букв не совпадает точно, ESP32 не сможет подключиться.
Сервер NTP, часовой пояс и переход на летнее время
Часы используют интернет-сервер времени:
const char* ntpServer = "pool.ntp.org";Местное время рассчитывается с использованием этих смещений:
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;gmtOffset_secВаш UTC-офсет в секундах (например: UTC-5 =-5 * 3600)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-цвета хранятся в массиве:
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
};Каждый цвет использует значения RGB (Красный, Зеленый, Синий) в диапазоне от 0 до 255. Изменяя эти числа, вы можете создать практически любой цвет для дисплея. ЕслиuseFixedColorустановлено наtrue, часы всегда используют один цвет. Если установлены наfalseЦвет автоматически меняется после каждого полного прокрутки.
Чтобы быстро найти точные значения RGB для любого цвета, который вам нужен, используйте инструмент выбора цвета RGB:RGB цветовой выборщик.
Форматирование времени и даты
Время отформатировано какHH:MMи хранится в небольшом буфере символов. Дата формattируется в верхнем регистре в строку, такую какSEP 21Дисплей автоматически переключается между временем и датой через фиксированный интервал.
Логика прокрутки на дисплее 8×8
Поскольку матрица 8×8 слишком мала, чтобы охватить полный текст сразу, эскиз прокручивает текст горизонтально. Как только текст полностью покидает дисплей, обновляется цвет, а содержимое переключается между временем и датой по мере необходимости.
Демонстрация
После загрузки эскиза:
- ESP32 подключается к Wi-Fi.
- Время синхронизировано с интернетом.
- Текущее время прокручивается по матрице.
- Дата появляется периодически.
- Яркость автоматически регулируется в зависимости от дня и ночи.
Загрузки и ссылки
Полный исходный код представлен ниже этой статьи. Ссылки на части, инструменты и технические характеристики также доступны ниже этой статьи.
Этот учебник является частью: 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 базовые часы
- Проект интернет-часов на матрице RGB LED ESP32-S3 - 3 ночных цвета с датой
- Проект интернет-часов на матрице RGB LED ESP32-S3 - 5 радуга цветов
- Проект интернет-часы с матрицей RGB LED на ESP32-S3 - 4 случайных цвета
- Тест матрицы RGB LED ESP32-S3 для настройки RGB, GRB
/*
* =====================================================================================
* 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();
}
}
Вещи, которые могут вам понадобиться
-
Амазонка
-
eBay
-
АлиЭкспрессКупить ESP32-S3 RGB-матрицу на AliExpresss.click.aliexpress.com
-
АлиЭкспрессПриобретите ESP32-S3 RGB Matrix на AliExpress (2)s.click.aliexpress.com
Ресурсы и ссылки
Файлы📁
Файл Fritzing
-
esp32-S3-supermini-tht часть фритзинга
esp32-S3-supermini-tht.fzpz0.02 MB