Dusk2Dawn library nicht kompatibel mit ESP8266?

hallo,

ich habe folgendes Skript, welches prima auf meinem Arduino UNO läuft:

#include <Dusk2Dawn.h>

char time1[] = "00:00";
char time2[] = "00:00";

void setup() {
  Serial.begin (9600);

  Dusk2Dawn berlin(52.461432, 13.419070, -1);

  int beSunrise  = berlin.sunrise(2025, 2, 15, false);
  int beSunset   = berlin.sunset(2025, 2, 15, false);

  beSunrise = beSunrise + 120; // time correction
  beSunset = beSunset + 120;

  Dusk2Dawn::min2str(time1, beSunrise);
  Serial.println(time1);

  Dusk2Dawn::min2str(time2, beSunset);
  Serial.println(time2);
}

void loop() {
  Serial.println(time1);
  Serial.println(time2);
  delay(6000);
}

Wenn ich das Ganze dann auf einen ESP8266 Mini lade, kommt immer die folgende Fehlermeldung:

/Users/username/Documents/Arduino/libraries/Dusk2Dawn/Dusk2Dawn.cpp:293:65: error: cannot declare member function 'static bool Dusk2Dawn::zeroPadTime(char*, byte)' to have static linkage [-fpermissive]
293 | static bool Dusk2Dawn::zeroPadTime(char *str, byte timeComponent) {
| ^
Bibliothek Dusk2Dawn in Version 1.0.1 im Ordner: /Users/usewrname/Documents/Arduino/libraries/Dusk2Dawn wird verwendet

exit status 1

Was genau heißt das und wie kann nicht das Problem lösen? Habe schon nach der Fehlermeldung gegoogelt, aber die angebotenen Lösungen nicht verstanden, bzw. ihre Umsetzung hat nicht geholfen :frowning:

Das Original kommt von hier:
https://github.com/dmkishi/Dusk2Dawn?tab=readme-ov-file

Danke!

Wundert mich, dass das auf einem UNO funktioniert. Öffne die Datei Dusk2Dawn.cpp in dem Library-Verzeichnis und entferne das Schlüsselwort "static" vor den Methodendefinitionen von "min2str(char*, int);" und "zeroPadTime(char*, byte);".

Dann lässt sich der Code kompilieren. Es reicht, dass die Methoden bei der Deklaration im Headerfile als static ausgewiesen sind. Das noch einmal bei der Definition in der CPP Datei zu machen ist eigentlich falsch.

In der akt. Github Version ist das auch "korrekt" . Aber anscheinend wird über den Bibliotheksmanager noch eine andere geladen.

1 Like

Ich würde dir auch empfehlen, eher auf den ESP32 umzusteigen. Der ESP32-C3 ist zu ähnlichen Preisen zu haben und ist viel moderner. Ich hatte mit dem ESP8266 viele Probleme. der ESP32 ist m.E. ausgereifter, ebenso die Bibliotheken.

Da habe ich genau die gegenteiligen Erfahrungen gemacht.

Gruß Tommy

Also meine ESP8266 funktionieren genausogut wie die ESP32, man muss nur drauf achten, dass es kleine UNterschiede in der Wifi-Lib gibt und beim Kompilieren in der IDE die Warning/Error-Behandlung unterschiedlich ist. Was bei dem einen durchgeht, wird beim anderen als Compiler-Fehler ausgegeben. Hängt von der C++-Konvention ab. Habe festgestellen müssen, dass meine C++ -Gebilde von vor 30 Jahren heutzutage nicht mehr salon-fähig sind. Vor allem, was Deklarationen angeht. :wink:

Wenn der @TO genau diese Bibliothek verwenden will, ist es wurscht ob er einen ESP32 oder einen ESP8266 verwendet. Der Fehler bleibt der gleiche.

Auch wenn das Release 1.0.1 mit Bug Fix gekennzeichnet ist, ist es fehlerhaft. Und aus der Version, die diesen "static" Bug nicht mehr hat, wurde offensichtlich kein Release erstellt.

Es wäre auch traurig, wenn sich in 30 Jahren nichts getan hätte.

Ich bestreite ja nicht, dass da schon das ein oder andere coole feature dazugekommen ist, aber ich hasse es, wenn mir Software vorgibt, wie ich zu programmieren habe... :joy:

Hallo Leute,

Danke. Mit einem ESP32 S2 hat es auch nicht funktioniert (gleicher Fehler).
Ich habe jetzt ein anderes Script verwendet, welches funktioniert.
Eventuell mache ich es am Ende auch mit der OpenWheaterMap API ..

Ich habe doch geschrieben was nötig ist um die Lib ans laufen zu bekommen. Das ist doch nun wirklich nur eine Kleinigkeit.

Sorry, hatte ich angesichts der vielen Antworten ganz übersehen :slight_smile: … ok, hat funktioniert, danke dir!

Hat das nicht C++ vor 30 Jahren auch schon gemacht? Macht das nicht jede Sprache?

Die Frage habe ich mir auch gestellt, habe mir aber verkniffen sie hier öffentlich zu stellen, um den Thread nicht komplett zu "verquatschen".

Aber da der TO de Lösung inzwischen ja registriert hat, kommt es jetzt auch nicht mehr drauf an :wink:.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.