Luka Code

Mosala ya ESP32-S3 RGB LED Matrix Internet Clock - Loni ya balabala ya 4

Mosala ya ESP32-S3 RGB LED Matrix Internet Clock - Loni ya balabala ya 4

Móti ya ntángo ya Internet ya ESP32-S3 na balangi ya RGB ya mbala na mbala

Projɛ́ oyo ezalí mótí ya ntángo ya Internet ya ESP32-S3 oyo esangani na Wi-Fi, esangisi ntángo ya mboka longwa na serveur ya NTP, mpe epakolaka ntángo na format ya HH:MM na kati ya NeoMatrix ya RGB ya 8×8 oyo ezalí na kati. Na version oyo, bantángo ya ngonga, colon, mpe miniti, nyonso moko ezalí na balangi ya mbala na mbala oyo eponamaka na boumeli ya boumeli ya mobimba ya scroll, mpe esalaka mótí ya ntángo oyo ezalí na bomoi mpe ya kosakana oyo ebongwanaka ntango nyonso.

Animation ya mótí ya ntángo ya ESP32-s3 ya Internet

Ndenge mótí ya ntángo oyo esalaka

Sima ya kopésa nguya na board na nzela ya USB-C, ESP32-S3 esangani na réseau ya Wi-Fi na yo mpe ezwi ntángo ya sika ya mboka longwa na internet. Ntángo ekabwani na biteni misato—ngonga, colon, mpe miniti—mpe eteni nyonso ekomamaka na ndenge moko na kati ya matrice ya RGB. Ntango makomi makololoka mobimba longwa na écran, balangi ya sika ya mbala na mbala eponamaka mpo na libale oyo elandi.

Bibliothèques oyo esalelami

Sketch oyo esalelaka bibliothèques oyo:

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

Tiya Adafruit NeoMatrix longwa na Arduino Library Manager. Ba dépendances oyo esengeli lokola Adafruit GFX Library mpe Adafruit NeoPixel ekotiama automatiquement.

Configuration ya moto oyo esengeli

Pin ya ba données ya matrice (matrice ya RGB ya kati)

Atako matrice ya RGB ezalí na kati ya board, pin ya ba données esengeli kaka kolimbolama na kati ya code:

#define MATRIX_PIN 14

GPIO 14 esalelamaka mingi na ba boards ya matrice ya RGB ya ESP32-S3. Soki board na yo ya ndenge mosusu esalelaka pin mosusu, bongola valeur oyo kolanda yango.

SSID mpe mot de passe ya Wi-Fi (ezalí na ntina ya ba lettres minene mpe miké)

Bongola ba informations ya Wi-Fi na ba détails ya réseau na yo moko:

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

Likambo ya ntina: Ba SSID ya Wi-Fi ezalí na ntina ya ba lettres minene mpe miké. SSID oyo ebengami "Book" ezalí ndenge moko te na "book". Soki ba lettres minene mpe miké ekokani te mbala moko, ESP32-S3 ekokoka te kosangana.

Serveur ya NTP, zone ya ntángo, mpe ntángo ya moi

Bosangisi ya ntángo esalemaka na nzela ya serveur ya NTP ya internet:

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

Ntángo ya mboka etangamaka na nzela ya ba offsets ya UTC mpe ya ntángo ya moi:

// Toronto-ish: UTC-5, plus 1 heure ya DST
const long  gmtOffset_sec     = -5 * 3600;
const int   daylightOffset_sec = 3600;
  • gmtOffset_sec: Offset ya UTC na secondes (bongola mpo na esika na yo)
  • daylightOffset_sec: Salela 3600 ntango DST ezalí na mosala, to 0 soki te

Ba paramètres oyo esalelamaka na:

configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

Bosémbisi ya mwinda ya mokolo / butu automatique

Mótí ya ntángo ebongolaka mwinda automatiquement kolanda ngonga ya sika:

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

Na kati ya 10 PM mpe 6 AM, affichage ekitaka mwinda mpo na kokitisa glare na bisika ya molili. Na ntango ya mokolo, matrice ezongelaka mwinda ya momeseno.

Bizaleli ya balangi ya RGB ya mbala na mbala

Lisolo ya ba couleurs ya RGB oyo ekomami liboso ebombamaka na kati ya tableau, epai wapi couleur nyonso elimbolamaka na nzela ya ba valeurs ya Rouge, Vert, mpe Bleu longwa na 0 kino na 255:

uint8_t userColors[][3] = {
  {255, 0, 0},    // Rouge
  {0, 255, 0},    // Vert
  {0, 0, 255},    // Bleu
  {255, 165, 0},  // Orange
  {255, 0, 255},  // Magenta
  {0, 255, 255},  // Cyan
  {255, 255, 0}   // Jaune
};

Na boumeli nyonso ya mobimba ya scroll:

  • Ba chiffres ya ngonga bapesamaka couleur ya mbala na mbala
  • Colon ezwaka couleur mosusu ya mbala na mbala
  • Ba chiffres ya miniti bazwaka couleur mosusu ya mbala na mbala

Oyo esalaka bosangani ya ba couleurs oyo ebongwanaka ntango nyonso mpe esalaka ete mótí ya ntángo ezala ya kitoko mpe ya kosepelisa. Mpo na kosala ba couleurs na yo moko ya momeseno, okoki kosalela outil ya RGB Color Picker: RGB Color Picker.

Logique ya kobimisa ntángo

Ntángo ekabwani na biteni misato:

  • Ngonga: HH
  • Colon: :
  • Miniti: MM

Eteni nyonso ekomamaka na ndenge moko mpo ete ezala na couleur na yango moko, wana biteni nyonso etambolaka elongo mpo na kosala animation ya scroll oyo ezalí pete na kati ya affichage ya 8×8.

Kosala ba couleurs ya mbala na mbala

Mpo na kolakisa ete ba couleurs ezala ya mbala na mbala, sketch ezalaka na ba graines ya générateur ya ba nombres ya mbala na mbala na ebandeli na nzela ya pin ya analogique oyo esangani te:

randomSeed(analogRead(0));

Oyo esalaka ete bosangani ya ba couleurs ezala ya ndenge na ndenge na boumeli nyonso ya kopésa nguya mpe boumeli nyonso ya scroll.

Elakiseli

Sima ya kotia sketch mpe kopésa nguya na board na nzela ya USB-C:

  • ESP32-S3 esangani na réseau ya Wi-Fi na yo
  • Ntángo esangisamaka longwa na internet
  • Ntángo elolotaka na format ya HH:MM
  • Ngonga, colon, mpe miniti ebongwanaka na ba couleurs ya mbala na mbala na boumeli nyonso
  • Affichage ekitaka mwinda na butu automatiquement

Ba téléchargements mpe ba liens

Mokanda mobimba ya source code ezwami na nsé ya lisolo oyo. Bipali oyo esalisaka mpe mikanda ya kotánga ezali na nsé ya lisolo oyo.

Images

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

Mokili na bisika

Fichiers📁

Fritzing File