ESP32 Matrix-Uhr mit NTP-Server-Zeitquelle

Hallo,
ich bin Schüler, absoluter Arduino-Newbie und könnte etwas Hilfe gebrauchen.
Als eines meiner ersten Projekte, habe ich mir diese ESP32 Matrix-Uhr mit NTP-Server-Zeitquelle gebaut.
Sie funktioniert soweit ohne Probleme. Heute war Umstellung von MEZ auf MESZ und die Uhr zeigt natürlich weiterhin die MEZ. Hier im Forum habe ich einige Beiträge zur Berechnung der Sommerzeit gelesen. Zur mplementierung einer solchen Funktion in den Code meiner Uhr fehlen mir leider noch die Erfahrungen.
Meine Uhr soll weiterhin ohne RTC funktionieren, sondern die Zeit von einem NTP-Server abrufen und die Umstellung MEZ <=> MESZ automatisch durchführen.
Gibt es eine Möglichkeit, die so angezeigte Uhrzeit zentriert darzustellen (z.Zt. ist die Ausgabe um 2 Punkt nach links versetzt)?
Ich bin für jede Hilfe dankbar.

LG
Paul

Dann solltest Du uns Sketch (hier und in Codetags) und Link zur LedMatrix-Lib geben.

Gruß Tommy

Vielen Dank für die schnelle Antwort.
Hier die geforderten Angaben:

LedMatrix-Lib

//Display NTP time on Led Matrix
#include <SPI.h>
#include "LedMatrix.h"
#include <WiFi.h>
#include "time.h"

#define NUMBER_OF_DEVICES 4 //number of led matrix connect in series
#define CS_PIN 5
#define CLK_PIN 18
#define MISO_PIN 2 //we do not use this pin just fill to match constructor
#define MOSI_PIN 19

//Note: insert specific Wifi connection information here!
const char *ssid = "your wifi ssid";
const char *password = "your wifi password";

const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;

LedMatrix ledMatrix = LedMatrix(NUMBER_OF_DEVICES, CLK_PIN, MISO_PIN, MOSI_PIN, CS_PIN, FONT_5x7);
bool first = true;
 
void setup() {
 ledMatrix.init();
 ledMatrix.clear();
 ledMatrix.setCharWidth(6);
 ledMatrix.setTextAlignment(TEXT_ALIGN_LEFT);
 
 Serial.begin(115200);

 // Connect to Wi-Fi
 Serial.print("Connecting to ");
 Serial.println(ssid);
 WiFi.begin(ssid, password);
 int k = 0;
 char *bar[] = {"o ", " o ", " o ", " o"};
 while (WiFi.status() != WL_CONNECTED) {
 delay(500);
 Serial.print(".");

 ledMatrix.clear();
 ledMatrix.setText(bar[(k++) % 4]);
 ledMatrix.drawText();
 ledMatrix.commith();//use either commit() or commith() depending on your led matrix orientation
 
 }
 Serial.println("");
 Serial.println("WiFi connected.");
 
 // Init and get the time
 configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
 printLocalTime();

 //disconnect WiFi as it's no longer needed
 WiFi.disconnect(true);
 WiFi.mode(WIFI_OFF);
 
}

void loop(){
 delay(1000);
 printLocalTime();
}

void printLocalTime(){
 ledMatrix.clear();
 struct tm timeinfo;
 if(!getLocalTime(&timeinfo)){
 Serial.println("Failed to obtain time");
 if (first) {
 ledMatrix.setText("--:--");
 ledMatrix.drawText();
 ledMatrix.commith();//use either commit() or commith() depending on your led matrix orientation
 }
 return;
 }
// Serial.println(&timeinfo, "%H:%M:%S");
 int seconds = timeinfo.tm_sec;
 char formattedTime[10];
 strftime(formattedTime, 10, (seconds & 1) == 1 ? "%H:%M" : "%H %M", &timeinfo);
 Serial.println(formattedTime);
 
 first = false;
 ledMatrix.setText(String(formattedTime));
 ledMatrix.drawText();
 ledMatrix.commith();//use either commit() or commith() depending on your led matrix orientation
 
}

LG
Paul

Tommy56:
..in Codetags...

Damit ist gemeint:
Vor dem Sketch ein

[code]

, dahinter ein

[/code]

einfügen.
Kannst Du das bitte durch Editieren Deines Beitrags noch nachholen? (Rechts unten: Modify)

EDIT: Uiii - hast Du schon - Danke!

habs nicht ausprobiert aber sollte am ESP32 nicht die Zeitzonendefiniton aureichen - genauso wie es auch am ESP8266 geht?

#define MY_NTP_SERVER "at.pool.ntp.org"           
#define MY_TZ "CET-1CEST,M3.5.0/02,M10.5.0/03"

edit 1:
ok, nicht ganz, aber ich habs, man machts über setenv.
Muss den Code noch etwas zusammenräumen.

edit 2:
wenn's wer braucht, so klappt NTP mit Sommerzeit am ESP32:
https://werner.rothschopf.net/microcontroller/202103_arduino_esp32_ntp_en.htm

Hallo noiasca,
vielen Dank für die Hilfe.
Die Ausgabe der aktuellen Zeit (MESZ) auf der seriellen Konsole klappt wunderbar.
Wie kann ich genau diese Zeit nun in Stunden und Minuten auf der Matrix ausgeben?

Vielen Dank und LG
Paul

verstehst du wie es in "deinem" Sketch aus #2 zur Ausgabe kommt?

Leider noch nicht.

dann ist es vermutlich besser, du probierst einen oder beide dieser Variablen auf 7200 zu setzen

const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;

Das habe ich schon probiert.
Aber leider wird dann die Zeit nicht automatisch bei Wechsel MEZ <=> MESZ richtig angezeigt und der Sketch muß jedesmal neu mit angepasstem Offset auf die Uhr geladen werden.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.