Search Code

Aikin ESP32-S3 RGB LED Matrix Agogon Intanet - Nunin Lokaci & Kwanan Wata masu Launi da yawa na Agogo 2

Aikin ESP32-S3 RGB LED Matrix Agogon Intanet - Nunin Lokaci & Kwanan Wata masu Launi da yawa na Agogo 2

Agogon Intanet na NeoMatrix RGB ESP32-S3 tare da Nunin Lokaci & Kwanan Wata

Wannan aikin ingantaccen agogon Intanet na Matrix RGB ESP32-S3 ne wanda ba wai kawai yana nuna lokaci na yanzu ba, har ma yana nuna kwanan wata a lokaci-lokaci. ESP32-S3 yana haɗawa da Wi-Fi, yana daidaita lokaci daga uwar garken NTP, kuma yana gudanar da ko dai HH:MM ko kwanan wata (misali SEP 21) a kan 8×8 RGB NeoMatrix. Nunin yana goyan bayan sarrafa haske na rana/dare ta atomatik da launukan RGB da za a iya daidaitawa.

ESP32-s3_internet_clock_animation

Abin da wannan agogo yake yi

Bayan haɗawa da hanyar sadarwar Wi-Fi naka, ESP32-S3 yana ɗauko lokacin gida na yanzu daga intanet. Agogon yana gudanar da lokaci akai-akai, amma a tazara tsayayyiyar yana canzawa zuwa nuna kwanan wata. Launin rubutu na iya zama ƙayyadadden launi ɗaya ko kuma ya canza ta atomatik tsakanin launuka masu yawa da mai amfani ya ayyana. Hasken yana raguwa ta atomatik da dare don sa nunin ya fi sauƙi ga idanu.

Laburaren da aka yi amfani da su

Wannan sketch ya dogara 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 daidaitawar mai amfani

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

Dole ne ka maye gurbin bayanan shiga Wi-Fi da bayanan hanyar sadarwar naka:

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

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

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

Agogon yana amfani da uwar garken lokaci na intanet:

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: Ƙididdigar UTC naka a cikin daƙiƙa (misali: UTC-5 = -5 * 3600)
  • daylightOffset_sec: Yi amfani da 3600 don DST ko 0 idan ba a yi amfani da DST ba

Ana amfani da waɗannan saitunan ta amfani da:

configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

Sarrafa haske (rana / dare)

Wannan aikin yana daidaita haske ta atomatik bisa sa'ar rana:

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, hasken yana raguwa don sa nunin ya rage damuwa a wurare masu duhu. Kana iya daidaita waɗannan ƙimar don dacewa da abin da kake so.

Daidaitawar launin RGB

Agogon yana goyan bayan yanayin launi ƙayyadadde da kuma canjin launi ta atomatik. Launukan RGB da mai amfani ya ayyana ana adana su a cikin tsararru:

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

Kowane launi yana amfani da ƙimar RGB (Red, Green, Blue) daga 0 zuwa 255. Ta canza waɗannan lambobin, kana iya ƙirƙirar kusan kowane launi don nunin. Idan useFixedColor an saita shi zuwa true, agogon koyaushe yana amfani da launi ɗaya. Idan an saita shi zuwa false, launi yana canzawa ta atomatik bayan kowane cikakken gudana.

Don saurin nemo ƙimar RGB daidai don kowane launi da kake so, yi amfani da kayan aikin RGB Color Picker Color Picker .

Tsarin lokaci da kwanan wata

Ana tsara lokaci azaman HH:MM kuma ana adana shi a cikin ƙaramin buffer na haruffa. Ana tsara kwanan wata azaman kirtani mai manyan haruffa kamar SEP 21. Nunin yana canzawa ta atomatik tsakanin lokaci da kwanan wata a tazara tsayayyiyar.

Dabarar gudana akan nunin 8×8

Saboda matrix 8×8 ya yi ƙanƙanta don nuna cikakken rubutu a lokaci ɗaya, sketch ɗin yana gudanar da rubutu a kwance. Da zarar rubutun ya fita gaba ɗaya daga nunin, ana sabunta launi kuma abun ciki yana canzawa tsakanin lokaci da kwanan wata idan an buƙata.

Nuni

Bayan ɗora sketch ɗin:

  • ESP32 yana haɗawa da Wi-Fi
  • Ana daidaita lokaci daga intanet
  • Lokaci na yanzu yana gudana a kan matrix
  • Kwanan wata yana bayyana a lokaci-lokaci
  • Hasken yana daidaita ta atomatik don rana da dare

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 suma 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
869-ESP32-S3 RGB LED Matrix Internte Clock Project 2 - Multi Color with Date
Harshe: 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();
  }
}

Abin da zaka iya bukata

Albarkatun da kuma shafukan da za a duba

Fayiloli📁

Fayil Fritzing