Search Code

Mashruuca Saacadda Shabakadda ee ESP32-S3 RGB LED Matrix - 4 Midab oo Random ah

Mashruuca Saacadda Shabakadda ee ESP32-S3 RGB LED Matrix - 4 Midab oo Random ah

Saatga Internet-ka ee ESP32-S3 oo leh Midabbo RGB Random ah

Mashruucani waa Saatga Internet-ka ee ESP32-S3 RGB Matrix kaas oo ku xidhma Wi-Fi-ga, isku waafajiya waqtiga maxalliga ah ee server-ka NTP, oo ku wareejiya waqtiga qaabka HH:MM guud ahaan NeoMatrix-ka RGB ee 8×8 ee ku dhex jira. Noocan, saacadaha, kolonka, iyo daqiiqadaha, mid kastaa wuxuu ku muujinayaa midabbo random ah oo la xusho wareeg kasta oo buuxa oo wareegga ah, taasoo abuuraysa bandhig saacadeed oo firfircoon oo ciyaar ah oo si joogto ah isu beddelaya.

ESP32-s3_internet_clock_animation

Sida saacaddani u shaqeyso

Ka dib marka loo shido guddiga iyada oo loo marayo USB-C, ESP32-S3 wuxuu ku xidhmaa shabakaddaada Wi-Fi wuxuuna ka soo qaadaa waqtiga maxalliga ah ee hadda jira internetka. Waqtiga waxaa loo qaybiyaa saddex qaybood—saacadaha, kolonka, iyo daqiiqadaha—oo qayb kasta si gooni ah ayaa loo sawiraa matrix-ka RGB. Marka qoraalku si buuxda uga baxo shaashadda, midabbo random cusub ayaa loo xushaa wareegga xiga.

Maktabadaha la isticmaalay

Qoraalkani wuxuu isticmaalaa maktabadaha soo socda:

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

Ku rakib Adafruit NeoMatrix ka Maareeyaha Maktabadda Arduino. Waxyaabaha lagama maarmaanka ah sida Adafruit GFX Library iyo Adafruit NeoPixel ayaa si toos ah loo rakibi doonaa.

Qaabaynta isticmaalaha ee muhiimka ah

Biyinta xogta Matrix-ka (matrix-ka RGB ee ku dhex jira)

In kasta oo matrix-ka RGB uu ku dhex jiro guddiga, haddana biyinta xogta waa in weli lagu qeexaa koodka:

#define MATRIX_PIN 14

GPIO 14 ayaa caadi ahaan loo isticmaalaa guddiyada matrix-ka RGB ee ESP32-S3. Haddii nooca guddigaagu uu isticmaalo biin ka duwan, cusboonaysii qiimahan si waafaqsan.

Wi-Fi SSID iyo password-ka (xarfaha waa muhiim)

Ku beddel xogta Wi-Fi-ga faahfaahinta shabakadaada gaarka ah:

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

Muhiim: Wi-Fi SSIDs waa xarfaha muhiim. SSID lagu magacaabo "Book" kuma eka "book". Haddii xarfaha weyni si sax ah ugu habboonaan waayaan, ESP32-S3 wuxuu ku guuldareysan doonaa inuu ku xidhmaado.

Server-ka NTP, aagga waqtiga, iyo badbaadinta maalinta

Isku-waafajinta waqtiga waxaa lagu sameeyaa iyada oo loo marayo server-ka NTP ee internetka:

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

Waqtiga maxalliga ah waxaa lagu xisaabiyaa iyada oo la isticmaalayo UTC iyo offsets-ka badbaadinta maalinta:

// Toronto-ish: UTC-5, plus 1 hour DST
const long  gmtOffset_sec     = -5 * 3600;
const int   daylightOffset_sec = 3600;
  • gmtOffset_sec: Offset-ka UTC ee ilbiriqsiyo (ku hagaaji goobtaada)
  • daylightOffset_sec: Isticmaal 3600 marka DST uu firfircoon yahay, ama 0 haddii kale

Qaabayntan waxaa lagu dabaqaa iyada oo la isticmaalayo:

configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

Iftiinka maalinta / habeenka ee tooska ah

Saatadu waxay si toos ah u hagaajisaa iftiinka iyada oo ku saleysan saacadda hadda jirta:

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, bandhigu wuu yaraadaa si loo yareeyo iftiinka xagjirka ah ee jawiga mugdiga ah. Inta lagu jiro saacadaha maalinta, matrix-ku wuxuu ku soo noqdaa iftiinka caadiga ah.

Hab-dhaqanka midabka RGB ee random

Liis horay loo qeexay oo midabbo RGB ah ayaa lagu kaydiyaa array, halkaas oo midab kastaa lagu qeexo iyada oo la isticmaalayo qiimaha Red, Green, iyo Blue ee u dhexeeya 0 ilaa 255:

uint8_t userColors[][3] = {
  {255, 0, 0},    // Red
  {0, 255, 0},    // Green
  {0, 0, 255},    // Blue
  {255, 165, 0},  // Orange
  {255, 0, 255},  // Magenta
  {0, 255, 255},  // Cyan
  {255, 255, 0}   // Yellow
};

Wareeg kasta oo buuxa oo wareegga ah:

  • Tirada saacadaha waxaa loo qoondeeyaa midab random ah
  • Kolonka wuxuu helaa midab random oo ka duwan
  • Tirada daqiiqadaha waxay helaan midab random oo kale

Tani waxay soo saartaa isku-dhaf midabbo ah oo si joogto ah isu beddelaya kaas oo saacadda ka dhigaya mid muuqaal ahaan xiiso leh. Si aad u abuurto midabbo gaar ah oo adiga kuu gaar ah, waxaad isticmaali kartaa Qalabka Xulashada Midabka RGB: RGB Color Picker.

Mantaqa sawirista waqtiga

Waqtiga waxaa loo qaybiyaa saddex qaybood:

  • Saacadaha: HH
  • Kolonka: :
  • Daqiiqadaha: MM

Qayb kasta si gooni ah ayaa loo sawiraa si ay u yeelato midabkeeda gaarka ah, halka dhammaan qaybuhu ay si wada jir ah u dhaqaaqaan si ay u sameeyaan animation-ka wareegga ah ee siman ee 8×8 bandhiga.

Abuurista midabka random

Si loo hubiyo in midabku random yahay, qoraalku wuxuu ku beeraa generator-ka nambarka random marka la bilaabayo iyada oo la isticmaalayo biin analog ah oo aan ku xidhnayn:

randomSeed(analogRead(0));

Tani waxay hubinaysaa in isku-dhafka midabbadu uu ka duwan yahay markasta oo la shido iyo wareeg kasta oo wareegga ah.

Muuujin

Ka dib marka la soo geliyo qoraalka oo guddiga loo shido iyada oo loo marayo USB-C:

  • ESP32-S3 wuxuu ku xidhmaa shabakadaada Wi-Fi
  • Waqtiga waxaa laga soo waafajiyaa internetka
  • Waqtigu wuxuu ku wareegayaa qaabka HH:MM
  • Saacadaha, kolonka, iyo daqiiqadaha waxay u beddelaan midabbo random ah wareeg kasta
  • Bandhigu si toos ah ayuu u yaraadaa habeenkii

Soo dejinta iyo linkiyada

Koodhka isku dhammaystiran ee ilaha ayaa hoos ku qoran maqaalkan. Qalabka waxtarka leh iyo tixraacyada ayaa hoos ku xiran 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
873-ESP32-S3 RGB LED Matrix Internte Clock Project 4 - Random Color
Luqadda: C++
/*
 * =====================================================================================
 * ESP32-S3 INTERNET RGB CLOCK (8x8 Matrix) - Project 4- Random Color
 * =====================================================================================
 watch video https://youtube.com/shorts/4iWjLiD7fS8
 📚⬇️ Download and resource page https://robojax.com/RJT843
 * 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).
 * =====================================================================================
 */
/*
 * =====================================================================================
 * ESP32-S3 INTERNET CLOCK - MULTI-COLOR ELEMENTS
 * =====================================================================================
 * Each part of the time (HH : MM) gets a different random color from your list.
 * Colors only change once the full scroll cycle is finished.
 * =====================================================================================
 */

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

#define MATRIX_PIN 14

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

uint8_t userColors[][3] = {
  {255, 0, 0},    // Red
  {0, 255, 0},    // Green
  {0, 0, 255},    // Blue
  {255, 165, 0},  // Orange
  {255, 0, 255},  // Magenta
  {0, 255, 255},  // Cyan
  {255, 255, 0}   // Yellow
};
int totalColors = sizeof(userColors) / sizeof(userColors[0]);

// Variables to store the current random color indices
int hourColorIdx = 0;
int colonColorIdx = 1;
int minColorIdx = 2;

// --- GLOBALS ---
Adafruit_NeoMatrix matrix(8, 8, MATRIX_PIN,
  NEO_MATRIX_TOP    + NEO_MATRIX_LEFT +
  NEO_MATRIX_ROWS   + NEO_MATRIX_PROGRESSIVE,
  NEO_RGB           + NEO_KHZ800);

char hourText[3], minText[3];
int16_t scrollX = 8;
unsigned long lastScrollMs = 0;
const uint16_t scrollIntervalMs = 100;

// 👇 REPLACE these with your real home WiFi name & password
const char* WIFI_SSID     = "your WiFi SSID";
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


void updateTimeParts() {
  struct tm timeinfo;
  if (!getLocalTime(&timeinfo)) return;
  
  snprintf(hourText, sizeof(hourText), "%02d", timeinfo.tm_hour);
  snprintf(minText, sizeof(minText), "%02d", timeinfo.tm_min);

  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);
  
  int x = scrollX;

  // 1. Draw Hours
  matrix.setTextColor(matrix.Color(userColors[hourColorIdx][0], userColors[hourColorIdx][1], userColors[hourColorIdx][2]));
  matrix.setCursor(x, 0);
  matrix.print(hourText);
  x += 12; // Move 12 pixels (2 digits * 6px)

  // 2. Draw Colon
  matrix.setTextColor(matrix.Color(userColors[colonColorIdx][0], userColors[colonColorIdx][1], userColors[colonColorIdx][2]));
  matrix.setCursor(x, 0);
  matrix.print(":");
  x += 6; // Move 6 pixels

  // 3. Draw Minutes
  matrix.setTextColor(matrix.Color(userColors[minColorIdx][0], userColors[minColorIdx][1], userColors[minColorIdx][2]));
  matrix.setCursor(x, 0);
  matrix.print(minText);

  matrix.show();
  scrollX--;

  // Total width is roughly 30 pixels (HH=12, :=6, MM=12)
  if (scrollX < -30) {
    scrollX = matrix.width(); 
    
    // Pick NEW random colors for the next cycle
    hourColorIdx = random(0, totalColors);
    colonColorIdx = random(0, totalColors);
    minColorIdx = random(0, totalColors);
  }
}

void setup() {
  Serial.begin(115200);
  
  // Seed the random generator using an unconnected analog pin
  randomSeed(analogRead(0));

  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) delay(500);
  
  // 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);
}

void loop() {
  if (millis() % 1000 == 0) updateTimeParts();

  if (millis() - lastScrollMs >= scrollIntervalMs) {
    lastScrollMs = millis();
    scrollTime();
  }
}

Kheyraadka & Tixraacyada

Faylasha📁

Faylka Fritzing