NTP Time und Deep Sleep

Beispiel für NTP Synchronisation  und Erhaltung der Systemzeit nach dem Deep Sleep und wakeup.

Eigentlich wird nach erfolgreicher Zeit Synchronisation mit dem  NTP Server automatisch die Systemzeit in RTC Timer geladen. Nach dem Reset oder wakeup is die Systemzeit eingestellt. Einziges was fehlt ist die Einstellung der Zeitzone. Die Zeitzone muss nach dem wakeup neu eingestellt werden.

#include <WiFi.h>
#define SchlafZeit 3E7 // Mikrosekunden hier 3s
#define NTP_SERVER "de.pool.ntp.org"
#define TZ_INFO "WEST-1DWEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00" // Western European Time
RTC_DATA_ATTR int bootZaeler = 0;   // Variable in RTC Speicher bleibt erhalten nach Reset

void ErsteStart()
{
  Serial.println("Start nach dem Reset");
  WiFi.mode(WIFI_STA);
  WiFi.begin("WlanName", "Pass");
  Serial.println("");

  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("IP Addresse: ");
  Serial.println(WiFi.localIP());
  Serial.println("Hole NTP Zeit");
  struct tm local;
  configTzTime(TZ_INFO, NTP_SERVER); // ESP32 Systemzeit mit NTP Synchronisieren
  getLocalTime(&local, 10000);      // Versuche 10 s zu Synchronisieren
  WiFi.mode(WIFI_OFF);
}

void setup()
{
  esp_sleep_wakeup_cause_t wakeup_cause; // Variable für wakeup Ursache
  setenv("TZ", TZ_INFO, 1);             // Zeitzone  muss nach dem reset neu eingestellt werden
  tzset();
  Serial.begin(115200);
  Serial.println("");
  ++bootZaeler;
  Serial.println("Start Nr.: " + String(bootZaeler));
  wakeup_cause = esp_sleep_get_wakeup_cause(); // wakeup Ursache holen
  if (wakeup_cause != 3) ErsteStart();     // Wenn wakeup durch Reset
}

void loop()
{
  tm local;
  getLocalTime(&local);
  Serial.println(&local, "Datum: %d.%m.%y  Zeit: %H:%M:%S"); // Zeit Datum Print Ausgabe formatieren
  Serial.println("Deep Sleep - Gehe schlafen \r\n \r\n");   

  esp_sleep_enable_timer_wakeup(SchlafZeit);    // Deep Sleep Zeit einstellen
  esp_deep_sleep_start();                       // Starte Deep Sleep
}