Search Code

Aikin ESP32-S3 RGB LED Matrix Internet Clock - Launi 5 na Bakan gizo

Aikin ESP32-S3 RGB LED Matrix Internet Clock - Launi 5 na Bakan gizo

Agogon Intanet na ESP32-S3 tare da Tasirin Launi na Bakan Gizo

Wannan aikin agogon Intanet ne na RGB Matrix 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. Ba kamar nau'ikan masu launi masu ƙarfi ko bazuwar ba, wannan agogon yana amfani da tasirin launi na bakan gizo mai santsi, inda kowane hali ke ci gaba da canzawa ta cikin bakan RGB yayin da yake gudana. Agogon kuma yana nuna kwanan wata lokaci-lokaci kuma yana daidaita haske ta atomatik tsakanin rana da dare.

ESP32-s3_internet_clock_animation

Yadda wannan agogon ke aiki

Da zarar an kunna shi ta USB-C, ESP32-S3 yana haɗawa da cibiyar sadarwar Wi-Fi ɗin ku kuma yana dawo da lokacin gida na yanzu daga intanet. Nunin yawanci yana gudanar da lokaci, amma a wani tazara da aka ƙayyade yana canzawa zuwa nuna kwanan wata. Dukansu lokaci da kwanan wata ana nuna su ta amfani da tasirin bakan gizo mai ƙarfi, wanda ke haifar da nuni mai haske da rai a kan ƙaramin matrix 8×8.

Littattafan da aka yi amfani da su

Sketch ɗin ya dogara da littattafai masu zuwa:

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

Shigar da Adafruit NeoMatrix ta amfani da Arduino Library Manager. Abubuwan da ya dogara da su, gami da Adafruit GFX Library da Adafruit NeoPixel, za a shigar da su ta atomatik.

Muhimman saitunan mai amfani

Filin data na Matrix (RGB matrix da aka gina a ciki)

Ko da yake RGB matrix ɗin yana haɗe da allon ESP32-S3, dole ne a bayyana filin data a cikin lambar:

#define MATRIX_PIN 14

GPIO 14 ana yawan amfani da shi a kan allunan RGB matrix na ESP32-S3. Idan nau'in allon ku yana amfani da wani fili daban, sabunta wannan ƙimar.

SSID da kalmar sirri na Wi-Fi (ana kula da manyan da ƙananan haruffa)

Maye gurbin bayanan shiga Wi-Fi da bayanan cibiyar sadarwar ku:

const char* WIFI_SSID     = "your WIFI";
const char* WIFI_PASSWORD = "passW0rd";

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

Uwar garken NTP, yankin lokaci, da canjin lokaci na rana

Agogon yana daidaita lokaci ta amfani da uwar garken NTP na intanet:

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

Ana lissafin lokacin gida ta amfani da waɗannan ƙididdiga:

// Toronto-ish: UTC-5, plus 1 hour DST
const long  gmtOffset_sec     = -5 * 3600;
const int   daylightOffset_sec = 3600;
  • gmtOffset_sec: Ƙididdigar UTC a cikin daƙiƙa (misali: UTC-5 = -5 * 3600)
  • daylightOffset_sec: Yi amfani da 3600 idan canjin lokaci na rana yana aiki, ko 0 idan ba a yi amfani da shi ba

Ana amfani da waɗannan ƙididdigar ta amfani da:

configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

Hasken rana / dare ta atomatik

Hasken yana canzawa ta atomatik bisa ga 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, matrix ɗin yana yin duhu don rage haske mai cutarwa. A lokutan rana, ana mayar da haske na yau da kullun.

Tasirin launi na bakan gizo

Wannan aikin yana amfani da dabaran launi na RGB na gargajiya don samar da launukan bakan gizo masu santsi. Kowane hali ana zana shi da ɗan bambancin launi daban, kuma launukan suna canzawa da lokaci, suna samar da raye-rayen bakan gizo mai gudana.

// Helper to create Rainbow Colors
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if (WheelPos < 85) {
    return matrix.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if (WheelPos < 170) {
    WheelPos -= 85;
    return matrix.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return matrix.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

Yayin da rubutun ke gudana, kowane hali yana ci gaba ta cikin bakan RGB, yana samar da tasirin bakan gizo mai ci gaba wanda ke da ban sha'awa musamman a kan ƙaramin nuni 8×8.

Halayen nuna lokaci da kwanan wata

Agogon yana kiyaye ma'ajiyai daban-daban don lokaci da kwanan wata:

  • Lokaci: HH:MM
  • Kwanan wata: MMM DD (misali JAN 08)

Ana nuna kwanan wata a wani tazara da aka ƙayyade:

const uint32_t dateIntervalMs = 60000; // Show date every 1 minute

A ƙarshen kowane zagaye na gudana, lambar tana yanke shawara ko ta ci gaba da nuna lokaci ko ta canza zuwa kwanan wata.

Dabarar gudana a kan matrix 8×8

Saboda nuni ɗin faɗinsa pixels 8 ne kawai, rubutun yana gudana da santsi daga dama zuwa hagu. Da zarar rubutun ya fita gaba ɗaya daga allo, cursor ɗin yana sake farawa kuma ana loda abun ciki na gaba (lokaci ko kwanan wata) don zagaye na gaba.

Nuni

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

  • ESP32-S3 yana haɗawa da cibiyar sadarwar Wi-Fi ɗin ku
  • Ana daidaita lokaci daga intanet
  • Lokaci yana gudana a tsarin HH:MM
  • Kwanan wata yana bayyana lokaci-lokaci
  • Duk rubutu ana nuna shi da tasirin bakan gizo mai rai da santsi
  • Nuni ɗin yana yin duhu ta atomatik da dare kuma yana haskakawa da rana

Saukewa da hanyoyin haɗi

Cikakken lambar tushe an bayar da shi a ƙasan wannan labarin. Kayan aiki masu amfani da nassoshi, gami da RGB Color Picker, suma an haɗa su a ƙasan 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
872-ESP32-S3 RGB LED Matrix Internte Clock Project 5 - Rainbow Color
Harshe: C++
/*
 * =====================================================================================
 * ESP32-S3 CLOCK - RAINBOW DATE & SOLID TIME - Project 5- RAINBOW MODE
 * =====================================================================================
 watch video https://youtube.com/shorts/4iWjLiD7fS8
 📚⬇️ Download and resource page https://robojax.com/RJT842
 * Author: Gemini (AI Thought Partner) & Ahmad Shamshiri (Robojax.com)
 * Date: 07 Jan 2026

 * =====================================================================================
 * ESP32-S3 INTERNET RGB CLOCK - RAINBOW MODE

 * * FEATURES: 
 * - Full Rainbow: Time and Date use flowing rainbow colors.
 * - Auto-Brightness: Dims at night (22:00 to 06:00).
 * - Custom WiFi: Robust connection logic with retries.
 * =====================================================================================
 */

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

#define MATRIX_PIN 14

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

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

// --- INTERVALS & TRACKING ---
unsigned long lastDateShowMs = 0;
const uint32_t dateIntervalMs = 60000; // Show date every 1 minute
bool isShowingDate = false;

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;
unsigned long lastScrollMs = 0;
const uint16_t scrollIntervalMs = 100;
unsigned long lastTimeUpdateMs = 0;

// Helper to create Rainbow Colors
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return matrix.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return matrix.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return matrix.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

void updateClockData() {
  struct tm timeinfo;
  if (!getLocalTime(&timeinfo)) return;
  
  // Update Time and Date strings
  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]);

  // Handle Night Dimming
  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);
  
  int len = strlen(currentDisplayText);
  int16_t x = scrollX;

  // Draw each character with a shifting rainbow color
  for (int i = 0; i < len; i++) {
    uint8_t colorPos = (uint8_t)((i * 30) + (millis() / 5)); 
    matrix.setTextColor(Wheel(colorPos));
    matrix.setCursor(x + (i * 6), 0);
    matrix.print(currentDisplayText[i]);
  }

  matrix.show();
  scrollX--;

  int16_t textWidth = len * 6;
  if (scrollX < -textWidth) {
    scrollX = matrix.width();
    
    // Switch between Date and Time at end of cycle
    if (millis() - lastDateShowMs > dateIntervalMs) {
      strcpy(currentDisplayText, dateText);
      lastDateShowMs = millis();
      isShowingDate = true;
    } else {
      strcpy(currentDisplayText, timeText);
      isShowingDate = false;
    }
  }
}

void setup() {
  Serial.begin(115200);
  delay(1000);
  Serial.println("\nESP32-S3 Rainbow Clock Initializing...");

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

  // 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);
  
  updateClockData();
  strcpy(currentDisplayText, timeText); // Load initial time
}

void loop() {
  unsigned long now = millis();

  // Update time digits and check brightness every second
  if (now - lastTimeUpdateMs >= 1000) {
    lastTimeUpdateMs = now;
    updateClockData(); 
  }

  // Handle the scrolling animation
  if (now - lastScrollMs >= scrollIntervalMs) {
    lastScrollMs = now;
    scrollDisplay();
  }
}

Albarkatun da kuma shafukan da za a duba

Fayiloli📁

Fayil Fritzing