Tutorial ini adalah bagian dari: Matriks LED RGB ESP32-S3
Proyek keren untuk dibuat untuk bersenang-senang dan aplikasi praktis menggunakan modul matriks RGB ESP32-S3. Tautan ke video lain ada di bawah artikel ini.
Proyek Jam Internet Matriks LED RGB ESP32-S3 - 3 Warna Malam dengan Tanggal
Jam Internet NeoMatrix RGB ESP32-S3 dengan Kecerahan Otomatis Siang/Malam
Proyek ini adalah Jam Matriks RGB Internet ESP32-S3 yang secara otomatis menyesuaikan kecerahan pada siang dan malam hari. ESP32-S3 terhubung ke Wi-Fi, menyinkronkan waktu saat ini dari server NTP, dan menampilkan waktu berjalan dalam format HH:MM melintasi NeoMatrix RGB 8×8. Jam ini juga mendukung warna RGB tetap atau berputar untuk teks tampilan.

Apa yang dilakukan jam ini
Setelah dinyalakan, ESP32-S3 terhubung ke jaringan Wi-Fi Anda dan mengambil waktu lokal saat ini dari internet. Waktu berjalan dengan mulus melintasi matriks LED. Pada jam malam, tampilan secara otomatis meredup ke kecerahan yang lebih rendah, sementara pada siang hari kembali ke tingkat yang lebih terang.
Pustaka yang digunakan
Sketsa ini menggunakan pustaka berikut:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
Instal Adafruit NeoMatrix dari Arduino Library Manager. Semua dependensi yang diperlukan seperti Adafruit GFX Library dan Adafruit NeoPixel akan terinstal secara otomatis.

Konfigurasi pengguna yang penting
SSID dan kata sandi Wi-Fi (peka huruf besar/kecil)
Ganti nilai berikut dengan kredensial Wi-Fi Anda sendiri:

const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
Penting: SSID Wi-Fi bersifat peka huruf besar/kecil. SSID bernama "Book" tidak sama dengan "book". Jika kapitalisasi tidak cocok persis, ESP32 akan gagal terhubung.
Server NTP, zona waktu, dan waktu musim panas
Jam menyinkronkan waktu menggunakan server NTP berikut:
const char* ntpServer = "pool.ntp.org";
Waktu lokal dihitung menggunakan offset berikut:
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_secmendefinisikan offset UTC Anda dalam detikdaylightOffset_secmenambahkan satu jam saat waktu musim panas aktif (gunakan0jika tidak diperlukan)
Nilai-nilai ini diterapkan dengan:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Kecerahan otomatis siang / malam
Kecerahan tampilan berubah secara otomatis berdasarkan jam saat ini:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22; // 10 malam
const int NIGHT_END_HOUR = 6; // 6 pagi
Antara pukul 10 malam dan 6 pagi, kecerahan matriks dikurangi agar nyaman di lingkungan gelap. Di luar jam tersebut, kecerahan siang penuh dipulihkan. Anda dapat menyesuaikan nilai-nilai ini sesuai dengan pencahayaan ruangan Anda.
Konfigurasi warna RGB
Warna teks jam didefinisikan menggunakan nilai RGB (Merah, Hijau, Biru), di mana setiap saluran berkisar dari 0 hingga 255. Beberapa warna dapat disimpan dalam array dan diputar secara otomatis:
uint8_t userColors[][3] = {
{17, 43, 171}, // Biru Muda
{255, 0, 0}, // Merah
{0, 255, 0}, // Hijau
{255, 165, 0}, // Oranye
{255, 0, 255} // Magenta
};
Jika useFixedColor diatur ke true, jam selalu menggunakan satu warna. Jika diatur ke false, warna berubah secara otomatis setelah setiap guliran penuh waktu.
Untuk menemukan nilai RGB yang tepat untuk warna apa pun dengan cepat, gunakan alat Pemilih Warna RGB: Pemilih Warna .
Tampilan waktu dan guliran
Waktu saat ini diformat sebagai HH:MM dan disimpan dalam buffer karakter kecil. Karena tampilan hanya selebar 8 piksel, teks berjalan dengan mulus dari kanan ke kiri. Setelah waktu sepenuhnya meninggalkan tampilan, warna berikutnya (jika diaktifkan) dipilih untuk putaran berikutnya.
Demonstrasi
Setelah mengunggah sketsa:
- ESP32-S3 terhubung ke Wi-Fi
- Waktu disinkronkan dari internet
- Waktu saat ini berjalan melintasi matriks RGB
- Kecerahan berubah secara otomatis antara siang dan malam
- Warna teks tetap atau berputar berdasarkan pengaturan Anda
Unduhan dan tautan
Kode sumber lengkap disediakan di bawah artikel ini. Tautan ke komponen, alat, dan lembar data tersedia di bawah artikel ini.
Tutorial ini adalah bagian dari: Matriks LED RGB ESP32-S3
- Proyek Matriks LED RGB ESP32-S3 1- Titik Dasar
- Proyek Matriks LED RGB ESP32-S3 2 - Teks Berjalan
- Proyek Matriks LED RGB ESP32-S3 3 - Teks dari ponsel
- Proyek Matriks LED RGB ESP32-S3 4 - Titik miring
- Proyek Matriks LED RGB ESP32-S3 5 - Panah selalu ke atas
- Proyek Matriks LED RGB ESP32-S3 6 - Permainan Cible
- Proyek Jam Wi-Fi + NTP dengan Matriks LED RGB ESP32-S3 -1 Jam Dasar
- Proyek Jam Internet Matriks LED RGB ESP32-S3 - 2 Jam Tampilan Waktu & Tanggal Multi Warna
- Proyek Jam Internet Matriks LED RGB ESP32-S3 - 5 Warna Pelangi
- Proyek Jam Internet Matriks LED RGB ESP32-S3 - 4 Warna acak
- ESP32-S3 RGB LED Matrix test for RGB, GRB setting
/*
* =====================================================================================
* ESP32-S3 INTERNET RGB CLOCK (8x8 Matrix) - Project 3- Night color with Date
* =====================================================================================
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT840
* 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).
* =====================================================================================
*/
#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; // 10 PM
const int NIGHT_END_HOUR = 6; // 6 AM
// --- 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]);
// --- INTERVALS ---
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";
int16_t scrollX = 8;
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
void updateTimeText() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return;
// Format HH:MM
snprintf(timeText, sizeof(timeText), "%02d:%02d", timeinfo.tm_hour, timeinfo.tm_min);
// Apply Auto-Brightness
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);
// Pick the color (Fixed or Cycle)
int idx = useFixedColor ? fixedColorIndex : currentColorIndex;
matrix.setTextColor(matrix.Color(userColors[idx][0], userColors[idx][1], userColors[idx][2]));
matrix.setCursor(scrollX, 0);
matrix.print(timeText);
matrix.show();
scrollX--;
// Width for "HH:MM" is roughly 30 pixels
int16_t textWidth = 30;
// TRIGGER: When time is fully off-screen
if (scrollX < -textWidth) {
scrollX = matrix.width(); // Reset position to right side
// Cycle to the next color in the array for the next pass
if (!useFixedColor) {
currentColorIndex = (currentColorIndex + 1) % totalColors;
Serial.print("Next cycle color index: ");
Serial.println(currentColorIndex);
}
}
}
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);
updateTimeText();
}
void loop() {
unsigned long now = millis();
// Update time digits and brightness once per second
if (now - lastTimeUpdateMs >= timeUpdateIntervalMs) {
lastTimeUpdateMs = now;
updateTimeText();
}
// Handle the scrolling animation
if (now - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = now;
scrollTime();
}
}
Hal-hal yang mungkin Anda butuhkan
-
Amazon
-
eBay
-
AliExpressPurchase ESP32-S3 RGB matrix from AliExpresss.click.aliexpress.com
-
AliExpressPurchase ESP32-S3 RGB matrix from AliExpress (2)s.click.aliexpress.com
Sumber daya & referensi
-
Video
-
Internal🎨 Color picker Toolrobojax.com
Berkas📁
File Fritzing
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB