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 Wi-Fi + NTP Saat Projesi -1 Temel Saat
ESP32-S3 İnternet Saati 8×8 NeoMatrix ile (Wi-Fi + NTP Saati)
Bu proje, bir ESP32-S3 ve 8×8 RGB NeoMatrix'i (NeoPixel/WS2812) küçük bir internet saatine dönüştürür. ESP32, Wi-Fi'ye bağlanır, bir NTP sunucusundan yerel saati senkronize eder ve ardından saati SS:DD olarak 8×8 ekranda kaydırır.

Nasıl çalışır (üst düzey)
1) ESP32-S3, <WiFi.h> kullanarak yönlendiricinize bağlanır.
2) "time.h" ve configTime() kullanarak bir NTP sunucusundan saati senkronize eder.
3) Saat SS:DD biçiminde biçimlendirilir ve küçük bir metin arabelleğine kaydedilir.
4) NeoMatrix metni işler ve 8×8 panel boyunca kaydırır.

RGB Renk
Saat metin rengi, her renk kanalının 0 ile 255 arasında değiştiği ve farklı kombinasyonların NeoMatrix üzerinde farklı renkler oluşturduğu RGB (Kırmızı, Yeşil, Mavi) değerleri kullanılarak kontrol edilir. color_RED, color_GREEN ve color_BLUE değişkenlerini ayarlayarak saatin görünümünü istediğiniz herhangi bir renge kolayca özelleştirebilirsiniz. Belirli bir renk için tam RGB değerlerini hızlıca bulmak için çevrimiçi RGB Renk Seçici Renk Seçici 'yi kullanabilirsiniz.

Kullanılan kütüphaneler
Bu include'lar, taslağın tam olarak neye bağlı olduğunu söyler:

#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. Ayrıca Adafruit GFX Library ve Adafruit NeoPixel gibi gerekli bağımlılıkları da otomatik olarak çekecektir.
Mutlaka düzenlemeniz gereken önemli kullanıcı ayarları
1) Metin rengi (RGB)
Saat metin renginizi 0–255 değerlerini kullanarak ayarlayın:
//Kırmızı, Yeşil ve Mavi'den oluşan ekran rengini ayarlayın
unsigned int color_RED = 17;
unsigned int color_GREEN = 43;
unsigned int color_BLUE = 171;
Bu değerler şurada kullanılır:
matrix.setTextColor(matrix.Color(color_RED, color_GREEN, color_BLUE));
Not: Tüm renkleri 0'a (siyah) ayarlarsanız metin görünmez olur. Taslak bir güvenlik kontrolü içerir:
// kullanıcı tüm renkleri 0'a ayarlarsa ekran kapanır, bu yüzden yeşile ayarlayın
if (color_RED == 0 && color_GREEN == 0 && color_BLUE == 0) {
color_GREEN = 200;
}
Bu, matrisin görünmez bir renk ayarı nedeniyle asla “ölü” görünmemesini sağlar.
2) Wi-Fi SSID ve şifre
Bunları gerçek Wi-Fi adınız ve şifrenizle değiştirin:
const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
Başlangıç sırasında ESP32, Seri Monitörde bağlantı ilerlemesini yazdırır ve yaklaşık 15 saniye sonra zaman aşımına uğrar (30 deneme × 500ms).
3) NTP sunucusu
Varsayılan NTP sunucusu:
const char* ntpServer = "pool.ntp.org";
Olduğu gibi bırakabilirsiniz. Yerel bir sunucu kullanmak isterseniz, ana bilgisayar adını tercih ettiğiniz NTP sunucusuyla değiştirin.
4) Saat dilimi ofseti ve yaz saati ofseti
Bu iki ayar yerel saati kontrol eder:
// Toronto benzeri: UTC-5, artı 1 saat DST
const long gmtOffset_sec = -5 * 3600; // -5 saat
const int daylightOffset_sec = 3600; // DST için +1 saat
Nasıl ayarlanır:
gmtOffset_sec= (UTC ofset saati) × 3600. Örnek: UTC-5 →-5*3600, UTC+2 →2*3600.daylightOffset_sec= DST ayarı istemiyorsanız0veya bölgeniz şu anda DST (+1 saat) uyguluyorsa3600.
Bunlar şurada uygulanır:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Ekran yapılandırması
Matris veri pini
Veri pini şurada tanımlanır:
#define MATRIX_PIN 14
Kablolamanız farklı bir GPIO kullanıyorsa, bu numarayı eşleşecek şekilde değiştirin.
NeoMatrix düzeni + renk sırası
Matrisiniz şu şekilde başlatılır:
Adafruit_NeoMatrix matrix(8, 8, MATRIX_PIN,
NEO_MATRIX_TOP + NEO_MATRIX_LEFT +
NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
NEO_RGB + NEO_KHZ800);
Ekranın “yanlış” görünmesinin iki yaygın nedeni:
- Döndürme / kablo yönü: Metin ters veya aynalanmış görünüyorsa,
NEO_MATRIX_*bayraklarını (TOP/BOTTOM, LEFT/RIGHT, ROWS/COLUMNS, PROGRESSIVE/ZIGZAG) ayarlayın. - Renk sırası: Bu kod
NEO_RGBkullanır. Bazı panellerNEO_GRB'dir. Kırmızı/yeşil/mavi eşleşmiyorsa,NEO_RGB'yi doğru sıraya değiştirin.
Parlaklık
Parlaklık initMatrix() içinde ayarlanır:
matrix.setBrightness(40);
Daha parlak bir ekran için artırın, daha düşük ısı ve güç tüketimi için azaltın.
Saat SS:DD olarak nasıl oluşturulur
Saat, biçimlendirilmiş saati 6 karakterlik bir arabellekte saklar:
char timeText[6] = "00:00";
Ardından updateTimeText() NTP ile senkronize edilmiş yerel saati okur ve metni yazar:
// SS:DD biçimi
snprintf(timeText, sizeof(timeText), "%02d:%02d",
timeinfo.tm_hour,
timeinfo.tm_min);
Bu, ana döngüde saniyede bir güncellenir.
8×8 ekranda kaydırma nasıl çalışır
8×8 bir matris, SS:DD metnini aynı anda göstermek için çok dardır, bu yüzden taslak metni kaydırır. Zamanı değişen bir X konumunda (scrollX) çizer ve her güncellemede bir piksel sola taşır.
int16_t scrollX = 8;
const uint16_t scrollIntervalMs = 120;
Her kaydırma adımı:
matrix.fillScreen(0);
matrix.setCursor(scrollX, 0);
matrix.print(timeText);
matrix.show();
scrollX--;
Metin sol taraftan tamamen çıktığında, kod onu sağ kenardan yeniden başlatmak için sıfırlar:
int16_t textWidth = 30;
if (scrollX < -textWidth) {
scrollX = matrix.width();
}
Seri Monitör çıktısı (hata ayıklama)
Bu taslak yararlı mesajlar yazdırır:
- Wi-Fi bağlantı ilerlemesi ve IP adresi
- Zaman senkronizasyonunun başarılı olup olmadığı
- Biçimlendirilmiş zaman dizesi (ör.,
Zaman metni: 14:32)
Ekran boşsa, Wi-Fi ve NTP'nin çalıştığını doğrulamak için kontrol edilecek ilk yer Seri Monitör'dür.
Proje gösterimi
Yükleme ve sıfırlamadan sonra:
- ESP32 Wi-Fi'ye bağlanır
pool.ntp.orgadresinden zamanı senkronize eder- Matriste kısaca
OKgösterir - Geçerli saati
SS:DDolarak sürekli kaydırır
İndirmeler ve bağlantılar
Tam kod bu makalenin altında verilmiştir. Parçalar, araçlar ve veri sayfaları da bu makalenin altında bağlantılıdır.
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 İ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 Matris İnternet Saati Projesi - 4 Rastgele renk
- ESP32-S3 RGB LED Matrix test for RGB, GRB setting
/*
This is ESP32 sketch that connects to the internet, gets the time and displays it on the RGB matrix
you must set your WiFi correctly to make sure it gets connected.
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT838
* Author: Ahmad Shamshiri (Robojax.com)
* Date: 07 Jan 2026
www.Robojax.com
https://youTube.com/@robojax
*/
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
//set the color of diplay make of Red, Green and Blue
unsigned int color_RED = 17;
unsigned int color_GREEN = 43;
unsigned int color_BLUE = 171;
// 👇 REPLACE these with your real home WiFi name & password
const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
#define MATRIX_PIN 14
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";
int16_t scrollX = 8;
unsigned long lastScrollMs = 0;
const uint16_t scrollIntervalMs = 120;
unsigned long lastTimeUpdateMs = 0;
const uint16_t timeUpdateIntervalMs = 1000;
//prototypes
bool updateTimeText(); // forward declaration
void scrollTime(); // forward declaration
// 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
bool updateTimeText() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time for display");
return false;
}
// Format HH:MM
snprintf(timeText, sizeof(timeText), "%02d:%02d",
timeinfo.tm_hour,
timeinfo.tm_min);
Serial.print("Time text: ");
Serial.println(timeText);
return true;
}
void scrollTime() {
matrix.fillScreen(0);
matrix.setCursor(scrollX, 0);
matrix.print(timeText);
matrix.show();
scrollX--;
// Rough width: 5 characters ("HH:MM") × 6 pixels each ≈ 30 px
int16_t textWidth = 30;
if (scrollX < -textWidth) {
scrollX = matrix.width(); // reset to right edge (8)
}
}
void initMatrix() {
matrix.begin();
matrix.setBrightness(40); // be careful with heat
matrix.setTextWrap(false);
matrix.setTextColor(matrix.Color(color_RED, color_GREEN, color_BLUE)); // color of text
}
void showMessage(const char* msg) {
matrix.fillScreen(0);
matrix.setCursor(0, 0); // top-left
matrix.print(msg);
matrix.show();
}
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time");
return;
}
// Format: 2025-11-18 14:35:12
Serial.printf("%04d-%02d-%02d %02d:%02d:%02d\n",
timeinfo.tm_year + 1900,
timeinfo.tm_mon + 1,
timeinfo.tm_mday,
timeinfo.tm_hour,
timeinfo.tm_min,
timeinfo.tm_sec);
}
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println();
Serial.println("ESP32-S3 Internet Clock - WiFi + NTP test");
// 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());
}
// if user set all colors to 0, the dispaly will be turned off so set it green
if(color_RED ==0 & color_GREEN ==0 && color_BLUE ==0)
{
color_GREEN = 200;
}
// Configure time via NTP
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Serial.println("Waiting for time...");
delay(2000); // small wait for initial sync
printLocalTime(); // print once at startup
// NEW: init the LED matrix and show a test message
initMatrix();
showMessage("OK");
}
void loop() {
unsigned long now = millis();
// Update the time string "HH:MM" once per second
if (now - lastTimeUpdateMs >= timeUpdateIntervalMs) {
lastTimeUpdateMs = now;
updateTimeText(); // fills timeText[], e.g. "14:32"
}
// Scroll the time across the 8×8 every scrollIntervalMs
if (now - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = now;
scrollTime(); // uses timeText and scrollX
}
}
İ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