This tutorial is part of: 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 - 2 Saat Çok Renkli Zaman ve Tarih Gösterimi
ESP32-S3 RGB NeoMatrix İnternet Saati ile Saat ve Tarih Gösterimi
Bu proje, yalnızca güncel saati göstermekle kalmayıp aynı zamanda tarihi de periyodik olarak görüntüleyen gelişmiş bir ESP32-S3 RGB Matrix İnternet Saatidir. ESP32-S3 Wi-Fi'ye bağlanır, bir NTP sunucusundan zamanı senkronize eder ve 8×8 RGB NeoMatrix üzerinde SS:DD veya tarihi (örneğin EYL 21) kaydırarak gösterir. Ekran, otomatik gündüz/gece parlaklık kontrolünü ve özelleştirilebilir RGB renklerini destekler.

Bu saatin yaptıkları
Wi-Fi ağınıza bağlandıktan sonra ESP32-S3, güncel yerel saati internetten alır. Saat normalde zamanı kaydırarak gösterir, ancak sabit bir aralıkta tarihi göstermeye geçer. Metin rengi tek bir renge sabitlenebilir veya birden fazla kullanıcı tanımlı renk arasında otomatik olarak döngü yapabilir. Parlaklık, ekranın gözleri daha az yorması için gece otomatik olarak azaltılır.
Kullanılan kütüphaneler
Bu taslak aşağıdaki kütüphanelere bağlıdı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 tüm bağımlılıklar otomatik olarak kurulacaktır.

Önemli kullanıcı yapılandırması
Wi-Fi SSID ve şifre (büyük/küçük harf duyarlı)
Wi-Fi kimlik bilgilerini kendi ağ bilgilerinizle değiştirmelisiniz:

const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
Önemli: Wi-Fi SSID'leri büyük/küçük harf duyarlıdır. Örneğin, "Book" adlı bir SSID, "book" ile aynı değildir. Büyük harf kullanımı tam olarak eşleşmezse ESP32 bağlanamaz.
NTP sunucusu, saat dilimi ve yaz saati uygulaması
Saat bir internet zaman sunucusu kullanır:
const char* ntpServer = "pool.ntp.org";
Yerel saat şu ofsetler kullanılarak hesaplanır:
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_sec: UTC ofsetiniz saniye cinsinden (örnek: UTC-5 =-5 * 3600)daylightOffset_sec: Yaz saati uygulaması için3600veya kullanılmıyorsa0kullanın
Bu ayarlar şu şekilde uygulanır:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Parlaklık kontrolü (gündüz / gece)
Bu proje, günün saatine 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, ekranın karanlık ortamlarda daha az dikkat dağıtıcı olması için parlaklık azaltılır. Bu değerleri tercihinize göre ayarlayabilirsiniz.
RGB renk yapılandırması
Saat, hem sabit renk modunu hem de otomatik renk döngüsünü destekler. Kullanıcı tanımlı RGB renkleri bir dizide saklanır:
uint8_t userColors[][3] = {
{17, 43, 171}, // Açık Mavi
{255, 0, 0}, // Kırmızı
{0, 255, 0}, // Yeşil
{255, 165, 0}, // Turuncu
{255, 0, 255} // Magenta
};
Her renk, 0 ile 255 arasında değişen RGB (Kırmızı, Yeşil, Mavi) değerlerini kullanır. Bu sayıları değiştirerek ekran için neredeyse her rengi oluşturabilirsiniz. useFixedColor true olarak ayarlanırsa, saat her zaman tek bir renk kullanır. false olarak ayarlanırsa, her tam kaydırmadan sonra renk otomatik olarak değişir.
İstediğiniz herhangi bir renk için hızlıca doğru RGB değerlerini bulmak üzere RGB Renk Seçici aracını kullanın Renk Seçici .
Saat ve tarih biçimlendirme
Saat SS:DD olarak biçimlendirilir ve küçük bir karakter tamponunda saklanır. Tarih, EYL 21 gibi büyük harfli bir dize olarak biçimlendirilir. Ekran, sabit bir aralıkta otomatik olarak saat ve tarih arasında geçiş yapar.
8×8 ekranda kaydırma mantığı
8×8 matris tüm metni aynı anda göstermek için çok küçük olduğundan, taslak metni yatay olarak kaydırır. Metin ekrandan tamamen çıktığında renk güncellenir ve içerik gerektiğinde saat ile tarih arasında geçiş yapar.
Gösterim
Taslağı yükledikten sonra:
- ESP32 Wi-Fi'ye bağlanır
- Zaman internetten senkronize edilir
- Güncel saat matris üzerinde kayar
- Tarih periyodik olarak görünür
- Parlaklık gündüz ve gece için otomatik olarak ayarlanır
İndirmeler ve bağlantılar
Tam kaynak kodu bu makalenin altında verilmiştir. Parça, araç ve veri sayfası bağlantıları da bu makalenin altında mevcuttur.
This tutorial is part of: 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 - Tarih ile 3 Gece Rengi
- ESP32-S3 RGB LED Matris İnternet Saati Projesi - 5 Gökkuşağı rengi
- ESP32-S3 RGB LED Matris İnternet Saati Projesi - 4 Rastgele renk
- ESP32-S3 RGB LED Matrix test for RGB, GRB setting
/*
* =====================================================================================
* ESP32-S3 INTERNET RGB CLOCK (8x8 Matrix) - Project 2
Multi color
* =====================================================================================
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT839
* Author: 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 when text finishes a full scroll.
* 3. Auto-Brightness: Dims the LEDs during night hours (User-configurable).
* 4. Periodic Date: Scrolls the date (e.g., "JAN 07") every 2 minutes.
* * USER CONFIGURATION GUIDE:
* -------------------------
* - WiFi: Change 'WIFI_SSID' and 'WIFI_PASSWORD' to your local network.
* - Colors: Add or remove {R, G, B} sets in the 'userColors' array.
* - Night Mode: Adjust 'NIGHT_START_HOUR' and 'NIGHT_BRIGHTNESS'.
* =====================================================================================
*/
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define MATRIX_PIN 14
// --- BRIGHTNESS CONFIGURATION ---
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;
// --- COLOR CONFIGURATION ---
bool useFixedColor = false;
int fixedColorIndex = 0;
uint8_t userColors[][3] = {
{17, 43, 171}, // Light Blue
{255, 0, 0}, // Red
{0, 255, 0}, // Green
{255, 165, 0}, // Orange
{255, 0, 255} // Magenta
};
// 👇 REPLACE these with your real home WiFi name & password
const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
int currentColorIndex = 0;
int totalColors = sizeof(userColors) / sizeof(userColors[0]);
// --- DATE/TIME INTERVALS ---
unsigned long lastDateShowMs = 0;
const uint32_t dateIntervalMs = 30000; // 2 minutes
unsigned long lastTimeUpdateMs = 0;
const uint16_t timeUpdateIntervalMs = 1000;
unsigned long lastScrollMs = 0;
const uint16_t scrollIntervalMs = 100;
// --- GLOBAL VARIABLES ---
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;
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
void updateTimeAndDate() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return;
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]);
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);
// FIXED LOGIC: Uses currentColorIndex which only changes at the end of a scroll
int idx = useFixedColor ? fixedColorIndex : currentColorIndex;
matrix.setTextColor(matrix.Color(userColors[idx][0], userColors[idx][1], userColors[idx][2]));
matrix.setCursor(scrollX, 0);
matrix.print(currentDisplayText);
matrix.show();
scrollX--;
int16_t textWidth = strlen(currentDisplayText) * 6;
// THE TRIGGER POINT: This happens only when text is fully off-screen
if (scrollX < -textWidth) {
scrollX = matrix.width();
// 1. Cycle the color now and only now
if (!useFixedColor) {
currentColorIndex = (currentColorIndex + 1) % totalColors;
}
// 2. Decide whether to switch between Time and Date
if (millis() - lastDateShowMs > dateIntervalMs) {
strcpy(currentDisplayText, dateText);
lastDateShowMs = millis();
} else {
strcpy(currentDisplayText, timeText);
}
}
}
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
matrix.begin();
matrix.setTextWrap(false);
matrix.setBrightness(DAY_BRIGHTNESS);
updateTimeAndDate();
strcpy(currentDisplayText, timeText);
}
void loop() {
unsigned long now = millis();
if (now - lastTimeUpdateMs >= timeUpdateIntervalMs) {
lastTimeUpdateMs = now;
updateTimeAndDate();
}
if (now - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = now;
scrollDisplay();
}
}
İhtiyacın olabileceğini düşünüyor
-
Amazon
-
eBay
-
AliExpressPurchase ESP32-S3 RGB Matrix from AliExpresss.click.aliexpress.com
-
AliExpressPurchase ESP32-S3 RGB Matrix from AliExpress (2)s.click.aliexpress.com
Kaynaklar ve referanslar
-
Video
Dosyalar📁
Fritzing Dosyası
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB