Search Code

Projet ya Monganga ya Internet ya ESP32-S3 RGB LED Matrix - 5 Loni ya Rainbow

Projet ya Monganga ya Internet ya ESP32-S3 RGB LED Matrix - 5 Loni ya Rainbow

Móti ya Ngonga ya Internet ya ESP32-S3 na Lisé ya Kala ya Ngondo

Projɛ́ oyo ezalí ngonga ya Internet ya ESP32-S3 na RGB Matrix oyo esangani na Wi-Fi, esangisi ngonga ya mboka na serveur ya NTP, mpe epakolaka ngonga na format ya HH:MM na kati ya 8×8 RGB NeoMatrix oyo ezalí na kati. Na kokeseni na ba versions ya ba couleurs solides to aléatoires, ngonga oyo esalelaka lisé ya kala ya ngondo oyo ezalí pete, epai epai na caractère nyonso ezalí komibongola na kati ya spectre ya RGB ntango ezalí kopakola. Ngonga yango mpe emonisaka mokolo na ntango mosusu mpe ebongolaka pole ya mokolo na butu na ndenge ya auto.

Animation ya ngonga ya Internet ya ESP32-s3

Ndenge ngonga oyo esalaka

Ntango esili kopelama na USB-C, ESP32-S3 esangisami na réseau ya Wi-Fi na yo mpe ezwi ngonga ya mboka oyo ezalí na internet. Écran yango epakolaka ngonga na ndenge ya libela, kasi na intervalle oyo ezwami, ebongolaka mpo na komonisa mokolo. Ngonga mpe mokolo nyonso mibale emonisamaka na lisé ya kala ya ngondo oyo ezalí dynamique, mpe esalaka éclat ya bomoi mpe animation na kati ya matrice ya 8×8.

Ba bibliothèques oyo esalelami

Sketch yango etieli motuya na ba bibliothèques oyo:

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

Tiya Adafruit NeoMatrix na esaleli ya Arduino Library Manager. Ba dépendances na yango, na ndenge ya Adafruit GFX Library mpe Adafruit NeoPixel, ekotiama na ndenge ya auto.

Configuration ya utilisateur oyo ezali na tina

Pin ya ba données ya matrice (matrice ya RGB oyo ezalí na kati)

Atako matrice ya RGB ezalí na board ya ESP32-S3, pin ya ba données esengeli kutu kolimbolama na kati ya code:

#define MATRIX_PIN 14

GPIO 14 esalelamaka mingi na ba boards ya ESP32-S3 na matrice ya RGB. Soki board na yo ezalí na pin mosusu, bongola valeur oyo.

SSID mpe mot de passe ya Wi-Fi (ezalí na ba lettres mincules mpe majuscules)

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

const char* WIFI_SSID     = "WIFI na yo";
const char* WIFI_PASSWORD = "passW0rd";

Likambo ya tina: Ba SSID ya Wi-Fi ezalí na ba lettres mincules mpe majuscules. SSID oyo ebengami "Book" ezalí ndenge moko te na "book". Soki ba lettres mincules mpe majuscules esangani te na ndenge ya solo, ESP32-S3 ekokoka te kosangisa.

Serveur ya NTP, zone ya ngonga, mpe changement ya ngonga ya été

Ngonga yango esangisaka ngonga na esaleli ya serveur ya NTP ya internet:

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

Ngonga ya mboka etongamaka na ba offsets oyo:

// 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 (mbanda: UTC-5 = -5 * 3600)
  • daylightOffset_sec: Salela 3600 soki DST ezalí actif, to 0 soki esalelami te

Ba valeurs oyo etiamaka na esaleli ya:

configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

Pole ya mokolo / butu na ndenge ya auto

Pole ebongolamaka na ndenge ya auto kolandana na heure 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, matrice yango ekitisamaka mpo na kokitisa éclat. Na ntango ya mokolo, pole ya libela ezongisamaka.

Lisé ya kala ya ngondo

Projɛ́ oyo esalelaka roue ya ba couleurs ya RGB ya classique mpo na kosala ba couleurs ya ngondo oyo ezalí pete. Caractère nyonso etiamaka na offset ya couleur oyo ekokani moke, mpe ba couleurs ebongolamaka na ntango, mpe esalaka animation ya ngondo oyo ezalí kotiola.

// Esaleli mpo na kosala ba couleurs ya ngondo
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);
}

Ntango texte ezalí kopakola, caractère nyonso ekotaka na spectre ya RGB, mpe esalaka lisé ya ngondo oyo ezalí kotambola, oyo emonanaka malamu mingi na écran ya 8×8.

Ndenge ngonga mpe mokolo emonisamaka

Ngonga yango ebombaka ba buffers ya ngonga mpe ya mokolo na ndenge ya kokeseni:

  • Ngonga: HH:MM
  • Mokolo: MMM DD (mbanda JAN 08)

Mokolo emonisamaka na intervalle oyo ezwami:

const uint32_t dateIntervalMs = 60000; // Monisa mokolo na mbala na mbala na minute moko

Na suka ya cycle nyonso ya kopakola, code yango ekataka soki ekokoba na ngonga to ebongola na mokolo.

Logique ya kopakola na matrice ya 8×8

Lokola écran yango ezalí na largeur ya ba pixels 8 kaka, texte epakolamaka na ndenge ya pete longwa na loboko ya mobali tii na loboko ya mwasi. Ntango texte esili kobima na écran, curseur ezwamaka lisusu mpe contenu oyo elandi (ngonga to mokolo) etiamaka mpo na passage oyo elandi.

Démonstration

Nsima ya kotia sketch mpe kopelisa board na USB-C:

  • ESP32-S3 esangisami na réseau ya Wi-Fi na yo
  • Ngonga esangisamaka longwa na internet
  • Ngonga epakolamaka na format ya HH:MM
  • Mokolo emonanaka na mbala na mbala
  • Texte nyonso emonisamaka na lisé ya ngondo oyo ezalí animé mpe pete
  • Écran yango ekitisamaka na butu mpe epelamaka na mokolo na ndenge ya auto

Ba téléchargements mpe ba liens

Mokanda mobimba ya code ya source ezwami na nse ya lisolo oyo. Bileko ya mosala mpe ba références, na ndenge ya RGB Color Picker, ezali mpe na ba liens na nse 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
872-ESP32-S3 RGB LED Matrix Internte Clock Project 5 - Rainbow Color
Langue: 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();
  }
}

Mokili na bisika

Fichiers📁

Fritzing File