RTC DS3231 mit NTP Problem

Hi zusammen und einen schönen Nachmittag.
ich bin leider im Moment etwas ratlos wie ich mit meinem Sketch weiter verfahren soll :confused:
ich versuche jetzt seit mittlerweile 1-2 Tagen einen Sketch zu erstellen der sich via NTP die Zeit holt, sie mit der DS3231 syncronisiert und dann die Systemzeit des Arduinos mit der der RTC aktualisiert.
Hintergrund ist das ich versuche diesen Sketch: GitHub - iw5ejm/multibandWSPR_nodeMCU: WSPR multiband beacon with si5351a and nodeMCU board for time sync via NTP
mit einer RTC und einer neuen NTP Lib zu verheiraten.

Nachdem gestern soweit alles lief gab es immer noch Probleme mit der RTC Zeit Aktualisierung.
Ich will halt das die Systemzeit des Arduinos auch noch aktuell ist wenn der NTP Server mal nicht erreichbar ist, WIFI Probleme oä zB. Deswegen die Syncronisierung mit der RTC. Und die RTC wird halt immer mal wieder über den NTP geupdatet.

Also heute nochmal ran und alle RTC Libaries ausprobiert die ich finden konnt. Bin dann bei der uRTCLiB von Naguissa hängen geblieben das ist recht übersichtlich mMn un funktioniert auch gut.
Habe dann den Testsketch geschrieben:

#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <TimeLib.h>
#include <Arduino.h>
#include <Wire.h>
#include <uRTCLib.h>

// uRTCLib rtc;
uRTCLib rtc(0x68);

const char *ssid     = "<SSID>";
const char *password = "<PASSWORD>";

WiFiUDP ntpUDP;

//NTPClient NTPtClient(ntpUDP, "Server Pool adress", Time Offset in seconds(Timezone), UpdateInterval in milliseconds);
NTPClient NTPtClient(ntpUDP, "europe.pool.ntp.org", 3600, 60000);

void setup(){
delay(2000);
  Serial.begin(115200);
  Serial.println("Serial OK");
  WiFi.begin(ssid, password);

  NTPtClient.begin();

  #ifdef ARDUINO_ARCH_ESP8266
    Wire.begin(0, 2); // D3 and D4 on ESP8266
  #else
    Wire.begin();
  #endif
}

void loop() {
  NTPtClient.update();
  rtc.refresh();

  //setTime(2,3,4,5,6,7);
  setTime(rtc.hour,rtc.minute,rtc.second,rtc.day,rtc.month,rtc.year); // Sets the Arduino System clock to given values from the RTC Clock and then prints the new Arduino System Clock on the Serial Monitor
  time_t t = now();
  Serial.println("Arduino System Zeit gesetzt, neue Zeit: ");
  int hr = hour(t);
  Serial.println(hr);//hour(t), minute(t), second(t));
  Serial.println("Now the NTP Time: ");
  Serial.println(NTPtClient.getFormattedTime());

  Serial.print("RTC DateTime: ");
  Serial.print(rtc.year());
  Serial.print('/');
  Serial.print(rtc.month());
  Serial.print('/');
  Serial.print(rtc.day());

  Serial.print(' ');

  Serial.print(rtc.hour());
  Serial.print(':');
  Serial.print(rtc.minute());
  Serial.print(':');
  Serial.print(rtc.second());

  Serial.print(" DOW: ");
  Serial.print(rtc.dayOfWeek());

  Serial.print(" - Temp: ");
  Serial.print(rtc.temp()  / 100);

  Serial.println();

  delay(1000);
}

und das nächste Problem bekommen: Die uRTCLib.h verträgt sich scheinbar nicht mit der TimeLib.h.
Fehlermeldung:

In file included from C:\Users\Admin\Documents\Arduino\Bibliotheken_kompatibel_test\Bibliotheken_kompatibel_test.ino:4:0:

C:\Users\Admin\Documents\Arduino\libraries\Time/TimeLib.h:79:37: error: expected unqualified-id before ')' token

 #define dayOfWeek(_time_) ((((_time_) / SECS_PER_DAY + 4)  % DAYS_PER_WEEK)+1) // 1 = Sunday

                                     ^

C:\Users\Admin\Documents\Arduino\libraries\uRTCLib\src/uRTCLib.h:250:12: note: in expansion of macro 'dayOfWeek'

    uint8_t dayOfWeek();

            ^

C:\Users\Admin\Documents\Arduino\libraries\Time/TimeLib.h:79:39: error: expected ')' before '/' token

 #define dayOfWeek(_time_) ((((_time_) / SECS_PER_DAY + 4)  % DAYS_PER_WEEK)+1) // 1 = Sunday

                                       ^

C:\Users\Admin\Documents\Arduino\libraries\uRTCLib\src/uRTCLib.h:250:12: note: in expansion of macro 'dayOfWeek'

    uint8_t dayOfWeek();

            ^

C:\Users\Admin\Documents\Arduino\libraries\Time/TimeLib.h:79:39: error: expected ')' before '/' token

 #define dayOfWeek(_time_) ((((_time_) / SECS_PER_DAY + 4)  % DAYS_PER_WEEK)+1) // 1 = Sunday

                                       ^

C:\Users\Admin\Documents\Arduino\libraries\uRTCLib\src/uRTCLib.h:250:12: note: in expansion of macro 'dayOfWeek'

    uint8_t dayOfWeek();

            ^

C:\Users\Admin\Documents\Arduino\libraries\Time/TimeLib.h:79:39: error: expected ')' before '/' token

 #define dayOfWeek(_time_) ((((_time_) / SECS_PER_DAY + 4)  % DAYS_PER_WEEK)+1) // 1 = Sunday

                                       ^

C:\Users\Admin\Documents\Arduino\libraries\uRTCLib\src/uRTCLib.h:250:12: note: in expansion of macro 'dayOfWeek'

    uint8_t dayOfWeek();

            ^

Mehrere Bibliotheken wurden für "uRTCLib.h" gefunden
 Benutzt: C:\Users\Admin\Documents\Arduino\libraries\uRTCLib
Mehrere Bibliotheken wurden für "NTPClient.h" gefunden
 Benutzt: C:\Users\Admin\Documents\Arduino\libraries\NTPClient
Mehrere Bibliotheken wurden für "ESP8266WiFi.h" gefunden
 Benutzt: C:\Users\Admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266WiFi
Mehrere Bibliotheken wurden für "TimeLib.h" gefunden
 Benutzt: C:\Users\Admin\Documents\Arduino\libraries\Time
Mehrere Bibliotheken wurden für "Wire.h" gefunden
 Benutzt: C:\Users\Admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\libraries\Wire
exit status 1
Fehler beim Kompilieren für das Board Generic ESP8266 Module.

Habe das auch getestet, der Fehler kommt nur wenn ich beide Libaries einbinde, selbst wenn der restliche Sketch leer ist.

Hardware: ESP8266 E01S mit DS3231 RTC und SI5351 über I2C

Ich muss dazu sagen das ich noch relativer Anfänger bin.

Hier mal mein vorläufiger Code der vom WSPR Sketch
Sketch ist im Anhang wegen dem Zeichenlimit

Hoffentlich kann mir da jemand helfen, stecke grad ein bisschen fest :smiley: :sweat_smile:

WSPR_ESP8266.ino (13.3 KB)

Hallo,

das stimmt denke ich. Die Time.lib wird von der RTC benötigt. Die interne NTP Funktion des ESP läuft mt der time lib (kleines t) beides zusammen wird nicht gehen.

Wenn Du unbedingt beides machen willst, halte ich für überflüssig, musst Du die NTP Funktion des Arduino mit der Time lib verwenden. Beispiel findest Du in der IDE.

Heinz

SyCoTech:
Die uRTCLib.h verträgt sich scheinbar nicht mit der TimeLib.h.

Dann hole die Zeit halt mit der time.h aus dem EspCore.

Du brauchst keine externe Library, der Esp bringt alles schon mit.

Gruß Fips

Ich dachte halt das mit der TimeLib.h würde so gehen weil das im Originalcode auch so drin war.. Dann muss ich da mal schaun was ich da bastel. Auf jeden Fall schonmal danke für die Antworten.