این آموزش بخشی است از: ماتریس LED RGB مدل ESP32-S3
پروژه جالبی برای ایجاد کاربردهای سرگرمکننده و کاربردی با استفاده از ماژول ماتریس RGB ESP32-S3. لینک سایر ویدیوها در زیر این مقاله آمده است.
پروژه ساعت اینترنتی ماتریس LED RGB ESP32-S3 - ۵ رنگ رنگین کمان
ساعت اینترنتی ESP32-S3 با افکت رنگین کمان
این پروژه یک ساعت اینترنتی ماتریس RGB با ESP32-S3 است که به Wi-Fi متصل میشود، زمان محلی را از یک سرور NTP همزمان میکند و زمان را در حال حرکت نشان میدهد.HH:MMدر قالب ماتریس RGB NeoMatrix 8×8 داخلی. بر خلاف نسخههای رنگی ثابت یا تصادفی، این ساعت از یک انتقال نرم استفاده میکند.اثر رنگین کمانکه هر حرف به طور مداوم در طیف RGB جابجا میشود در حین اینکه به سمت پایین میچرخد. ساعت همچنین به طور دورهای تاریخ را نمایش میدهد و به طور خودکار روشنایی را بین روز و شب تنظیم میکند.

چگونه این ساعت کار میکند
پس از اتصال به USB-C، ESP32-S3 به شبکه Wi-Fi شما متصل میشود و زمان محلی فعلی را از اینترنت دریافت میکند. نمایشگر معمولاً زمان را نشان میدهد، اما در فواصل مشخص به نمایش تاریخ تغییر حالت میدهد. هم زمان و هم تاریخ با استفاده از یک افکت رنگین کمانی دینامیک نمایش داده میشوند که یک نمایش زنده و متحرک را بر روی ماتریس کوچک ۸×۸ ایجاد میکند.
کتابخانههای مورد استفاده
اسکچ به کتابخانههای زیر تکیه دارد:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>نصب کنیدآدافرایت نئو ماتریساستفاده از مدیریت کتابخانه آردوینو. وابستگیهای آن، از جملهAdafruit GFX LibraryوAdafruit NeoPixelبه طور خودکار نصب خواهد شد.

پیکربندی مهم کاربر
پایه داده ماتریس (ماتریس RGB داخلی)
هرچند ماتریس RGB به برد ESP32-S3 متصل است، اما پایه داده هنوز باید در شِفر (کود) تعریف شود:

#define MATRIX_PIN 14پایه GPIO 14 معمولاً در بردهای ماتریس RGB ESP32-S3 استفاده میشود. اگر نوع برد شما از پایه متفاوتی استفاده میکند، این مقدار را بهروز کنید.
SSID و رمز عبور Wi-Fi (حساس به بزرگی و کوچکی حروف)
جزییات شبکه خود را با اطلاعات اعتبار Wi-Fi خود جایگزین کنید:
const char* WIFI_SSID = "your WIFI";
const char* WIFI_PASSWORD = "passW0rd";مهم:SSIDهای Wi-Fi عبارتند ازحساس به حروف بزرگ و کوچک. یک SSID به نام"Book"یکسان نیست با"book"اگر حروف بزرگ و کوچک دقیقاً مطابقت نداشته باشند، ESP32-S3 قادر به اتصال نخواهد بود.
سرور NTP، منطقه زمانی و ساعت تابستانی
ساعت زمان را با استفاده از سرور NTP اینترنت هماهنگ میکند:
const char* ntpServer = "pool.ntp.org";زمان محلی با استفاده از این اختلافها محاسبه میشود:
// Toronto-ish: UTC-5, plus 1 hour DST
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;gmtOffset_sec: اختلاف زمانی در ثانیه (مثال: UTC-5 =-5 * 3600)daylightOffset_secاستفاده کنید3600اگر DST فعال است، یا0اگر استفاده نشود
این مقادیر با استفاده از:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);تنظیم خودکارBrightness روز / شب
روشنایی به طور خودکار بر اساس ساعت فعلی تغییر میکند:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;بین ساعت ۱۰ شب تا ۶ صبح، ماتریس کم نور میشود تا تابش خیره کننده کاهش یابد. در ساعات روز، روشنایی عادی بازگردانده میشود.
اثر رنگین کمان
این پروژه از یک چرخ رنگ RGB کلاسیک استفاده میکند تا رنگهای رنگینکمانی روانی تولید کند. هر شخصیت با یک تغییر رنگ کمی متفاوت طراحی شده است و رنگها در طول زمان تغییر میکنند و یک انیمیشن رنگینکمانی جاری ایجاد میکنند.
// 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);
}با حرکت متن، هر خصیصه در طیف RGB پیش میرود و اثر رنگینکمان مداومی ایجاد میکند که بهویژه بر روی صفحه نمایش کوچک ۸×۸ به طرز چشمگیری به نظر میرسد.
رفتار نمایش زمان و تاریخ
ساعت حافظههای جداگانهای برای زمان و تاریخ نگه میدارد:
- زمان:
HH:MM - تاریخ:
MMM DD(برای مثالJAN 08)
تاریخ در یک بازه ثابت نمایش داده میشود:
const uint32_t dateIntervalMs = 60000; // Show date every 1 minuteدر پایان هر چرخه کامل اسکرول، شِفر (کود) تصمیم میگیرد که آیا به نمایش زمان ادامه دهد یا به تاریخ منتقل شود.
منطق اسکرول در یک ماتریس ۸×۸
به دلیل اینکه نمایشگر تنها 8 پیکسل عرض دارد، متن به آرامی از راست به چپ حرکت میکند. زمانی که متن کاملاً از صفحه خارج شد، نشانگر بازنشانی میشود و محتوای بعدی (زمان یا تاریخ) برای دور بعدی بارگذاری میشود.
مظاهرات
پس از بارگذاری طرح و تأمین برق برد از طریق USB-C:
- ESP32-S3 به شبکه Wi-Fi شما متصل میشود.
- زمان از اینترنت همزمانسازی شده است
- زمان به جلو میغلتد
HH:MMفرمت - تاریخ بهطور دورهای نمایش داده میشود.
- تمام متن با یک اثر رنگین کمان متحرک و نرم نمایش داده میشود.
- نمایش به طور خودکار در شب کم نور میشود و در طول روز روشنتر میشود.
دانلودها و واصلها
شِفر (کود) منبع کامل در زیر این مقاله ارائه شده است. ابزارها و منابع مفید، از جمله انتخابگر رنگ RGB، نیز در زیر این مقاله واصل شدهاند.
این آموزش بخشی از: ماتریس LED RGB مدل ESP32-S3
- پروژههای ماتریس LED رنگی ESP32-S3 (بازی کجشدن، متن، پیکان، دموی وایفای)
- پروژه ماتریس LED RGB ESP32-S3 2 - متن متحرک
- پروژه ماتریس LED RGB ESP32-S3 3 - متن از تلفن همراه
- پروژه ماتریس LED RGB ESP32-S3 4 - نقطه کج
- پروژه ماتریس LED RGB ESP32-S3 ۵ - پیکان همیشه به سمت بالا
- پروژه ماتریس LED RGB ESP32-S3 6 - بازی Cible
- پروژه ساعت پایه ESP32-S3 ماتریس LED RGB با Wi-Fi + ساعت زمان NTP -1
- پروژه ساعت اینترنتی ماتریس LED RGB ESP32-S3 - نمایش زمان و تاریخ چند رنگ 2 ساعته
- پروژه ساعت اینترنتی ماتریس LED RGB ESP32-S3 - ۳ رنگ شب با تاریخ
- پروژه ساعت اینترنتی ماتریس LED RGB ESP32-S3 - ۴ رنگ تصادفی
- آزمایش ماتریس LED RGB ESP32-S3 برای تنظیم RGB و GRB
/*
* =====================================================================================
* 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();
}
}
منابع و مراجع
-
ویدیو
-
داخلیابزار انتخاب رنگrobojax.com
فایلها📁
فایل فریزینگ
-
قطعه فریتزینگ esp32-S3-supermini-tht
esp32-S3-supermini-tht.fzpz0.02 MB