Search Code

Mradi wa Saa ya Mtandao ya Matrix ya LED ya RGB ya ESP32-S3 - Rangi 3 za Usiku na Tarehe

Mradi wa Saa ya Mtandao ya Matrix ya LED ya RGB ya ESP32-S3 - Rangi 3 za Usiku na Tarehe

Saa ya Mtandao ya NeoMatrix RGB ya ESP32-S3 yenye Mwangaza wa Kiotomatiki wa Mchana/Usiku

Mradi huu ni Saa ya Mtandao ya Matrix ya RGB ya ESP32-S3 ambayo hurekebisha mwangaza kiotomatiki wakati wa mchana na usiku. ESP32-S3 huunganisha kwenye Wi-Fi, husawazisha muda wa sasa kutoka kwa seva ya NTP, na hutembeza muda katika muundo wa HH:MM kwenye NeoMatrix ya RGB ya 8×8. Saa pia inasaidia rangi za RGB zisizobadilika au zinazozunguka kwa maandishi ya onyesho.

Nini saa hii hufanya

Baada ya kuwashwa, ESP32-S3 huunganisha kwenye mtandao wako wa Wi-Fi na kupata muda wa sasa wa eneo kutoka kwenye mtandao. Muda hutembea vizuri kwenye matrix ya LED. Wakati wa masaa ya usiku, onyesho hupunguza mwangaza kiotomatiki hadi kiwango cha chini, wakati wa mchana linarejea kwenye kiwango cha juu cha mwangaza.

Uhuishaji wa saa ya mtandao ya ESP32-s3

Maktaba zilizotumika

Sketch hii hutumia maktaba zifuatazo:

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

Sakinisha Adafruit NeoMatrix kutoka kwenye Meneja wa Maktaba wa Arduino. Maktaba zote muhimu kama Adafruit GFX Library na Adafruit NeoPixel zitasakinishwa kiotomatiki.

Usanidi muhimu wa mtumiaji

SSID ya Wi-Fi na nenosiri (nyeti kwa herufi kubwa/ndogo)

Badilisha thamani zifuatazo na vitambulisho vyako vya Wi-Fi:

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

Muhimu: SSID za Wi-Fi ni nyeti kwa herufi kubwa/ndogo. SSID inayoitwa "Book" si sawa na "book". Ikiwa herufi kubwa hazilingani haswa, ESP32 itashindwa kuunganisha.

Seva ya NTP, eneo la saa, na muda wa kuokoa mchana

Saa husawazisha muda kwa kutumia seva ifuatayo ya NTP:

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

Muda wa eneo huhesabiwa kwa kutumia marekebisho haya:

const long  gmtOffset_sec     = -5 * 3600; 
const int   daylightOffset_sec = 3600;
  • gmtOffset_sec hufafanua marekebisho yako ya UTC kwa sekunde
  • daylightOffset_sec huongeza saa moja wakati muda wa kuokoa mchana unatumika (tumia 0 ikiwa haihitajiki)

Thamani hizi hutumika na:

configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

Mwangaza wa kiotomatiki wa mchana/usiku

Mwangaza wa onyesho hubadilika kiotomatiki kulingana na saa ya sasa:

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

Kati ya saa 10 usiku na saa 6 asubuhi, mwangaza wa matrix hupunguzwa ili uwe rahisi katika mazingira ya giza. Nje ya masaa hayo, mwangaza kamili wa mchana unarejeshwa. Unaweza kurekebisha thamani hizi kulingana na mwanga wa chumba chako.

Usanidi wa rangi ya RGB

Rangi ya maandishi ya saa hufafanuliwa kwa kutumia thamani za RGB (Nyekundu, Kijani, Bluu), ambapo kila chaneli huanzia 0 hadi 255. Rangi nyingi zinaweza kuhifadhiwa kwenye safu na kuzungushwa kiotomatiki:

uint8_t userColors[][3] = {
  {17, 43, 171},  // Bluu Nyepesi
  {255, 0, 0},    // Nyekundu
  {0, 255, 0},    // Kijani
  {255, 165, 0},  // Chungwa
  {255, 0, 255}   // Magenta
};

Ikiwa useFixedColor imewekwa kuwa true, saa daima hutumia rangi moja. Ikiwa imewekwa kuwa false, rangi hubadilika kiotomatiki baada ya kila mtembeo kamili wa muda.

Ili kupata haraka thamani halisi za RGB za rangi yoyote, tumia zana ya Kichagua Rangi cha RGB: Kichagua Rangi .

Onyesho la muda na mtembeo

Muda wa sasa huundwa kama HH:MM na kuhifadhiwa kwenye kihifadhi kidogo cha herufi. Kwa sababu onyesho lina upana wa pikseli 8 tu, maandishi hutembea vizuri kutoka kulia kwenda kushoto. Mara tu muda unapoondoka kabisa kwenye onyesho, rangi inayofuata (ikiwa imewezeshwa) huchaguliwa kwa mzunguko unaofuata.

Maonyesho

Baada ya kupakia sketch:

  • ESP32-S3 huunganisha kwenye Wi-Fi
  • Muda husawazishwa kutoka kwenye mtandao
  • Muda wa sasa hutembea kwenye matrix ya RGB
  • Mwangaza hubadilika kiotomatiki kati ya mchana na usiku
  • Rangi ya maandishi inabaki isiyobadilika au inazunguka kulingana na mipangilio yako

Upakuaji na viungo

Msimbo kamili wa chanzo umetolewa hapa chini ya makala hii. Viungo vya sehemu, zana, na karatasi za data vinapatikana hapa chini ya makala hii.

Bilder

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
Språk: 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();
  }
}

Tänker att du kanske behöver

Resurser och referenser

Filer📁

Fritzing-fil