Search Code

Aikin ESP32-S3 RGB LED Matrix Agogon Intanet - Launi 3 na Dare tare da Kwanan Wata

Aikin ESP32-S3 RGB LED Matrix Agogon Intanet - Launi 3 na Dare tare da Kwanan Wata

Agogon Intanet na NeoMatrix RGB ESP32-S3 tare da Hasken Rana/Dare ta atomatik

Wannan aikin agogon Matrix RGB na ESP32-S3 ne wanda ke daidaita haske ta atomatik da rana da dare. ESP32-S3 yana haɗawa da Wi-Fi, yana daidaita lokacin yanzu daga uwar garken NTP, kuma yana mirgina lokaci a tsarin HH:MM a kan NeoMatrix RGB 8×8. Agogon kuma yana goyan bayan launuka na RGB tsayayyu ko masu juyawa don rubutun nuni.

Abin da wannan agogo yake yi

Bayan kunnawa, ESP32-S3 yana haɗawa da hanyar sadarwar Wi-Fi ɗin ku kuma yana dawo da lokacin gida na yanzu daga intanet. Lokacin yana mirgina cikin sauƙi a kan matrix na LED. A lokutan dare, nuni yana rage haske ta atomatik zuwa ƙaramin haske, yayin da da rana yake komawa zuwa matakin haske mafi girma.

ESP32-s3_internet_clock_animation

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. Duk abubuwan dogaro da ake buƙata kamar Adafruit GFX Library da Adafruit NeoPixel za a shigar da su ta atomatik.

Muhimmin saitin mai amfani

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

Maye gurbin waɗannan ƙimar da bayanan Wi-Fi ɗin ku:

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

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

Uwar garken NTP, yankin lokaci, da canjin lokacin rana

Agogon yana daidaita lokaci ta amfani da wannan uwar garken NTP:

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

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

const long  gmtOffset_sec     = -5 * 3600; 
const int   daylightOffset_sec = 3600;
  • gmtOffset_sec yana bayyana ƙididdigar UTC ɗin ku a cikin daƙiƙa
  • daylightOffset_sec yana ƙara awa ɗaya lokacin da canjin lokacin rana ke aiki (yi amfani da 0 idan ba a buƙata ba)

Ana amfani da waɗannan ƙimar tare da:

configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

Hasken rana/dare ta atomatik

Hasken nuni yana canzawa ta atomatik bisa sa'ar yanzu:

const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22; // 10 na dare
const int NIGHT_END_HOUR = 6;    // 6 na safe

Tsakanin 10 na dare zuwa 6 na safe, ana rage hasken matrix don ya zama mai daɗi a wurare masu duhu. A wajen waɗannan sa'o'in, ana mayar da cikakken hasken rana. Kuna iya daidaita waɗannan ƙimar don dacewa da hasken ɗakin ku.

Saitin launi na RGB

Launin rubutun agogon an bayyana shi ta amfani da ƙimar RGB (Ja, Kore, Shudi), inda kowane tashar ke daga 0 zuwa 255. Ana iya adana launuka da yawa a cikin tsararru kuma a juyar da su ta atomatik:

uint8_t userColors[][3] = {
  {17, 43, 171},  // Shudi Mai Haske
  {255, 0, 0},    // Ja
  {0, 255, 0},    // Kore
  {255, 165, 0},  // Orange
  {255, 0, 255}   // Magenta
};

Idan an saita useFixedColor zuwa true, agogon koyaushe yana amfani da launi ɗaya. Idan an saita zuwa false, launi yana canzawa ta atomatik bayan kowane cikakken mirginawar lokacin.

Don samun ƙimar RGB daidai ga kowane launi cikin sauri, yi amfani da kayan aikin RGB Color Picker: Color Picker .

Nuni da mirginawar lokaci

Ana tsara lokacin yanzu a matsayin HH:MM kuma ana adana shi a cikin ƙaramin buffer na haruffa. Saboda nuni yana da faɗin pixels 8 kawai, rubutu yana mirgina cikin sauƙi daga dama zuwa hagu. Da zarar lokacin ya fita gaba ɗaya daga nuni, za a zaɓi launi na gaba (idan an kunna shi) don zagaye na gaba.

Nuni

Bayan ɗora sketch ɗin:

  • ESP32-S3 yana haɗawa da Wi-Fi
  • Ana daidaita lokaci daga intanet
  • Lokacin yanzu yana mirgina a kan matrix na RGB
  • Hasken yana canzawa ta atomatik tsakanin rana da dare
  • Launin rubutu ya kasance tsayayye ko yana juyawa bisa saitunan ku

Saukewa da hanyoyin haɗi

Cikakken lambar tushe an bayar da shi a ƙasan wannan labarin. Hanyoyin haɗi zuwa sassa, kayan aiki, da takaddun bayanai suna samuwa 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
870-ESP32-S3 RGB LED Matrix Internte Clock Project 3 - Night Color with Date
Harshe: C++
/*
 * =====================================================================================
 * 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();
  }
}

Abin da zaka iya bukata

Albarkatun da kuma shafukan da za a duba

Fayiloli📁

Fayil Fritzing