Bu eğitim şunun parçasıdır: ESP32-S3 RGB LED Matrisi
ESP32-S3 RGB Matris modülü kullanılarak hem eğlence hem de pratik uygulamalar için oluşturulabilecek harika bir proje. Diğer videolara ait bağlantılar bu yazının altında yer almaktadır.
ESP32-S3 RGB LED Matris İnternet Saati Projesi - 4 Rastgele renk
ESP32-S3 İnternet Saati Rastgele RGB Renklerle
Bu proje, Wi-Fi'ye bağlanan, NTP sunucusundan yerel saati senkronize eden ve saati SS:DD formatında dahili 8×8 RGB NeoMatrix üzerinde kayan bir ESP32-S3 RGB Matrix İnternet Saatidir. Bu sürümde, saat, iki nokta üst üste ve dakikaların her biri, her tam kaydırma döngüsünde seçilen rastgele renklerle işlenir ve sürekli değişen dinamik ve eğlenceli bir saat ekranı oluşturur.

Bu saat nasıl çalışır
Kartı USB-C üzerinden güç verdikten sonra, ESP32-S3 Wi-Fi ağınıza bağlanır ve geçerli yerel saati internetten alır. Saat üç bölüme ayrılır—saat, iki nokta üst üste ve dakikalar—ve her bölüm RGB matris üzerinde ayrı ayrı çizilir. Metin ekrandan tamamen kaydığında, bir sonraki geçiş için yeni rastgele renkler seçilir.
Kullanılan kütüphaneler
Bu taslak aşağıdaki kütüphaneleri kullanır:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
Arduino Kütüphane Yöneticisi'nden Adafruit NeoMatrix kurun. Adafruit GFX Library ve Adafruit NeoPixel gibi gerekli bağımlılıklar otomatik olarak kurulacaktır.

Önemli kullanıcı yapılandırması
Matris veri pini (dahili RGB matris)
RGB matris karta entegre olmasına rağmen, veri pini yine de kodda tanımlanmalıdır:

#define MATRIX_PIN 14
GPIO 14, ESP32-S3 RGB matris kartlarında yaygın olarak kullanılır. Kart varyantınız farklı bir pin kullanıyorsa, bu değeri buna göre güncelleyin.
Wi-Fi SSID ve şifre (büyük/küçük harf duyarlı)
Wi-Fi kimlik bilgilerini kendi ağ bilgilerinizle değiştirin:
const char* WIFI_SSID = "your WiFi SSID";
const char* WIFI_PASSWORD = "passW0rd";
Önemli: Wi-Fi SSID'leri büyük/küçük harf duyarlıdır. "Book" adlı bir SSID, "book" ile aynı değildir. Büyük harf kullanımı tam olarak eşleşmezse, ESP32-S3 bağlanamaz.
NTP sunucusu, saat dilimi ve yaz saati uygulaması
Saat senkronizasyonu bir internet NTP sunucusu kullanılarak yapılır:
const char* ntpServer = "pool.ntp.org";
Yerel saat, UTC ve yaz saati farkları kullanılarak hesaplanır:
// Toronto benzeri: UTC-5, artı 1 saat DST
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_sec: UTC farkı saniye cinsinden (konumunuza göre ayarlayın)daylightOffset_sec: DST aktifken3600, aksi halde0kullanın
Bu ayarlar şu şekilde uygulanır:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Otomatik gündüz / gece parlaklığı
Saat, geçerli saate göre parlaklığı otomatik olarak ayarlar:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;
Akşam 10 ile sabah 6 arasında, karanlık ortamlarda parlamayı azaltmak için ekran kararır. Gündüz saatlerinde matris normal parlaklığa döner.
Rastgele RGB renk davranışı
Önceden tanımlanmış bir RGB renk listesi bir dizide saklanır; her renk 0 ile 255 arasında değişen Kırmızı, Yeşil ve Mavi değerleri kullanılarak tanımlanır:
uint8_t userColors[][3] = {
{255, 0, 0}, // Kırmızı
{0, 255, 0}, // Yeşil
{0, 0, 255}, // Mavi
{255, 165, 0}, // Turuncu
{255, 0, 255}, // Magenta
{0, 255, 255}, // Camgöbeği
{255, 255, 0} // Sarı
};
Her tam kaydırma döngüsünde:
- Saat rakamlarına rastgele bir renk atanır
- İki nokta üst üste farklı bir rastgele renk alır
- Dakika rakamları başka bir rastgele renk alır
Bu, saati görsel olarak ilginç kılan sürekli değişen bir renk kombinasyonu üretir. Kendi özel renklerinizi oluşturmak için RGB Renk Seçici aracını kullanabilirsiniz: RGB Renk Seçici.
Saat işleme mantığı
Saat üç bileşene ayrılır:
- Saat:
SS - İki nokta üst üste:
: - Dakikalar:
DD
Her bölüm, kendi rengine sahip olabilmesi için ayrı ayrı çizilirken, tüm bölümler 8×8 ekran boyunca pürüzsüz bir kaydırma animasyonu oluşturmak için birlikte hareket eder.
Rastgele renk üretimi
Renk rastgeleliğini sağlamak için taslak, başlangıçta bağlantısız bir analog pin kullanarak rastgele sayı üretecini tohumlar:
randomSeed(analogRead(0));
Bu, renk kombinasyonlarının her açılışta ve her kaydırma döngüsünde farklı olmasını sağlar.
Gösterim
Taslağı yükledikten ve kartı USB-C üzerinden güç verdikten sonra:
- ESP32-S3 Wi-Fi ağınıza bağlanır
- Saat internetten senkronize edilir
- Saat
SS:DDformatında kayar - Saat, iki nokta üst üste ve dakikalar her döngüde rastgele renklere değişir
- Ekran geceleri otomatik olarak kararır
İndirmeler ve bağlantılar
Bu makalenin altında tam kaynak kodu verilmiştir. Faydalı araçlar ve referanslar bu makalenin altında bağlantılı olarak sunulmuştur.
Bu eğitim şunun parçasıdır: ESP32-S3 RGB LED Matrisi
- ESP32-S3 RGB LED Matris Projesi 1- Temel Nokta
- ESP32-S3 RGB LED Matris Projesi 2 - Kayan Metin
- ESP32-S3 RGB LED Matris Projesi 3 - Cep telefonundan metin
- ESP32-S3 RGB LED Matris Projesi 4 - Eğim noktası
- ESP32-S3 RGB LED Matris Projesi 5 - Ok her zaman yukarı
- ESP32-S3 RGB LED Matris Projesi 6 - Cible oyunu
- ESP32-S3 RGB LED Matris Wi-Fi + NTP Saat Projesi -1 Temel Saat
- ESP32-S3 RGB LED Matris İnternet Saati Projesi - 2 Saat Çok Renkli Zaman ve Tarih Gösterimi
- ESP32-S3 RGB LED Matris İnternet Saati Projesi - Tarih ile 3 Gece Rengi
- ESP32-S3 RGB LED Matris İnternet Saati Projesi - 5 Gökkuşağı rengi
- 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();
}
}
Kaynaklar ve referanslar
-
Video
-
Dahili🎨 Color picker Toolrobojax.com
Dosyalar📁
Fritzing Dosyası
-
esp32-S3-supermini-tht fritzing parçası
esp32-S3-supermini-tht.fzpz0.02 MB