Search Code

Aikin Agogon Matrix LED RGB ESP32-S3 na Intanet - Launi 4 Bazuwa

Aikin Agogon Matrix LED RGB ESP32-S3 na Intanet - Launi 4 Bazuwa

Agogon Intanet na ESP32-S3 tare da Launuka RGB Bazuwar

Wannan aikin agogon RGB NeoMatrix na Intanet ne na ESP32-S3 wanda ke haɗawa da Wi-Fi, yana daidaita lokacin gida daga uwar garken NTP, kuma yana gudanar da lokaci a tsarin HH:MM a kan NeoMatrix na RGB 8×8 da aka gina a ciki. A wannan sigar, sa'o'i, maɗaukaki, da mintuna kowanne ana nuna su a cikin launuka bazuwar da aka zaɓa a kowane zagayowar gudana cikakke, yana haifar da nunin agogo mai ƙuzari da wasa wanda ke canzawa koyaushe.

ESP32-s3_internet_clock_animation

Yadda wannan agogo yake aiki

Bayan kunna allon ta USB-C, ESP32-S3 yana haɗawa da hanyar sadarwar Wi-Fi ɗin ku kuma yana dawo da lokacin gida na yanzu daga intanet. An raba lokacin zuwa sassa uku—sa'o'i, maɗaukaki, da mintuna—kuma kowane sashi an zana shi daban akan matrix RGB. Lokacin da rubutun ya gudana gaba ɗaya daga allon, ana zaɓar sabbin launuka bazuwar don zagayowar na gaba.

Laburaren da aka yi amfani da su

Wannan sketch ɗin yana amfani da waɗannan laburaren:

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

Shigar da Adafruit NeoMatrix daga Arduino Library Manager. Abubuwan dogaro da ake buƙata kamar Adafruit GFX Library da Adafruit NeoPixel za a shigar da su ta atomatik.

Muhimman saitunan mai amfani

Filin bayanan Matrix (RGB matrix da aka gina)

Ko da yake an haɗa matrix RGB a kan allon, dole ne a bayyana filin bayanan a cikin lambar:

#define MATRIX_PIN 14

GPIO 14 ana amfani da shi akai-akai akan allunan matrix RGB na ESP32-S3. Idan bambancin allon ku yana amfani da wani filin daban, sabunta wannan ƙimar daidai.

Wi-Fi SSID da kalmar sirri (mai kula da manyan haruffa)

Maye gurbin bayanan shiga Wi-Fi da cikakkun bayanan hanyar sadarwar ku:

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

Muhimmi: Wi-Fi SSIDs suna da kula da manyan haruffa. SSID mai suna "Book" ba ɗaya ba ne da "book". Idan manyan haruffa ba su dace daidai ba, ESP32-S3 zai kasa haɗawa.

Uwar garken NTP, yankin lokaci, da adana hasken rana

Daidaita lokaci ana yin shi ta amfani da uwar garken NTP na intanet:

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

Ana ƙididdige lokacin gida ta amfani da UTC da maƙasudin adana hasken rana:

// Toronto-ish: UTC-5, plus 1 hour DST
const long  gmtOffset_sec     = -5 * 3600;
const int   daylightOffset_sec = 3600;
  • gmtOffset_sec: Maƙasudin UTC a cikin daƙiƙa (daidaita don wurin ku)
  • daylightOffset_sec: Yi amfani da 3600 lokacin da DST ke aiki, ko 0 in ba haka ba

Ana amfani da waɗannan saitunan ta amfani da:

configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

Hasken rana / dare ta atomatik

Agogon yana daidaita haske ta atomatik bisa sa'ar yanzu:

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

Tsakanin 10 na dare da 6 na safe, nunin yana rage haske don rage ƙyalli a wurare masu duhu. A lokutan rana, matrix ɗin yana komawa ga haske na yau da kullun.

Halin launin RGB bazuwar

An adana jerin launukan RGB da aka ƙayyade a cikin array, inda kowane launi aka bayyana shi ta amfani da ƙimar Red, Green, da Blue daga 0 zuwa 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
};

A kowane zagayowar gudana cikakke:

  • Ana ba lambobin sa'o'i launi bazuwar
  • Maɗaukaki yana karɓar launi bazuwar daban
  • Lambobin mintuna suna karɓar wani launi bazuwar daban

Wannan yana haifar da haɗin launi mai canzawa koyaushe wanda ke sa agogon ya kasance mai ban sha'awa a gani. Don ƙirƙirar launukan ku na musamman, kuna iya amfani da kayan aikin RGB Color Picker: RGB Color Picker.

Dabarar nunin lokaci

An raba lokacin zuwa sassa uku:

  • Sa'o'i: HH
  • Maɗaukaki: :
  • Mintuna: MM

Kowane sashi an zana shi daban don ya iya samun launinsa, yayin da duk sassan ke motsawa tare don samar da gudana mai santsi a kan nunin 8×8.

Ƙirƙirar launi bazuwar

Don tabbatar da rashin tsarin launi, sketch ɗin yana shuka lambar bazuwar a farkon farawa ta amfani da filin analog da ba a haɗa ba:

randomSeed(analogRead(0));

Wannan yana tabbatar da cewa haɗin launuka sun bambanta a kowane kunnawa da kowane zagayowar gudana.

Nuni

Bayan ɗora sketch ɗin da kunna allon ta USB-C:

  • ESP32-S3 yana haɗawa da hanyar sadarwar Wi-Fi ɗin ku
  • An daidaita lokaci daga intanet
  • Lokaci yana gudana a tsarin HH:MM
  • Sa'o'i, maɗaukaki, da mintuna suna canzawa zuwa launuka bazuwar kowane zagayowar
  • Nunin yana rage haske ta atomatik a dare

Saukewa da hanyoyin haɗi

Cikakken lambar tushe an bayar da shi a ƙasa wannan labarin. Kayan aiki masu amfani da nassoshi an haɗa su a ƙasa wannan labarin.

Hotuna

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
Harshe: 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();
  }
}

Albarkatun da kuma shafukan da za a duba

Fayiloli📁

Fayil Fritzing