Zeit vom NTP Server holen

Die Arduino DUE, sowie die ESP32, ESP8266 und sonstige.
Antworten
Benutzeravatar
Admin
Administrator
Beiträge: 378
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Zeit vom NTP Server holen

Beitrag von Admin »

Ich beginne gerade mit den ersten Versuchen die Zeit vom NTP Server zu holen. Oder auch von der Fritzbox. Ist auch schon gelungen. Ist ja wirklich leicht wenn man es im Netz vorgekaut bekommt. Aber jetzt muss ich mich in die Vorlage mal ein bischen reinarbeiten.
Bis jetzt verstehe ich nur Bahnhof. Also es geht, aber ich weiß noch nicht warum :O:

Aber ein Anfang ist gemacht. :)

Benutzeravatar
Admin
Administrator
Beiträge: 378
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Zeit vom NTP Server holen

Beitrag von Admin »

Die NTP Serverabfrage mit der Übergabe der Daten ins Display. Aber ich bin in dem Thema noch lange nicht zuhause. Abschreiben ist einfach.
.
ESP32 NTP-Server.jpg

Code: Alles auswählen

#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

// OLED Display einrichten
#include <U8g2lib.h>  // als U8g2 im Bibliotheksverwalter zu finden
U8G2_SH1106_128X64_NONAME_F_HW_I2C oled(U8G2_R0);

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

  oled.begin();
  oled.clearBuffer();              // Textspeicher löschen
  oled.setFont(u8g2_font_6x12_tr); // choose a suitable font 6x12
  //oled.setFont(u8g2_font_9x15_mf);
  oled.setCursor(10, (1 * 10));
  oled.print(F("NTP-Server Abfrage"));
  oled.sendBuffer();
}

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");

  oled.setFont(u8g2_font_10x20_mf);
  //oled.setFont(u8g2_font_9x15_mf);
  oled.setCursor(20, 40);
  oled.print(&local, "Am %d.%m");
  oled.setCursor(20, 55);
  oled.print(&local, "Um %H:%M");
  oled.sendBuffer();

  esp_sleep_enable_timer_wakeup(SchlafZeit);    // Deep Sleep Zeit einstellen
  esp_deep_sleep_start();                       // Starte Deep Sleep
}
void ErsteStart()
{
  Serial.println("Start nach dem Reset");
  WiFi.mode(WIFI_STA);
  WiFi.begin("Name", "Passwort");
  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);
}
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Antworten

Zurück zu „Programmierung der 32Bit Controller“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast