Suchcode

ESP32-S3 RGB-LED-Matrix-Internet-Uhr-Projekt - 3 Nachtfarben mit Datum

ESP32-S3 RGB-LED-Matrix-Internet-Uhr-Projekt - 3 Nachtfarben mit Datum

ESP32-S3 RGB NeoMatrix Internetuhr mit automatischer Tages-/Nachthelligkeit

Dieses Projekt ist eine ESP32-S3 RGB-Matrix-Internet-Uhr, die die Helligkeit tagsüber und nachts automatisch anpasst. Der ESP32-S3 verbindet sich mit Wi-Fi, synchronisiert die aktuelle Uhrzeit von einem NTP-Server und scrollt die Uhrzeit inHH:MMFormat über ein 8×8 RGB NeoMatrix. Die Uhr unterstützt auch feste oder wechselnde RGB-Farben für den Anzeigetext.

Was diese Uhr macht

Nach dem Einschalten verbindet sich der ESP32-S3 mit Ihrem WLAN-Netzwerk und ruft die aktuelle lokale Zeit aus dem Internet ab. Die Zeit scrollt sanft über die LED-Matrix. In der Nacht dimmt der Bildschirm automatisch auf eine niedrigere Helligkeit, während er tagsüber wieder auf eine hellere Stufe umschaltet.

ESP32-s3_Internet-Uhr-Animation

Verwendete Bibliotheken

Dieser Sketch verwendet die folgenden Bibliotheken:

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

InstallierenAdafruit NeoMatrixaus dem Arduino Bibliotheks-Manager. Alle erforderlichen Abhängigkeiten wieAdafruit GFX LibraryundAdafruit NeoPixelwird automatisch installiert.

Wichtige Benutzereinstellungen

Wi-Fi-SSID und Passwort (groß- und kleinschreibung beachten)

Ersetzen Sie die folgenden Werte durch Ihre eigenen Wi-Fi-Anmeldeinformationen:

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

Wichtig:Wi-Fi-SSIDs sindgroß- und kleinschreibungsempfindlichEin SSID namens"Book"istnichtdas gleiche wie"book"Wenn die Groß- und Kleinschreibung nicht genau übereinstimmt, kann sich der ESP32 nicht verbinden.

NTP-Server, Zeitzone und Sommerzeit

Die Uhr synchronisiert die Zeit über den folgenden NTP-Server:

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

Die lokale Zeit wird unter Verwendung dieser Offsets berechnet:

const long  gmtOffset_sec     = -5 * 3600; 
const int   daylightOffset_sec = 3600;
  • gmtOffset_secdefiniert Ihren UTC-Versatz in Sekunden
  • daylightOffset_secfügt eine Stunde hinzu, wenn die Sommerzeit aktiv ist (verwenden0wenn nicht benötigt)

Diese Werte werden angewendet mit:

configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

Automatische Tages-/Nachthelligkeit

Die Displayhelligkeit ändert sich automatisch basierend auf der aktuellen Uhrzeit:

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

Zwischen 22 Uhr und 6 Uhr wird die Matrixhelligkeit reduziert, um es in dunklen Umgebungen komfortabel zu machen. Außerhalb dieser Zeiten wird die volle Tageshelligkeit wiederhergestellt. Sie können diese Werte an Ihre Raumbeleuchtung anpassen.

RGB-Farbkonfiguration

Die Textfarbe der Uhr wird mit RGB-Werten (Rot, Grün, Blau) definiert, wobei jeder Kanal von 0 bis 255 reicht. Mehrere Farben können in einem Array gespeichert und automatisch durchgeschaltet werden:

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

WennuseFixedColorist eingestellt auftrue, die Uhr verwendet immer eine Farbe. Wenn eingestellt auffalseDie Farbe ändert sich automatisch nach jedem vollständigen Scrollen der Zeit.

Um schnell die genauen RGB-Werte für jede Farbe zu finden, verwenden Sie das RGB-Farbwähler-Tool:RGB-Farbwähler.

Uhranzeige und Scrollen

Die aktuelle Zeit ist formatiert alsHH:MMund in einem kleinen Zeichenpuffer gespeichert. Da das Display nur 8 Pixel breit ist, scrollt der Text sanft von rechts nach links. Sobald die Zeit das Display vollständig verlässt, wird die nächste Farbe (sofern aktiviert) für den nächsten Durchlauf ausgewählt.

Demonstration

Nach dem Hochladen des Skizze:

  • Der ESP32-S3 verbindet sich mit Wi-Fi.
  • Die Zeit wird über das Internet synchronisiert.
  • Die aktuelle Uhrzeit wird über die RGB-Matrix angezeigt.
  • Die Helligkeit ändert sich automatisch zwischen Tag und Nacht.
  • Die Textfarbe bleibt fest oder wechselt je nach Ihren Einstellungen.

Downloads und Links

Der vollständige Quellcode ist unter diesem Artikel verfügbar. Links zu Teilen, Werkzeugen und Datenblättern sind unter diesem Artikel verfügbar.

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

Dinge, die Sie vielleicht brauchen

Ressourcen & Referenzen

Dateien📁

Fritzing-Datei