This tutorial is part of: ESP32-S3 RGB LED ማትሪክስ
አስደሳች እና ተግባራዊ አፕሊኬሽኖችን ለመፍጠር የESP32-S3 RGB ማትሪክስ ሞጁልን በመጠቀም አሪፍ ፕሮጀክት። ወደ ሌሎች ቪዲዮዎች የሚወስዱ አገናኞች ከዚህ ጽሑፍ በታች ይገኛሉ።
የESP32-S3 RGB LED ማትሪክስ የበይነመረብ ሰዓት ፕሮጀክት - 5 የቀስተ ደመና ቀለም
የESP32-S3 የኢንተርኔት ሰዓት ከቀስተ ደመና ቀለም ውጤት ጋር
ይህ ፕሮጀክት የESP32-S3 RGB Matrix የኢንተርኔት ሰዓት ነው፣ እሱም ከWi-Fi ጋር ይገናኛል፣ የአካባቢውን ሰዓት ከNTP አገልጋይ ያመሳስላል፣ እና ሰዓቱን በHH:MM ቅርጸት በተሰራው 8×8 RGB NeoMatrix ላይ ያንቀሳቅሳል። እንደ ጠጣር ወይም የዘፈቀደ ቀለም ስሪቶች ሳይሆን፣ ይህ ሰዓት ለስላሳ የቀስተ ደመና ቀለም ውጤት ይጠቀማል፣ በዚህም እያንዳንዱ ቁምፊ በሚንቀሳቀስበት ጊዜ በRGB ስፔክትረም ውስጥ ያለማቋረጥ ይለዋወጣል። ሰዓቱ በየጊዜው ቀኑንም ያሳያል እና በቀን እና በሌሊት መካከል ብሩህነትን በራስ-ሰር ያስተካክላል።

ይህ ሰዓት እንዴት ይሰራል
በUSB-C አንዴ ኃይል ሲሰጠው፣ ESP32-S3 ከWi-Fi አውታረ መረብዎ ጋር ይገናኛል እና የአሁኑን የአካባቢ ሰዓት ከኢንተርኔት ያመጣል። ማሳያው በተለምዶ ሰዓቱን ያንቀሳቅሳል፣ ነገር ግን በተወሰነ ጊዜ ልዩነት ውስጥ ቀኑን ለማሳየት ይቀየራል። ሁለቱም ሰዓት እና ቀን ተለዋዋጭ የቀስተ ደመና ውጤት በመጠቀም ይቀርባሉ፣ ይህም በትንሿ 8×8 ማትሪክስ ላይ ሕያው እና እንቅስቃሴ ያለው ማሳያ ይፈጥራል።
ጥቅም ላይ የዋሉ ቤተ-መጻሕፍት
ስኬቹ በሚከተሉት ቤተ-መጻሕፍት ላይ የተመሰረተ ነው፦

#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ን ጨምሮ፣ በራስ-ሰር ይጫናሉ።

አስፈላጊ የተጠቃሚ ውቅር
የማትሪክስ ዳታ ፒን (የተሰራው RGB ማትሪክስ)
ምንም እንኳን RGB ማትሪክስ ከESP32-S3 ቦርድ ጋር የተያያዘ ቢሆንም፣ የዳታ ፒኑ አሁንም በኮዱ ውስጥ መገለጽ አለበት፦

#define MATRIX_PIN 14
GPIO 14 በተለምዶ በESP32-S3 RGB ማትሪክስ ቦርዶች ላይ ጥቅም ላይ ይውላል። የቦርድዎ ዓይነት የተለየ ፒን የሚጠቀም ከሆነ፣ ይህን እሴት ያዘምኑ።
የWi-Fi SSID እና የይለፍ ቃል (የኬዝ ስሜታዊ)
የWi-Fi ማረጋገጫ መረጃዎችን በራስዎ የአውታረ መረብ ዝርዝሮች ይተኩ፦
const char* WIFI_SSID = "your WIFI";
const char* WIFI_PASSWORD = "passW0rd";
አስፈላጊ፦ የWi-Fi SSIDዎች የኬዝ ስሜታዊ ናቸው። "Book" የሚባል SSID ከ"book" ጋር አንድ አይደለም። አቢይ ሆሄያት በትክክል ካልተዛመደ፣ ESP32-S3 መገናኘት አይችልም።
የNTP አገልጋይ፣ የሰዓት ሰቅ እና የቀን ብርሃን ቁጠባ
ሰዓቱ የኢንተርኔት NTP አገልጋይ በመጠቀም ሰዓትን ያመሳስላል፦
const char* ntpServer = "pool.ntp.org";
የአካባቢ ሰዓት እነዚህን ማካካሻዎች በመጠቀም ይሰላል፦
// ቶሮንቶ-አይነት፡ UTC-5፣ ሲደመር 1 ሰዓት DST
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_sec፦ የUTC ማካካሻ በሰከንዶች (ምሳሌ፡ UTC-5 =-5 * 3600)daylightOffset_sec፦ DST ንቁ ከሆነ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 የቀለም መንኮራኩር ይጠቀማል። እያንዳንዱ ቁምፊ በትንሽ ለየት ባለ የቀለም ማካካሻ ይሳላል፣ እና ቀለሞቹ በጊዜ ሂደት ይለዋወጣሉ፣ ይህም የሚፈስ የቀስተ ደመና እንቅስቃሴ ይፈጥራል።
// የቀስተ ደመና ቀለሞችን ለመፍጠር ረዳት
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 ስፔክትረም ውስጥ ያልፋል፣ ይህም በትንሿ 8×8 ማሳያ ላይ በተለይ አስደናቂ የሆነ ቀጣይነት ያለው የቀስተ ደመና ውጤት ይፈጥራል።
የሰዓት እና የቀን ማሳያ ባህሪ
ሰዓቱ ለሰዓት እና ለቀን የተለያዩ ቋቶችን ይይዛል፦
- ሰዓት፦
HH:MM - ቀን፦
MMM DD(ለምሳሌJAN 08)
ቀኑ በተወሰነ ጊዜ ልዩነት ይታያል፦
const uint32_t dateIntervalMs = 60000; // ቀኑን በየ1 ደቂቃው አሳይ
በእያንዳንዱ ሙሉ የማንቀሳቀስ ዑደት መጨረሻ ላይ፣ ኮዱ ሰዓቱን ማሳየት መቀጠል ወይም ወደ ቀኑ መቀየር እንዳለበት ይወስናል።
በ8×8 ማትሪክስ ላይ የማንቀሳቀስ አመክንዮ
ማሳያው 8 ፒክስሎች ስፋት ብቻ ስለሆነ፣ ጽሑፉ ከቀኝ ወደ ግራ በተቀላጠፈ ሁኔታ ይንቀሳቀሳል። ጽሑፉ ሙሉ በሙሉ ከማያ ገጹ ከወጣ በኋላ፣ ጠቋሚው ይቀመጣል እና ለሚቀጥለው ማለፊያ የሚቀጥለው ይዘት (ሰዓት ወይም ቀን) ይጫናል።
ማሳያ
ስኬቹን ከጫኑ እና ቦርዱን በUSB-C ኃይል ከሰጡ በኋላ፦
- ESP32-S3 ከWi-Fi አውታረ መረብዎ ጋር ይገናኛል
- ሰዓት ከኢንተርኔት ይመሳሰላል
- ሰዓቱ በ
HH:MMቅርጸት ይንቀሳቀሳል - ቀኑ በየጊዜው ይታያል
- ሁሉም ጽሑፍ በተቀላጠፈ እንቅስቃሴ ያለው የቀስተ ደመና ውጤት ይቀርባል
- ማሳያው በራስ-ሰር በሌሊት ይደበዝዛል እና በቀን ይብራራል
ውርዶች እና አገናኞች
የተሟላ ምንጭ ኮድ ከዚህ ጽሑፍ በታች ቀርቧል። ጠቃሚ መሣሪያዎች እና ማጣቀሻዎች፣ የRGB ቀለም መራጭን ጨምሮ፣ ከዚህ ጽሑፍ በታችም ተያይዘዋል።
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 ማትሪክስ የበይነመረብ ሰዓት ፕሮጀክት - 2 ሰዓት ባለብዙ ቀለም ጊዜ እና ቀን ማሳያ
- የESP32-S3 RGB LED ማትሪክስ የበይነመረብ ሰዓት ፕሮጀክት - 3 የምሽት ቀለም ከቀን ጋር
- የESP32-S3 RGB LED ማትሪክስ የበይነመረብ ሰዓት ፕሮጀክት - 4 የዘፈቀደ ቀለም
- ESP32-S3 RGB LED Matrix test for RGB, GRB setting
/*
* =====================================================================================
* 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();
}
}
ምንጮች እና ምንጮች
-
ቪዲዮ
-
ውስጥ🎨 Color picker Toolrobojax.com
ፋይሎች📁
ፍሪትዚንግ ፋይል
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB