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.
//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
}
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?
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.