This tutorial is part of: ESP32-S3 RGB LED ማትሪክስ
አስደሳች እና ተግባራዊ አፕሊኬሽኖችን ለመፍጠር የESP32-S3 RGB ማትሪክስ ሞጁልን በመጠቀም አሪፍ ፕሮጀክት። ወደ ሌሎች ቪዲዮዎች የሚወስዱ አገናኞች ከዚህ ጽሑፍ በታች ይገኛሉ።
የESP32-S3 RGB LED ማትሪክስ የበይነመረብ ሰዓት ፕሮጀክት - 2 ሰዓት ባለብዙ ቀለም ጊዜ እና ቀን ማሳያ
የESP32-S3 RGB NeoMatrix የበይነመረብ ሰዓት ከሰዓት እና ቀን ማሳያ ጋር
ይህ ፕሮጀክት የተሻሻለ የESP32-S3 RGB Matrix የበይነመረብ ሰዓት ሲሆን የአሁኑን ሰዓት ብቻ ሳይሆን በየጊዜው ቀኑንም ያሳያል። 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 Library Manager ይጫኑ። እንደ Adafruit GFX Library እና Adafruit NeoPixel ያሉ ሁሉም አስፈላጊ ጥገኞች በራስ-ሰር ይጫናሉ።

አስፈላጊ የተጠቃሚ ውቅር
የWi-Fi SSID እና የይለፍ ቃል (ትልቅ/ትንሽ ፊደል ስሱ ነው)
የWi-Fi ማረጋገጫዎችን በራስዎ የአውታረ መረብ መረጃ መተካት አለብዎት፦

const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
አስፈላጊ፦ የWi-Fi SSIDዎች ትልቅ/ትንሽ ፊደል ስሱ ናቸው። ለምሳሌ፣ "Book" የተባለ SSID ከ"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፦ ለDST3600ይጠቀሙ ወይም 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 ቀለም ውቅር
ሰዓቱ ሁለቱንም ቋሚ ቀለም ሁነታ እና አውቶማቲክ የቀለም ሽክርክሪት ይደግፋል። በተጠቃሚ የተገለጹ RGB ቀለሞች በድርድር ውስጥ ይቀመጣሉ፦
uint8_t userColors[][3] = {
{17, 43, 171}, // ይላም ሰማያዊ
{255, 0, 0}, // ቀይ
{0, 255, 0}, // አረንጓዴ
{255, 165, 0}, // ብርቱካናማ
{255, 0, 255} // ማጀንታ
};
እ প্রতিটি ቀለም ከ0 እስከ 255 የሚደርሱ RGB (ቀይ፣ አረንጓዴ፣ ሰማያዊ) እሴቶችን ይጠቀማል። እነዚህን ቁጥሮች በመቀየር ለማሳያው ማንኛውንም ቀለም መፍጠር ይችላሉ። useFixedColor ወደ true ከተቀናበረ፣ ሰዓቱ ሁልጊዜ አንድ ቀለም ይጠቀማል። ወደ false ከተቀናበረ፣ ቀለሙ ከእያንዳንዱ ሙሉ ሽክርክሪት በኋላ በራስ-ሰር ይቀየራል።
ለማንኛውም ለሚፈልጉት ቀለም ትክክለኛ የRGB እሴቶችን በፍጥነት ለማግኘት፣ የRGB Color Picker መሣሪያን Color Picker ይጠቀሙ።
የሰዓት እና የቀን ቅርጸት
ሰዓቱ እንደ HH:MM ተቀርጾ በትንሽ የቁምፊ ቋት ውስጥ ይቀመጣል። ቀኑ እንደ SEP 21 ባለ ትልቅ ፊደል ሕብረቁምፊ ተቀርጾ ይታያል። ማሳያው በተወሰነ ጊዜ በሰዓት እና በቀን መካከል በራስ-ሰር ይቀያየራል።
በ8×8 ማሳያ ላይ የማሽከርከር አመክንዮ
8×8 ማትሪክስ ሙሉውን ጽሑፍ በአንድ ጊዜ ለማሳየት በጣም ትንሽ ስለሆነ፣ ስኬቹ ጽሑፉን በአግድም ያሽከረክራል። ጽሑፉ ሙሉ በሙሉ ከማሳያው ከወጣ በኋላ፣ ቀለሙ ይዘመናል እና ይዘቱ አስፈላጊ ሲሆን በሰዓት እና በቀን መካከል ይቀያየራል።
ማሳያ
ስኬቹን ከጫኑ በኋላ፦
- ESP32 ከWi-Fi ጋር ይገናኛል
- ሰዓት ከበይነመረብ ይመሳሰላል
- የአሁኑ ሰዓት በማትሪክስ ላይ ይሽከረከራል
- ቀኑ በየጊዜው ይታያል
- ብሩህነት ለቀን እና ለሌሊት በራስ-ሰር ይስተካከላል
ውርዶች እና አገናኞች
ሙሉው የምንጭ ኮድ ከዚህ ጽሑፍ በታች ቀርቧል። የክፍሎች፣ የመሣሪያዎች እና የዳታሼቶች አገናኞችም ከዚህ ጽሑፍ በታች ይገኛሉ።
This tutorial is part of: ESP32-S3 RGB LED ማትሪክስ
- ESP32-S3 RGB LED ማትሪክስ ፕሮጀክት 1- መሰረታዊ ነጥብ
- የESP32-S3 RGB LED ማትሪክስ ፕሮጀክት 2 - የሚንቀሳቀስ ጽሑፍ
- የESP32-S3 RGB LED ማትሪክስ ፕሮጀክት 3 - ከሞባይል ስልክ የሚመጣ ጽሑፍ
- ESP32-S3 RGB LED ማትሪክስ ፕሮጀክት 4 - ዘንበል ነጥብ
- ESP32-S3 RGB LED ማትሪክስ ፕሮጀክት 5 - ቀስት ሁልጊዜ ወደ ላይ
- የESP32-S3 RGB LED ማትሪክስ ፕሮጀክት 6 - ሲብል ጨዋታ
- ESP32-S3 RGB LED ማትሪክስ ዋይ-ፋይ + NTP የሰዓት ፕሮጀክት -1 መሰረታዊ ሰዓት
- የESP32-S3 RGB LED ማትሪክስ የበይነመረብ ሰዓት ፕሮጀክት - 3 የምሽት ቀለም ከቀን ጋር
- የESP32-S3 RGB LED ማትሪክስ የበይነመረብ ሰዓት ፕሮጀክት - 5 የቀስተ ደመና ቀለም
- የESP32-S3 RGB LED ማትሪክስ የበይነመረብ ሰዓት ፕሮጀክት - 4 የዘፈቀደ ቀለም
- ESP32-S3 RGB LED Matrix test for RGB, GRB setting
/*
* =====================================================================================
* 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();
}
}
እንደሚያስፈልግዎት ይችላል
-
አማዞን
-
ኢቤይ
-
አሊኤክስፕሬስPurchase ESP32-S3 RGB Matrix from AliExpresss.click.aliexpress.com
-
አሊኤክስፕሬስPurchase ESP32-S3 RGB Matrix from AliExpress (2)s.click.aliexpress.com
ምንጮች እና ምንጮች
-
ቪዲዮ
ፋይሎች📁
ፍሪትዚንግ ፋይል
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB