هذا الدليل جزء من: مصفوفة مصابيح LED RGB من نوع ESP32-S3
مشروع رائع يمكنك تنفيذه لأغراض ترفيهية وعملية باستخدام وحدة ESP32-S3 RGB Matrix. تجد روابط لفيديوهات أخرى أسفل هذه المقالة.
مشروع ساعة الإنترنت لشاشة مصفوفة LED RGB ESP32-S3 - عرض الوقت والتاريخ متعدد الألوان 2 ساعة
ساعة إنترنت ESP32-S3 مع شاشة تاريخ ووقت RGB NeoMatrix
هذا المشروع هو ساعة إنترنت معززة من نوع ESP32-S3 RGB Matrix، لا تعرض الوقت الحالي فحسب، بل تعرض أيضًا التاريخ بشكل دوري. يتصل ESP32-S3 بشبكة Wi-Fi، ويزامن الوقت من خادم NTP، ويدور إماHH:MMأو التاريخ (على سبيل المثالSEP 21) عبر شاشة 8×8 RGB NeoMatrix. تدعم الشاشة التحكم التلقائي في سطوع النهار/الليل وألوان RGB القابلة للتخصيص.

ماذا تفعل هذه الساعة
بعد الاتصال بشبكة الواي فاي الخاصة بك، يقوم ESP32-S3 بجلب الوقت المحلي الحالي من الإنترنت. عادةً ما يقوم الساعت بالتبديل بين الأوقات، ولكن في فترات ثابتة ينتقل لعرض التاريخ. يمكن تثبيت لون النص على لون واحد أو التبديل تلقائيًا بين ألوان متعددة يحددها المستخدم. يتم تقليل السطوع تلقائيًا في الليل لجعل العرض أكثر راحة للعينين.
المكتبات المستخدمة
يعتمد هذا الرسم التخطيطي على المكتبات التالية:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>تثبيتأدافروت نيو ماتريكسمن مدير مكتبة أردوينو. جميع التبعيات المطلوبة مثلAdafruit GFX LibraryوAdafruit NeoPixelسيتم تثبيته تلقائيًا.

تكوين المستخدم الهام
اسم شبكة الواي فاي وكلمة المرور (حساسة لحالة الأحرف)
يجب عليك استبدال بيانات اعتماد الواي فاي بمعلومات الشبكة الخاصة بك:

const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";مهم:تكون أسماء شبكات الواي فايحساس لحالة الأحرف. على سبيل المثال، 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لـ DST أو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
تدعم الساعة كلاً من وضع اللون الثابت ودورة الألوان التلقائية. تُخزن الألوان بتعريف المستخدم في مصفوفة:
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وتم تخزينه في مخزن صغير للحروف. يتم تنسيق التاريخ كسلسلة أحرف كبيرة مثلSEP 21تتحول الشاشة تلقائيًا بين الوقت والتاريخ على فترات ثابتة.
منطق التمرير على شاشة 8×8
لأن مصفوفة 8×8 صغيرة جدًا لعرض النص الكامل دفعة واحدة، فإن الرسم يت scroll النص أفقيًا. بمجرد مغادرة النص بالكامل العرض، يتم تحديث اللون ويت switches المحتوى بين الوقت والتاريخ عند الحاجة.
عرض
بعد رفع الرسم التخطيطي:
- يتصل ESP32 بشبكة الواي فاي
- يتم مزامنة الوقت من الإنترنت
- تسير الساعة الحالية عبر المصفوفة
- تظهر التاريخ بشكل دوري
- يتم ضبط السطوع تلقائيًا حسب الليل والنهار.
التنزيلات والروابط
تم توفير الكود المصدر الكامل أدناه هذه المقالة. الروابط إلى الأجزاء والأدوات ونشرات البيانات متاحة أيضًا أدناه هذه المقالة.
هذا الدليل هو جزء من: مصفوفة مصابيح 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 5 - السهم دائما لأعلى
- مشروع مصفوفة LEDs RGB ESP32-S3 6 - لعبة Cible
- مشروع ساعة بتوقيت NTP + Wi-Fi لمصفوفة LED RGB ESP32-S3 -1 ساعة أساسية
- مشروع ساعة الإنترنت لمصفوفة LED RGB ESP32-S3 - 3 ألوان ليلية مع التاريخ
- مشروع ساعة إنترنت مصفوفة LED RGB ESP32-S3 - 5 ألوان قوس قزح
- مشروع ساعة الإنترنت لشبكة مصفوفة LEDs RGB ESP32-S3 - 4 ألوان عشوائية
- اختبار مصفوفة LED RGB 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();
}
}
الأشياء التي قد تحتاجها
-
أمازون
-
إي باي
-
علي إكسبريساشترِ مصفوفة RGB ESP32-S3 من علي إكسبريسs.click.aliexpress.com
-
علي إكسبريسشراء مصفوفة RGB ESP32-S3 من علي إكسبريس (2)s.click.aliexpress.com
الموارد والمراجع
-
فيديو
ملفات📁
Fritzing File
-
جزء فريتزنج esp32-S3-supermini-tht
esp32-S3-supermini-tht.fzpz0.02 MB