Raadi Koodka

Mashruuca Saacadda Shabakadda ee ESP32-S3 RGB LED Matrix - 2 Saacadood oo midabbo kala duwan leh oo Muujinaya Waqtiga & Taariikhda

Mashruuca Saacadda Shabakadda ee ESP32-S3 RGB LED Matrix - 2 Saacadood oo midabbo kala duwan leh oo Muujinaya Waqtiga & Taariikhda

SaaS-ga S3 RGB NeoMatrix Internet Clock oo Muujinaya Waqtiga & Taariikhda

Mashruucani waa saacad Internet ah oo la xoojiyay oo ah ESP32-S3 RGB Matrix, kaas oo aan kaliya muujinayo waqtiga hadda jira, laakiin sidoo kale si joogto ah u muujiya taariikhda. ESP32-S3 wuxuu ku xidhmaa Wi-Fi, wuxuu waqtiga kala soo qaadaa server-ka NTP, wuxuuna ku duubaa HH:MM ama taariikhda (tusaale ahaan SEP 21) 8×8 RGB NeoMatrix. Muujinta waxay taageertaa xakamaynta iftiinka maalin/habeen oo toos ah iyo midabada RGB ee la habayn karo.

ESP32-s3_internet_clock_animation

Waxa saacaddani qabato

Ka dib marka uu ku xidhmao shabakaddaada Wi-Fi, ESP32-S3 wuxuu ka soo qaadaa waqtiga maxalliga ah ee hadda jira internetka. Saacaddu waxay caadi ahaan ku duubtaa waqtiga, laakiin wakhti go'an ka dib waxay u beddeshaa inay muujiso taariikhda. Midabka qoraalka wuxuu noqon karaa mid go'an ama si toos ah u wareegi kara dhowr midab oo isticmaaluhu qeexay. Iftiinka si toos ah ayaa loo yareeyaa habeenkii si muujintu u fududaato indhaha.

Maktabadaha la isticmaalay

Qoraalkani wuxuu ku xiran yahay maktabadahan soo socda:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>

Ku rakib Adafruit NeoMatrix oo ka yimid Arduino Library Manager. Dhammaan waxyaabaha lagama maarmaanka ah sida Adafruit GFX Library iyo Adafruit NeoPixel si toos ah ayaa loo rakibi doonaa.

Qaabaynta isticmaalaha ee muhiimka ah

Wi-Fi SSID iyo password (xarfaha waa muhiim)

Waa inaad ku beddeshaa macluumaadka Wi-Fi ee adiga kuu gaarka ah:

const char* WIFI_SSID     = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";

Muhiim: Wi-Fi SSID-yada xarfaha waa muhiim. Tusaale ahaan, SSID lagu magacaabo "Book" kuma eka "book". Haddii xarfaha weyn/yaryar aan si sax ah u ekaan, ESP32 wuxuu ku guuldareystaa inuu ku xidhmao.

NTP server, time zone, iyo daylight saving

Saacaddu waxay isticmaashaa server-ka waqtiga internetka:

const char* ntpServer = "pool.ntp.org";

Waqtiga maxalliga ah waxaa lagu xisaabiyaa iyadoo la isticmaalayo offsets-yadan:

const long  gmtOffset_sec     = -5 * 3600; 
const int   daylightOffset_sec = 3600;
  • gmtOffset_sec: Offset-kaaga UTC ee ilbiriqsi (tusaale: UTC-5 = -5 * 3600)
  • daylightOffset_sec: Isticmaal 3600 DST ama 0 haddii DST aan la isticmaalin

Qaabayntan waxaa lagu dabaqaa iyadoo la isticmaalayo:

configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

Xakamaynta iftiinka (maalin / habeen)

Mashruucani wuxuu si toos ah u hagaajiyaa iftiinka iyadoo ku xiran saacadda maalinta:

const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;

Inta u dhaxaysa 10 PM iyo 6 AM, iftiinka waa la yareeyaa si muujintu uga yaraato qalalaasaha jawiga mugdiga ah. Waxaad hagaajin kartaa qiimahan si ay ugu habboonaato dookhaaga.

Qaabaynta midabka RGB

Saacaddu waxay taageertaa labada qaab: midab go'an iyo wareegga midabka tooska ah. Midabada RGB ee isticmaaluhu qeexay waxaa lagu kaydiyaa array:

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
};

Midab kastaa wuxuu isticmaalaa qiimaha RGB (Red, Green, Blue) oo u dhexeeya 0 ilaa 255. Adigoo beddelaya lambarradan, waxaad abuuri kartaa midab kasta oo muujinta ah. Haddii useFixedColor lagu dejiyo true, saacaddu had iyo jeer waxay isticmaashaa hal midab. Haddii lagu dejiyo false, midabku si toos ah ayuu u beddelmaa ka dib markii duubista oo dhammaatay.

Si aad si dhakhso leh u hesho qiimaha RGB ee saxda ah ee midab kasta oo aad rabto, isticmaal qalabka RGB Color Picker Color Picker .

Qaabaynta waqtiga iyo taariikhda

Waqtiga waxaa loo qaabeeyaa HH:MM waxaana lagu kaydiyaa buffer-ka xarfaha yar. Taariikhda waxaa loo qaabeeyaa sida xarfo waaweyn oo ah sida SEP 21. Muujintu si toos ah ayay u beddeshaa inta u dhaxaysa waqtiga iyo taariikhda wakhti go'an.

Nidaamka duubista ee muujinta 8×8

Sababtoo ah matrix-ka 8×8 aad ayuu u yar yahay inuu muujiyo qoraalka oo dhan hal mar, qoraalku wuxuu si toos ah u duubaa qoraalka jiif ahaan. Marka qoraalku si buuxda uga baxo muujinta, midabka waa la cusbooneysiiyaa waxaana nuxurku u beddelmaa waqtiga iyo taariikhda marka loo baahdo.

Muuujin

Ka dib markaad soo geliso qoraalka:

  • ESP32 wuxuu ku xidhmaa Wi-Fi
  • Waqtiga waxaa laga soo qaadaa internetka
  • Waqtiga hadda jira wuxuu ku duubmaa matrix-ka
  • Taariikhdu waxay soo baxdaa si joogto ah
  • Iftiinka si toos ah ayuu u hagaajiyaa maalin iyo habeen

Soo dejinta iyo linkiyada

Koodhka dhammaystiran ee asalka ah ayaa hoos ku qoran maqaalkan. Linkiyada qaybaha, qalabka, iyo xaashida xogta ayaa sidoo kale hoos ka heli kara maqaalkan.

Sawirro

ESP32 S3 Matrix
ESP32 S3 Matrix
ESP32 S3 Matrix  pin out
ESP32 S3 Matrix pin out
ESP32-S3_RGB_8x8_matrix-3
ESP32-S3_RGB_8x8_matrix-3
ESP32-S3_RGB_8x8_matrix1
ESP32-S3_RGB_8x8_matrix1
ESP32-S3_RGB_8x8_matrix-2
ESP32-S3_RGB_8x8_matrix-2
ESP32-s3_internet_clock_animation
ESP32-s3_internet_clock_animation
869-ESP32-S3 RGB LED Matrix Internte Clock Project 2 - Multi Color with Date
Luqadda: C++
/*
 * =====================================================================================
 * 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();
  }
}

Waad u baahan tahay

Kheyraadka & Tixraacyada

Faylasha📁

Faylka Fritzing