Ich habe mal das Programm noch ein wenig übersichtlicher gamacht.
Das Display der ESP32 Uhr zeigt jetzt in der ersten Zeile Datum Uhrzeit an, wo der ESP32 zuletzt die Zeit aus dem Internet geholt hat. Und in Zeile 3 und Zeile 4, das Aktuelle Datum, mit der aktuellen Uhrzeit. Ich hole im Moment die Zeit noch um 00:00 Uhr, was aber eigentlich nicht so toll ist, weil die Zeit in der Nacht der Umstellung (Sommer/Winter), glaube ich, um 04:00 Uhr morgens aktuallisiert wird. Da macht es keinen Sinn, um 00:00 Uhr die Zeit vom Server zu holen, da dann den ganzen folgenden Tag die Zeit um eine Std. falsch ist.
Das kleine OLED - Display; unten im Bild; zeigt zwei Spannungen an, mit einem ADS1115 Sensor gemessen. Die Analog Eingänge am ESP32 kann man nach meiner Meinung nur zum Spannung schätzen verwenden. Also schauen ob Spannung anliegt, nicht aber genau, welche Spannung anliegt. Aber der ADS1115 ist für kleines Geld zu haben und kann auf 4 Kanälen also 4 verschiedene Spannungen messen. Und das in einer Auflösung, wie man sie auf normalen 08/15 Messgeräten auch hat. Der erste Wert (1,54 Volt) ist die auf einen Poti eingestellte Spannung, der zweite Wert (3,30 Volt) ist die Betriebsspannung der beiden ESP32.
Hier mal das aktuelle Bild:
.

- ESP32_NTP_Zeit_02.jpg (786.35 KiB) 9182 mal betrachtet
Hier das aktuelle Programm dazu:
Code: Alles auswählen
#include <WiFi.h>
//#define NTP_SERVER "de.pool.ntp.org"
#define NTP_SERVER "Fritz.Box"
#define TZ_INFO "WEST-1DWEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00" // Western European Time
#include <Tone32.h>
#define BUZZER_PIN 16
#define BUZZER_CHANNEL 0
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
//---------------------Setup---------------------------
void setup()
{
lcd.begin();
lcd.backlight();
Serial.begin(9600);
lcd.setCursor (0, 0);
lcd.print (F(" NTP Server Abfrage "));
NTP_Zeit();
}
//---------------------LOOP---------------------------
void loop()
{
tm local;
getLocalTime(&local);
lcd.setCursor (0, 2);
lcd.print(&local, " Datum: %d.%m.%y");
lcd.setCursor (0, 3);
lcd.print(&local, " Zeit : %H:%M:%S");
/*
struct tm enthält diese Atribute:
===============================================
Member Type Meaning Range
tm_sec int seconds after the minute 0-60*
tm_min int minutes after the hour 0-59
tm_hour int hours since midnight 0-23
tm_mday int day of the month 1-31
tm_mon int months since January 0-11
tm_year int years since 1900
tm_wday int days since Sunday 0-6
tm_yday int days since January 1 0-365
tm_isdst int Daylight Saving Time flag
==============================================
*/
//00:00:XX = 3600(=1 Std) * std = 0 + min = 0 * 60 = 0 + sec = maximal 59 sec
uint32_t nbSek = 3600ul * local.tm_hour + local.tm_min * 60ul + local.tm_sec;
if (nbSek <= 2) // zwischen 00:00:00 Uhr und 00:00:59 Uhr Zeit vom NTP holen
{
NTP_Zeit();
}
}
//----------------WIFI Verbindung---------------------
void NTP_Zeit()
{
lcd.setCursor (0, 1);
lcd.print(F("Zeitserver verbinden"));
WiFi.mode(WIFI_STA);
WiFi.begin("Name", "Passwort");
while (WiFi.status() != WL_CONNECTED) // Ist WLAN Connect?
{
delay(500);
}
lcd.setCursor (0, 1);
lcd.print(F("++ 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);
lcd.setCursor (0, 0);
lcd.print(&local, " vom %d.%m um %H:%M ");
lcd.setCursor (0, 1);
lcd.print(F("--------------------"));
//Die Töne sind C4-D4-E4-F4-G4-A4-B4
tone(BUZZER_PIN, NOTE_C4, 200, BUZZER_CHANNEL);
noTone(BUZZER_PIN, BUZZER_CHANNEL);
tone(BUZZER_PIN, NOTE_D4, 200, BUZZER_CHANNEL);
noTone(BUZZER_PIN, BUZZER_CHANNEL);
tone(BUZZER_PIN, NOTE_E4, 500, BUZZER_CHANNEL);
noTone(BUZZER_PIN, BUZZER_CHANNEL);
}