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 - 5 Gökkuşağı rengi
ESP32-S3 İnternet Saati Gökkuşağı Renk Efektli
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. Sabit veya rastgele renkli sürümlerin aksine, bu saat, her karakter kayarken RGB spektrumunda sürekli olarak geçiş yapan yumuşak bir gökkuşağı renk efekti kullanır. Saat ayrıca periyodik olarak tarihi görüntüler ve gece ile gündüz arasında parlaklığı otomatik olarak ayarlar.

Bu saat nasıl çalışır
USB-C üzerinden güç verildiğinde, ESP32-S3 Wi-Fi ağınıza bağlanır ve geçerli yerel saati internetten alır. Ekran normalde saati kaydırır, ancak belirli bir aralıkta tarihi göstermeye geçer. Hem saat hem de tarih, küçük 8×8 matriste canlı ve animasyonlu bir görüntü oluşturan dinamik bir gökkuşağı efekti kullanılarak işlenir.
Kullanılan kütüphaneler
Taslak aşağıdaki kütüphanelere dayanı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'ni kullanarak Adafruit NeoMatrix'i kurun. Adafruit GFX Library ve Adafruit NeoPixel dahil bağımlılıkları otomatik olarak kurulacaktır.

Önemli kullanıcı yapılandırması
Matris veri pini (dahili RGB matris)
RGB matris ESP32-S3 kartına bağlı olsa da, 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 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";
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, bir internet NTP sunucusu kullanarak zamanı senkronize eder:
const char* ntpServer = "pool.ntp.org";
Yerel saat şu ofsetler 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 ofseti saniye cinsinden (örnek: UTC-5 =-5 * 3600)daylightOffset_sec: DST aktifse3600, kullanılmıyorsa0kullanın
Bu değerler şu şekilde uygulanır:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Otomatik gündüz / gece parlaklığı
Parlaklık, geçerli saate göre otomatik olarak değişir:
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 matris, parlamayı azaltmak için kısılır. Gündüz saatlerinde normal parlaklık geri yüklenir.
Gökkuşağı renk efekti
Bu proje, yumuşak gökkuşağı renkleri oluşturmak için klasik bir RGB renk çarkı kullanır. Her karakter, hafifçe farklı bir renk ofsetiyle çizilir ve renkler zamanla kayarak akan bir gökkuşağı animasyonu üretir.
// Gökkuşağı Renkleri oluşturmak için yardımcı
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);
}
Metin kaydıkça, her karakter RGB spektrumunda ilerleyerek küçük 8×8 ekranda özellikle etkileyici görünen sürekli bir gökkuşağı efekti oluşturur.
Saat ve tarih görüntüleme davranışı
Saat, saat ve tarih için ayrı tamponlar tutar:
- Saat:
SS:DD - Tarih:
AAA GG(örneğinOCA 08)
Tarih, sabit bir aralıkta gösterilir:
const uint32_t dateIntervalMs = 60000; // Tarihi her 1 dakikada bir göster
Her tam kaydırma döngüsünün sonunda, kod saati göstermeye devam edip etmeyeceğine veya tarihe geçip geçmeyeceğine karar verir.
8×8 matriste kaydırma mantığı
Ekran yalnızca 8 piksel genişliğinde olduğundan, metin sağdan sola doğru yumuşak bir şekilde kayar. Metin ekrandan tamamen çıktığında, imleç sıfırlanır ve bir sonraki geçiş için sonraki içerik (saat veya tarih) yüklenir.
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 - Tarih periyodik olarak görünür
- Tüm metin yumuşak animasyonlu bir gökkuşağı efektiyle işlenir
- Ekran gece otomatik olarak kısılır ve gündüz parlaklaşır
İndirmeler ve bağlantılar
Bu makalenin altında kaynak kodun tamamı verilmiştir. RGB Renk Seçici dahil olmak üzere faydalı araçlar ve referanslar da 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 - 4 Rastgele renk
- 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();
}
}
Kaynaklar ve referanslar
-
Video
-
Dahili🎨 Color picker Toolrobojax.com
Dosyalar📁
Fritzing Dosyası
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB