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 5 za Upinde wa mvua
Saa ya Mtandao ya ESP32-S3 yenye Athari ya Rangi ya Upinde wa mvua
Mradi huu ni Saa ya Mtandao ya RGB Matrix ya ESP32-S3 inayounganisha kwenye Wi-Fi, husawazisha muda wa eneo kutoka kwa seva ya NTP, na husogeza saa katika muundo wa HH:MM kwenye NeoMatrix ya RGB ya 8×8 iliyojengewa ndani. Tofauti na matoleo ya rangi thabiti au ya nasibu, saa hii hutumia athari laini ya rangi ya upinde wa mvua, ambapo kila herufi hubadilika kila mara kupitia wigo wa RGB inaposogea. Saa pia huonyesha tarehe mara kwa mara na hubadilisha mwangaza kiotomatiki kati ya mchana na usiku.

Jinsi saa hii inavyofanya kazi
Mara tu inapowashwa kupitia USB-C, ESP32-S3 huunganisha kwenye mtandao wako wa Wi-Fi na kupata muda wa sasa wa eneo kutoka kwenye mtandao. Onyesho kwa kawaida husogeza saa, lakini kwa muda uliowekwa hubadilika kuonyesha tarehe. Saa na tarehe zote mbili huonyeshwa kwa kutumia athari ya nguvu ya upinde wa mvua, na kuunda onyesho la kuvutia na la uhuishaji kwenye matrix ndogo ya 8×8.
Maktaba zilizotumika
Sketch hii inategemea maktaba zifuatazo:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
Sakinisha Adafruit NeoMatrix kwa kutumia Meneja wa Maktaba wa Arduino. Vitegemezi vyake, vikiwemo 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 imeunganishwa kwenye bodi ya ESP32-S3, 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 ya bodi yako inatumia pini tofauti, sasisha thamani hii.
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 = "your WIFI";
const char* WIFI_PASSWORD = "passW0rd";
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, eneo la saa, na muda wa kuokoa mchana
Saa husawazisha muda kwa kutumia seva ya NTP ya mtandao:
const char* ntpServer = "pool.ntp.org";
Muda wa eneo huhesabiwa kwa kutumia maofseti haya:
// Toronto-ish: UTC-5, plus 1 hour DST
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_sec: Ofseti ya UTC kwa sekunde (mfano: UTC-5 =-5 * 3600)daylightOffset_sec: Tumia3600ikiwa DST ipo, au0ikiwa haitumiki
Thamani hizi hutumika kwa kutumia:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Mwangaza otomatiki wa mchana / usiku
Mwangaza hubadilika 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, matrix hupunguza mwangaza ili kupunguza mng'ao. Wakati wa mchana, mwangaza wa kawaida hurudishwa.
Athari ya rangi ya upinde wa mvua
Mradi huu hutumia gurudumu la kawaida la rangi za RGB kuzalisha rangi laini za upinde wa mvua. Kila herufi huchorwa kwa ofseti tofauti kidogo ya rangi, na rangi hubadilika kwa wakati, na kutoa uhuishaji wa upinde wa mvua unaotiririka.
// 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);
}
Maandishi yanaposogea, kila herufi hupitia wigo wa RGB, na kuunda athari ya upinde wa mvua inayoendelea ambayo inaonekana ya kuvutia haswa kwenye onyesho dogo la 8×8.
Tabia ya kuonyesha saa na tarehe
Saa hudumisha bafa tofauti za saa na tarehe:
- Saa:
HH:MM - Tarehe:
MMM DD(kwa mfanoJAN 08)
Tarehe huonyeshwa kwa muda uliowekwa:
const uint32_t dateIntervalMs = 60000; // Show date every 1 minute
Mwishoni mwa kila mzunguko kamili wa usogeaji, msimbo huamua kuendelea kuonyesha saa au kubadilisha kwenda tarehe.
Mantiki ya usogeaji kwenye matrix ya 8×8
Kwa sababu onyesho lina upana wa pikseli 8 tu, maandishi husogea laini kutoka kulia kwenda kushoto. Mara tu maandishi yanapotoka kabisa kwenye skrini, mshale hurejeshewa na maudhui yanayofuata (saa au tarehe) hupakiwa kwa mzunguko unaofuata.
Maonyesho
Baada ya kupakia sketch na kuwasha bodi kupitia USB-C:
- ESP32-S3 huunganisha kwenye mtandao wako wa Wi-Fi
- Muda husawazishwa kutoka kwenye mtandao
- Saa husogea katika muundo wa
HH:MM - Tarehe huonekana mara kwa mara
- Maandishi yote huonyeshwa kwa athari laini ya upinde wa mvua yenye uhuishaji
- Onyesho hupunguza mwangaza kiotomatiki usiku na kuongeza mchana
Upakuaji na viungo
Chanzo kamili cha msimbo kimetolewa hapa chini ya makala hii. Zana muhimu na marejeo, ikiwa ni pamoja na Kichagua Rangi cha RGB, pia vimeunganishwa 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 4 za Nasibu
- 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();
}
}
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