This tutorial is part of: Matrix ya LED ya ESP32-S3 RGB
Mradi mzuri wa kuunda kwa ajili ya matumizi ya kufurahisha na ya vitendo kwa kutumia moduli ya ESP32-S3 RGB Matrix. Viungo vya video zingine viko chini ya makala haya.
Mradi wa Saa ya Mtandao ya Matrix ya LED ya RGB ya ESP32-S3 - Rangi 4 za Nasibu
Saa ya Mtandao ya ESP32-S3 yenye Rangi za RGB Zinazobadilika
Mradi huu ni Saa ya Mtandao ya RGB Matrix ya ESP32-S3 inayounganisha kwenye Wi-Fi, inasawazisha muda wa eneo kutoka kwa seva ya NTP, na inatembeza muda katika muundo wa HH:MM kwenye NeoMatrix ya RGB ya 8×8 iliyojengewa ndani. Katika toleo hili, saa, koloni, na dakika kila moja hutolewa kwa rangi za nasibu zinazochaguliwa kila mzunguko kamili wa kutembeza, na kuunda onyesho la saa lenye nguvu na la kichekesho linalobadilika kila mara.

Jinsi saa hii inavyofanya kazi
Baada ya kuwasha bodi kupitia USB-C, ESP32-S3 inaunganisha kwenye mtandao wako wa Wi-Fi na kupata muda wa sasa wa eneo kutoka kwenye mtandao. Muda hugawanywa katika sehemu tatu—saa, koloni, na dakika—na kila sehemu huchorwa kando kwenye matrix ya RGB. Wakati maandishi yanapotembeza kabisa nje ya skrini, rangi mpya za nasibu huchaguliwa kwa mzunguko unaofuata.
Maktaba zilizotumika
Sketch hii inatumia maktaba zifuatazo:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
Sakinisha Adafruit NeoMatrix kutoka kwenye Meneja wa Maktaba wa Arduino. Vitegemezi vinavyohitajika kama Adafruit GFX Library na Adafruit NeoPixel vitasakinishwa kiotomatiki.

Usanidi muhimu wa mtumiaji
Pini ya data ya Matrix (matrix ya RGB iliyojengewa ndani)
Ingawa matrix ya RGB imejumuishwa kwenye bodi, pini ya data bado lazima ifafanuliwe kwenye msimbo:

#define MATRIX_PIN 14
GPIO 14 hutumika kwa kawaida kwenye bodi za matrix za RGB za ESP32-S3. Ikiwa lahaja yako ya bodi inatumia pini tofauti, sasisha thamani hii ipasavyo.
SSID na nenosiri la Wi-Fi (nyeti kwa herufi kubwa/ndogo)
Badilisha hati za Wi-Fi na maelezo yako ya mtandao:
const char* WIFI_SSID = "SSID yako ya Wi-Fi";
const char* WIFI_PASSWORD = "nenosiriW0rd";
Muhimu: SSID za Wi-Fi ni nyeti kwa herufi kubwa/ndogo. SSID inayoitwa "Book" si sawa na "book". Ikiwa herufi kubwa hazilingani haswa, ESP32-S3 itashindwa kuunganisha.
Seva ya NTP, saa za eneo, na muda wa kuokoa mchana
Usawazishaji wa muda unafanywa kwa kutumia seva ya NTP ya mtandao:
const char* ntpServer = "pool.ntp.org";
Muda wa eneo huhesabiwa kwa kutumia ofseti za UTC na muda wa kuokoa mchana:
// Kama Toronto: UTC-5, pamoja na saa 1 ya DST
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_sec: Ofseti ya UTC kwa sekunde (rekebisha kulingana na eneo lako)daylightOffset_sec: Tumia3600wakati DST iko kazi, au0vinginevyo
Mipangilio hii inatumika kwa kutumia:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Mwangaza wa kiotomatiki wa mchana / usiku
Saa hurekebisha mwangaza kiotomatiki kulingana na saa ya sasa:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;
Kati ya saa 10 jioni na saa 6 asubuhi, onyesho hupunguza mwangaza ili kupunguza mng'ao katika mazingira ya giza. Wakati wa mchana, matrix inarudi kwenye mwangaza wa kawaida.
Tabia ya rangi za RGB za nasibu
Orodha iliyoainishwa ya rangi za RGB huhifadhiwa kwenye safu, ambapo kila rangi inafafanuliwa kwa kutumia thamani za Nyekundu, Kijani, na Bluu kuanzia 0 hadi 255:
uint8_t userColors[][3] = {
{255, 0, 0}, // Nyekundu
{0, 255, 0}, // Kijani
{0, 0, 255}, // Bluu
{255, 165, 0}, // Chungwa
{255, 0, 255}, // Magenta
{0, 255, 255}, // Cyani
{255, 255, 0} // Njano
};
Kila mzunguko kamili wa kutembeza:
- Tarakimu za saa hupewa rangi ya nasibu
- Koloni hupokea rangi tofauti ya nasibu
- Tarakimu za dakika hupokea rangi nyingine ya nasibu
Hii hutoa mchanganyiko wa rangi unaobadilika kila mara unaofanya saa ionekane ya kuvutia. Ili kuunda rangi zako maalum, unaweza kutumia zana ya Kichagua Rangi cha RGB: Kichagua Rangi cha RGB.
Mantiki ya kuonyesha muda
Muda hugawanywa katika vipengele vitatu:
- Saa:
HH - Koloni:
: - Dakika:
MM
Kila sehemu huchorwa kivyake ili iweze kuwa na rangi yake, wakati sehemu zote zikisogea pamoja kuunda uhuishaji laini wa kutembeza kwenye onyesho la 8×8.
Uzalishaji wa rangi za nasibu
Ili kuhakikisha uwezekano wa rangi, sketch hupanda mbegu ya kizazi cha nambari za nasibu wakati wa kuanza kwa kutumia pini ya analogi isiyounganishwa:
randomSeed(analogRead(0));
Hii inahakikisha kwamba mchanganyiko wa rangi ni tofauti kila wakati wa kuwasha na kila mzunguko wa kutembeza.
Maonyesho
Baada ya kupakia sketch na kuwasha bodi kupitia USB-C:
- ESP32-S3 inaunganisha kwenye mtandao wako wa Wi-Fi
- Muda unasawazishwa kutoka kwenye mtandao
- Muda unatembeza katika muundo wa
HH:MM - Saa, koloni, na dakika hubadilika kuwa rangi za nasibu kila mzunguko
- Onyesho hupunguza mwangaza kiotomatiki usiku
Upakuaji na viungo
Chanzo kamili cha msimbo kimetolewa hapa chini ya makala hii. Zana muhimu na marejeo yameunganishwa hapa chini ya makala hii.
This tutorial is part of: Matrix ya LED ya ESP32-S3 RGB
- Mradi wa Matrix ya LED ya RGB ya ESP32-S3 1- Nukta ya Msingi
- Mradi wa Matrix ya LED ya RGB ya ESP32-S3 2 - Maandishi Yanayotembea
- Mradi wa ESP32-S3 RGB LED Matrix 3 - Maandishi kutoka kwa simu ya mkononi
- Mradi wa ESP32-S3 RGB LED Matrix 4 - Nukta ya kuinamia
- Mradi wa Matrix ya LED ya RGB ya ESP32-S3 5 - Mshale daima juu
- Mchezo wa Cible wa Mradi wa Matrix ya LED ya RGB ya ESP32-S3 6
- Mradi wa Saa ya Matrix ya LED ya RGB ya ESP32-S3 Wi-Fi + NTP -1 Saa ya Msingi
- Mradi wa Saa ya Mtandao ya Matrix ya LED ya RGB ya ESP32-S3 - Saa 2 za rangi nyingi za Kuonyesha Muda na Tarehe
- Mradi wa Saa ya Mtandao ya Matrix ya LED ya RGB ya ESP32-S3 - Rangi 3 za Usiku na Tarehe
- Mradi wa Saa ya Mtandao ya Matrix ya LED ya RGB ya ESP32-S3 - Rangi 5 za Upinde wa mvua
- ESP32-S3 RGB LED Matrix test for RGB, GRB setting
/*
* =====================================================================================
* ESP32-S3 INTERNET RGB CLOCK (8x8 Matrix) - Project 4- Random Color
* =====================================================================================
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT843
* Author: Gemini (AI Thought Partner) & 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 after the time finishes a full scroll.
* 3. Auto-Brightness: Dims the LEDs during night hours (User-configurable).
* =====================================================================================
*/
/*
* =====================================================================================
* ESP32-S3 INTERNET CLOCK - MULTI-COLOR ELEMENTS
* =====================================================================================
* Each part of the time (HH : MM) gets a different random color from your list.
* Colors only change once the full scroll cycle is finished.
* =====================================================================================
*/
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define MATRIX_PIN 14
// --- CONFIGURATION ---
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;
uint8_t userColors[][3] = {
{255, 0, 0}, // Red
{0, 255, 0}, // Green
{0, 0, 255}, // Blue
{255, 165, 0}, // Orange
{255, 0, 255}, // Magenta
{0, 255, 255}, // Cyan
{255, 255, 0} // Yellow
};
int totalColors = sizeof(userColors) / sizeof(userColors[0]);
// Variables to store the current random color indices
int hourColorIdx = 0;
int colonColorIdx = 1;
int minColorIdx = 2;
// --- GLOBALS ---
Adafruit_NeoMatrix matrix(8, 8, MATRIX_PIN,
NEO_MATRIX_TOP + NEO_MATRIX_LEFT +
NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
NEO_RGB + NEO_KHZ800);
char hourText[3], minText[3];
int16_t scrollX = 8;
unsigned long lastScrollMs = 0;
const uint16_t scrollIntervalMs = 100;
// 👇 REPLACE these with your real home WiFi name & password
const char* WIFI_SSID = "your WiFi SSID";
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
void updateTimeParts() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return;
snprintf(hourText, sizeof(hourText), "%02d", timeinfo.tm_hour);
snprintf(minText, sizeof(minText), "%02d", timeinfo.tm_min);
if (timeinfo.tm_hour >= NIGHT_START_HOUR || timeinfo.tm_hour < NIGHT_END_HOUR) {
matrix.setBrightness(NIGHT_BRIGHTNESS);
} else {
matrix.setBrightness(DAY_BRIGHTNESS);
}
}
void scrollTime() {
matrix.fillScreen(0);
int x = scrollX;
// 1. Draw Hours
matrix.setTextColor(matrix.Color(userColors[hourColorIdx][0], userColors[hourColorIdx][1], userColors[hourColorIdx][2]));
matrix.setCursor(x, 0);
matrix.print(hourText);
x += 12; // Move 12 pixels (2 digits * 6px)
// 2. Draw Colon
matrix.setTextColor(matrix.Color(userColors[colonColorIdx][0], userColors[colonColorIdx][1], userColors[colonColorIdx][2]));
matrix.setCursor(x, 0);
matrix.print(":");
x += 6; // Move 6 pixels
// 3. Draw Minutes
matrix.setTextColor(matrix.Color(userColors[minColorIdx][0], userColors[minColorIdx][1], userColors[minColorIdx][2]));
matrix.setCursor(x, 0);
matrix.print(minText);
matrix.show();
scrollX--;
// Total width is roughly 30 pixels (HH=12, :=6, MM=12)
if (scrollX < -30) {
scrollX = matrix.width();
// Pick NEW random colors for the next cycle
hourColorIdx = random(0, totalColors);
colonColorIdx = random(0, totalColors);
minColorIdx = random(0, totalColors);
}
}
void setup() {
Serial.begin(115200);
// Seed the random generator using an unconnected analog pin
randomSeed(analogRead(0));
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(500);
// 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);
}
void loop() {
if (millis() % 1000 == 0) updateTimeParts();
if (millis() - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = millis();
scrollTime();
}
}
Resurser och referenser
-
Video
-
Interna🎨 Color picker Toolrobojax.com
Filer📁
Fritzing-fil
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB