#include <WiFi.h>
#include "time.h"
#include <FastLED.h>
#define LED_PIN 13 // Verwende einen gültigen Pin für den ESP32, z.B. GPIO 13
#define NUM_LEDS 4
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// NTP Server und Zeitzone mit automatischer Sommer-/Winterzeit-Anpassung
const char* ntpServer = "pool.ntp.org";
const char* timeZone = "CET-1CEST,M3.5.0/2,M10.5.0/3"; // Zeitzonenregelung für MEZ/MESZ
CRGB leds[NUM_LEDS];
uint8_t hour;
uint8_t minute;
uint8_t second;
uint32_t lastTime;
void setup() {
Serial.begin(9600);
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
// WiFi-Verbindung herstellen
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// NTP initialisieren
configTzTime(timeZone, ntpServer); // Automatische Sommer-/Winterzeitregelung
}
void loop() {
// Aktuelle Uhrzeit abrufen
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time");
return;
}
hour = timeinfo.tm_hour;
minute = timeinfo.tm_min;
second = timeinfo.tm_sec;
// Ausgabe auf dem Serial Monitor
Serial.print(hour, DEC);
Serial.print(':');
Serial.print(minute, DEC);
Serial.print(':');
Serial.print(second, DEC);
Serial.println();
// Zeitanzeige
Clock();
delay(1000); // Aktualisierung jede Sekunde
}
void Clock() {
// Stundenanzeige (Ringe 1 & 2)
switch (hour) {
case 0: leds[3] = CRGB(4, 4, 4); leds[2] = CRGB(4, 4, 4); break;
case 1: leds[3] = CRGB(4, 4, 4); leds[2] = CRGB(25, 5, 0); break;
case 2: leds[3] = CRGB(4, 4, 4); leds[2] = CRGB(255, 0, 0); break;
case 3: leds[3] = CRGB(4, 4, 4); leds[2] = CRGB(255, 64, 0); break;
case 4: leds[3] = CRGB(4, 4, 4); leds[2] = CRGB(255, 196, 0); break;
case 5: leds[3] = CRGB(4, 4, 4); leds[2] = CRGB(0, 255, 0); break;
case 6: leds[3] = CRGB(4, 4, 4); leds[2] = CRGB(0, 0, 255); break;
case 7: leds[3] = CRGB(4, 4, 4); leds[2] = CRGB(200, 0, 255); break;
case 8: leds[3] = CRGB(4, 4, 4); leds[2] = CRGB(48, 48, 48); break;
case 9: leds[3] = CRGB(4, 4, 4); leds[2] = CRGB(255, 255, 255); break;
case 10: leds[3] = CRGB(25, 5, 0); leds[2] = CRGB(4, 4, 4); break;
case 11: leds[3] = CRGB(25, 5, 0); leds[2] = CRGB(25, 5, 0); break;
case 12: leds[3] = CRGB(25, 5, 0); leds[2] = CRGB(255, 0, 0); break;
case 13: leds[3] = CRGB(25, 5, 0); leds[2] = CRGB(255, 64, 0); break;
case 14: leds[3] = CRGB(25, 5, 0); leds[2] = CRGB(255, 196, 0); break;
case 15: leds[3] = CRGB(25, 5, 0); leds[2] = CRGB(0, 255, 0); break;
case 16: leds[3] = CRGB(25, 5, 0); leds[2] = CRGB(0, 0, 255); break;
case 17: leds[3] = CRGB(25, 5, 0); leds[2] = CRGB(196, 0, 255); break;
case 18: leds[3] = CRGB(25, 5, 0); leds[2] = CRGB(48, 48, 48); break;
case 19: leds[3] = CRGB(25, 5, 0); leds[2] = CRGB(255, 255, 255); break;
case 20: leds[3] = CRGB(255, 0, 0); leds[2] = CRGB(4, 4, 4); break;
case 21: leds[3] = CRGB(255, 0, 0); leds[2] = CRGB(25, 5, 0); break;
case 22: leds[3] = CRGB(255, 0, 0); leds[2] = CRGB(255, 0, 0); break;
case 23: leds[3] = CRGB(255, 0, 0); leds[2] = CRGB(255, 64, 0); break;
}
// Minutenanzeige (Ringe 3 & 4)
switch (minute) {
case 0: leds[1] = CRGB(4, 4, 4); leds[0] = CRGB(4, 4, 4); break;
case 1: leds[1] = CRGB(4, 4, 4); leds[0] = CRGB(25, 5, 0); break;
case 2: leds[1] = CRGB(4, 4, 4); leds[0] = CRGB(255, 0, 0); break;
case 3: leds[1] = CRGB(4, 4, 4); leds[0] = CRGB(255, 64, 0); break;
case 4: leds[1] = CRGB(4, 4, 4); leds[0] = CRGB(255, 196, 0); break;
case 5: leds[1] = CRGB(4, 4, 4); leds[0] = CRGB(0, 255, 0); break;
case 6: leds[1] = CRGB(4, 4, 4); leds[0] = CRGB(0, 0, 255); break;
case 7: leds[1] = CRGB(4, 4, 4); leds[0] = CRGB(200, 0, 255); break;
case 8: leds[1] = CRGB(4, 4, 4); leds[0] = CRGB(48, 48, 48); break;
case 9: leds[1] = CRGB(4, 4, 4); leds[0] = CRGB(255, 255, 255); break;
case 10: leds[1] = CRGB(25, 5, 0); leds[0] = CRGB(4, 4, 4); break;
case 11: leds[1] = CRGB(25, 5, 0); leds[0] = CRGB(25, 5, 0); break;
case 12: leds[1] = CRGB(25, 5, 0); leds[0] = CRGB(255, 0, 0); break;
case 13: leds[1] = CRGB(25, 5, 0); leds[0] = CRGB(255, 64, 0); break;
case 14: leds[1] = CRGB(25, 5, 0); leds[0] = CRGB(255, 196, 0); break;
case 15: leds[1] = CRGB(25, 5, 0); leds[0] = CRGB(0, 255, 0); break;
case 16: leds[1] = CRGB(25, 5, 0); leds[0] = CRGB(0, 0, 255); break;
case 17: leds[1] = CRGB(25, 5, 0); leds[0] = CRGB(196, 0, 255); break;
case 18: leds[1] = CRGB(25, 5, 0); leds[0] = CRGB(48, 48, 48); break;
case 19: leds[1] = CRGB(25, 5, 0); leds[0] = CRGB(255, 255, 255); break;
case 20: leds[1] = CRGB(255, 0, 0); leds[0] = CRGB(4, 4, 4); break;
case 21: leds[1] = CRGB(255, 0, 0); leds[0] = CRGB(25, 5, 0); break;
case 22: leds[1] = CRGB(255, 0, 0); leds[0] = CRGB(255, 0, 0); break;
case 23: leds[1] = CRGB(255, 0, 0); leds[0] = CRGB(255, 64, 0); break;
case 24: leds[1] = CRGB(255, 0, 0); leds[0] = CRGB(255, 196, 0); break;
case 25: leds[1] = CRGB(255, 0, 0); leds[0] = CRGB(0, 255, 0); break;
case 26: leds[1] = CRGB(255, 0, 0); leds[0] = CRGB(0, 0, 255); break;
case 27: leds[1] = CRGB(255, 0, 0); leds[0] = CRGB(200, 0, 255); break;
case 28: leds[1] = CRGB(255, 0, 0); leds[0] = CRGB(48, 48, 48); break;
case 29: leds[1] = CRGB(255, 0, 0); leds[0] = CRGB(255, 255, 255); break;
case 30: leds[1] = CRGB(255, 64, 0); leds[0] = CRGB(4, 4, 4); break;
case 31: leds[1] = CRGB(255, 64, 0); leds[0] = CRGB(25, 5, 0); break;
case 32: leds[1] = CRGB(255, 64, 0); leds[0] = CRGB(255, 0, 0); break;
case 33: leds[1] = CRGB(255, 64, 0); leds[0] = CRGB(255, 64, 0); break;
case 34: leds[1] = CRGB(255, 64, 0); leds[0] = CRGB(255, 196, 0); break;
case 35: leds[1] = CRGB(255, 64, 0); leds[0] = CRGB(0, 255, 0); break;
case 36: leds[1] = CRGB(255, 64, 0); leds[0] = CRGB(0, 0, 255); break;
case 37: leds[1] = CRGB(255, 64, 0); leds[0] = CRGB(200, 0, 255); break;
case 38: leds[1] = CRGB(255, 64, 0); leds[0] = CRGB(48, 48, 48); break;
case 39: leds[1] = CRGB(255, 64, 0); leds[0] = CRGB(255, 255, 255); break;
case 40: leds[1] = CRGB(255, 196, 0); leds[0] = CRGB(4, 4, 4); break;
case 41: leds[1] = CRGB(255, 196, 0); leds[0] = CRGB(25, 5, 0); break;
case 42: leds[1] = CRGB(255, 196, 0); leds[0] = CRGB(255, 0, 0); break;
case 43: leds[1] = CRGB(255, 196, 0); leds[0] = CRGB(255, 64, 0); break;
case 44: leds[1] = CRGB(255, 196, 0); leds[0] = CRGB(255, 196, 0); break;
case 45: leds[1] = CRGB(255, 196, 0); leds[0] = CRGB(0, 255, 0); break;
case 46: leds[1] = CRGB(255, 196, 0); leds[0] = CRGB(0, 0, 255); break;
case 47: leds[1] = CRGB(255, 196, 0); leds[0] = CRGB(200, 0, 255); break;
case 48: leds[1] = CRGB(255, 196, 0); leds[0] = CRGB(48, 48, 48); break;
case 49: leds[1] = CRGB(255, 196, 0); leds[0] = CRGB(255, 255, 255); break;
case 50: leds[1] = CRGB(0, 255, 0); leds[0] = CRGB(4, 4, 4); break;
case 51: leds[1] = CRGB(0, 255, 0); leds[0] = CRGB(25, 5, 0); break;
case 52: leds[1] = CRGB(0, 255, 0); leds[0] = CRGB(255, 0, 0); break;
case 53: leds[1] = CRGB(0, 255, 0); leds[0] = CRGB(255, 64, 0); break;
case 54: leds[1] = CRGB(0, 255, 0); leds[0] = CRGB(255, 196, 0); break;
case 55: leds[1] = CRGB(0, 255, 0); leds[0] = CRGB(0, 255, 0); break;
case 56: leds[1] = CRGB(0, 255, 0); leds[0] = CRGB(0, 0, 255); break;
case 57: leds[1] = CRGB(0, 255, 0); leds[0] = CRGB(200, 0, 255); break;
case 58: leds[1] = CRGB(0, 255, 0); leds[0] = CRGB(48, 48, 48); break;
case 59: leds[1] = CRGB(0, 255, 0); leds[0] = CRGB(255, 255, 255); break;
}
FastLED.show();
}