Fehler beim Kompilieren RTC

Hallo zusammen,
ich versuche mich daran ein schon fertiges Projekt (ESP8266 Alarmclock) nachzubauen. Leider bekomme ich
beim Kompilieren mehrere Fehler und der ursprüngliche Ersteller des Codes kann mir leider helfen.
Als Board verwende ich ein "NodeMCU Lolin V3 Modul ESP8266".
Leider ist der Code etwas zu lang, daher liegt er im Anhang.

Folgende Fehler erscheinen beim Kompilieren :

In file included from C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:38:0:
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master/DS3232RTC.h:136:26: error: 'tmElements_t' has not been declared
         static byte read(tmElements_t &tm);
                          ^
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master/DS3232RTC.h:137:20: error: 'tmElements_t' has not been declared
         byte write(tmElements_t &tm);
                    ^
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp: In static member function 'static time_t DS3232RTC::get()':
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:82:5: error: 'tmElements_t' was not declared in this scope
     tmElements_t tm;
     ^
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:82:18: error: expected ';' before 'tm'
     tmElements_t tm;
                  ^
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:84:17: error: expected primary-expression before ')' token
     if ( read(tm) ) return 0;
                 ^
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:85:24: error: expected primary-expression before ')' token
     return( makeTime(tm) );
                        ^
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:85:24: error: 'makeTime' was not declared in this scope
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp: In member function 'byte DS3232RTC::set(time_t)':
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:95:5: error: 'tmElements_t' was not declared in this scope
     tmElements_t tm;
     ^
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:95:18: error: expected ';' before 'tm'
     tmElements_t tm;
                  ^
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:97:20: error: expected primary-expression before ')' token
     breakTime(t, tm);
                    ^
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:97:20: error: 'breakTime' was not declared in this scope
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:98:22: error: expected primary-expression before ')' token
     return ( write(tm) );
                      ^
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp: At global scope:
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:105:22: error: 'byte DS3232RTC::read' is not a static member of 'class DS3232RTC'
 byte DS3232RTC::read(tmElements_t &tm)
                      ^
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:105:22: error: 'tmElements_t' was not declared in this scope
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:105:38: error: expected primary-expression before ')' token
 byte DS3232RTC::read(tmElements_t &tm)
                                      ^
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:106:1: error: expected ',' or ';' before '{' token
 {
 ^
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:127:23: error: 'byte DS3232RTC::write' is not a static member of 'class DS3232RTC'
 byte DS3232RTC::write(tmElements_t &tm)
                       ^
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:127:23: error: 'tmElements_t' was not declared in this scope
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:127:39: error: expected primary-expression before ')' token
 byte DS3232RTC::write(tmElements_t &tm)
                                       ^
C:\Users\Stefan\Documents\Arduino\libraries\DS3232RTC-master\DS3232RTC.cpp:128:1: error: expected ',' or ';' before '{' token
 {

Es wäre nett wenn ich Hilfe bekommen könnte,
Byllyy

Debug.ino (3.31 KB)

nextion.h (9.62 KB)

Wecker_v1.07_Public.ino (24.9 KB)

Die Fehler sin doch in der Fehlermeldung gut beschrieben. Wo ist denn da dein Problem ?
Poste deinen Sketch bitte zusätzlich als txt-Datei-Anhang, dann ist der von jedem, auch mobilen Usern lesbar.

Hallo und Danke für deine schnelle Antwort.

Leider bin ich mit der Fehlermeldung nicht weitergekommen (Anfänger). Google sagte mir das dieser
Fehler etwas mit der "Time.h" Libary zu tun hätte aber die dort vorgeschlagene Lösung hat mir nicht geholfen.
Im Anhang nochmal die Sketche als TXT.

Vielen Dank,
Byllyy

Debug.txt (3.4 KB)

nextion.h.txt (9.88 KB)

Wecker_v1.07_Public.ino.txt (25.5 KB)

Du hast wahrscheinlich eine andere Version der Library als die vom Ersteller.(DS3232RTC.h) Mittlerweile werden manche Dinge anders geschrieben. Schaue dir mal die Beispiele deiner Library an und vergleiche die "Befehle" mit denen des Erstellers...

Gruß

Hast du denn mal die Library "time.h" eingebunden ?
Sieht tatsächlich danach aus, dass diese fehlt.

Was mich allerdings auch wundert, dass hier eine RTC verwendet wird, obwohl man gut die Zeit aus dem Netz nehmen kann.

Hallo und Danke für Eure Hilfe,
ich habe jetzt lange versucht die Vorschläge umzusetzten.

  1. Time.h ist als Libary eingesetzt
  2. Bei der Libary DS3232RTC.h habe ich versucht die Beispiele mit meinem Code zu vergleichen um evl. einen
    Fehler zu finden, doch leider erfolglos.
  3. Ich habe versucht den RTC komplett aus dem Code zu nehmen doch auch daran scheitere ich.

Gibt es noch eine gute Idee?
Vielen Dank,
Byllyy

Mein Tipp zu deinem Problem:

Baue dein Projekt in Steps auf.
Nimm den ESP mit der RTC und lass dir die Zeit mittels Beispiel auf dem Bildschirm anzeigen.
Du musst dich damit langsam an die Programmierung des ESP rantasten. Wenn es funktioniert, dann das Display anbauen, usw.
Ich vermute das Projekt ist aktuell eine Nummer zu groß für dich.

Da hast du natürlich vollkommen Recht. Meine Hoffnung war, da es ja ein fertiges Projekt war, das es nur eine kleine Anpassung bräuchte um auch wieder zu laufen.
Wenn man den Code nicht selber geschrieben hat, ist es für einen Anfänger wie mich wirklich zu schwer
sich hinein zu Denken.

Vielen Dank,
Byllyy

Auch für uns ist es nicht einfach, einen unbekannte Sketch zu durchforsten.
Wenn wir die Hardware nicht vor Ort haben, können wir auch nicht testen.
Dann wird es noch schwerer.

Quickreply
Frage: Ist es das Projekt?

Genau das ist es !

@ my_xy_projekt

Hast du nachgefragt weil du mir evtl. helfen kannst?
Ich bin leider kurz davor das Projekt zu Beenden da ich nicht weiterkomme.

LG,
Byllyy

compiliert bei Dir folgender Code?

#include <TimeLib.h>
#include <DS3232RTC.h>        //http://github.com/JChristensen/DS3232RTC
#include <Wire.h>             //http://arduino.cc/en/Reference/Wire

#define Addr 0x4A               // MAX44009 I2C address is 0x4A(74)

const char* Wochentag[] = {"Fehler", "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" };
const char* Monate[] = {"Fehler", "Januar", "Februar", "März", "April", "Mai", "Juni", "juli", "August", "Septempber", "Oktober", "November", "Dezember" };
static time_t tLast;
time_t t;
time_t webTime;
int moonPhase;
int WeatherIcon = 8;
int lastsecond, actPage;
boolean bAlarm;
boolean weatherOK, forecastOK, webTimeOK;     // 1 if answere from server OK
uint8_t  almStd[4], almMin[4], almStatus[4], almSound[4]; //almStatus: b0 = on/off; b1=Mo-Fr; b2=Sa; b3=So; b4=activ; b5=snooze; b6=Quitt; b7=;

unsigned long lastNexPoll;                      // letzte Serverabfrage
unsigned long nexPolInterval =  250;

// JSON Variables
String JSONtext;                                  // String to hold answere from openweathermap
int endResponse         = 0;                      // Verwendung für parsen
boolean startJson       = false;                  // Verwendung für parsen

// OpenWeatherMap settings
const char weatherServer[30] = "api.openweathermap.org";    // Address for openweathermap
String nameOfCity = "Pfäffikon,CH";  //7286788      // City to receive weather forecast from
String apiID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";  // Personal API from openweathermap.org
String weatherType;                                 // Forecast data of weather
unsigned long lastWeatherTime = 0;                      // letzte Serverabfrage
unsigned long weatherInterval =  2500;              // Intervall für Wetter-Server abfrage (nur erste nach Kaltstart)
unsigned long lastForecastTime = 0;                      // letzte Serverabfrage
unsigned long forecastInterval = 2500;              // Intervall für Wetter-Server abfrage (nur erste nach Kaltstart)
float rain[4], wind[4], temp[4], humidity[4];
time_t forecastTime[4];
float tempAct, windAct;                             // Actual weather data
String weatherAct, descriptionAct, iconAct2;                  // Actual weather data
float totalRain;                                    // Sum of rain in the forecast
bool readForecast, readWeather, lastWasForecast;    // Just one at one time possible

// Timezonedb,com settings
const char timeServer[30] = "api.timezonedb.com";       // Address for timezonedb.org
String timeZone = "Europe/Zurich";                    // name of Timezone
String timeApiID = "XXXXXXXXXXXXXXXXXXXXXXXXXXX";       // Personal API from timezonedb.org
unsigned long lastWebTime;                            // letzte Serverabfrage
unsigned long webTimeInterval =  2500;                // Intervall for Time request (only after cold start)
int timeOffset;

char serverString[30];
bool clientInUse;                                 // verhindert gleichzeitige Anfragen an Server

void saveAlarms();
void refreshClockPage();
void displayAlarms();
void refreshForecastPage();                  // Function in "nextion.h"
void refreshSetupPage();


void setup(void) /////////////////////////////////////////////////////////////////////////////////////////////////
{ /////////////////////////////// Setup /////////////////////////////////////////////////////////////////////////
  Serial.begin(57600);
  Serial.println();

  // Setup and start Nexton Display
  delay(300);

  pinMode(16, OUTPUT);
  delay(1000);
  digitalWrite(16, 1);

    // synchronize Time library with the external RTC every five minutes by default.
  setSyncProvider(RTC.get);
  if (timeStatus() != timeSet) {
    Serial.println(" FAIL!");
  }

}  ///////////////////// End Setup //////////////////////////////////////////////////////////////////////////


void loop(void) ////////////////////////////////////////////////////////////////////////////////////////////
{ /////////////////////////// Loop ////////////////////////////////////////////////////////////////////////
  t = now();    // Set to current time

  if (second(t) != lastsecond) {
    lastsecond = second(t);
  }

}  //////////////////// End Loop /////////////////////////////////////////////////////////////////////////////

Hallo my_xy_projekt,
wie nett das du versuchst mir zu Helfen.

Wenn ich deinen Code mit der aus dem Link angegebenen Library(DS3232RTC) compiliere, bekomme ich folgenden Fehler.

WARNUNG: Bibliothek DS3232RTC-master behauptet auf avr Architektur(en) ausgeführt werden zu können und ist möglicherweise inkompatibel mit Ihrem derzeitigen Board, welches auf esp8266 Architektur(en) ausgeführt wird.
C:\Users\Stefan\Documents\Arduino\Test\Test.ino: In function 'void setup()':
Test:75:19: error: 'RTC' was not declared in this scope
   setSyncProvider(RTC.get);
                   ^
exit status 1
'RTC' was not declared in this scope

Als Board habe ich ein "NodeMCU 1.0 (ESP-12E)" und ein" Wemos D1 mini Pro" getestet.
Vielen Dank,
Byllyy

byllyy:
Wenn ich deinen Code mit der aus dem Link angegebenen Library(DS3232RTC) compiliere, bekomme ich folgenden Fehler.
WARNUNG: Bibliothek DS3232RTC-master behauptet auf avr Architektur(en) ausgeführt werden zu können

Als Board habe ich ein "NodeMCU 1.0 (ESP-12E)" und ein" Wemos D1 mini Pro" getestet.

Hm. stell mal als Board einen UNO under NANO ein.
Nur kompilieren.

Bei mir machts der Code fehlerfrei.
Wenns dann auch fehlerfrei geht, hast nen Problem...

Mit Beiden (UNA und NANO) klappt es fehlerlos.

byllyy:
Mit Beiden (UNA und NANO) klappt es fehlerlos.

Dann hier für den esp:

#include <DS3232RTC.h>      // https://github.com/JChristensen/DS3232RTC
DS3232RTC myRTC;

void setup()
{
  Serial.begin(115200);
  myRTC.begin();
}

void loop()
{
  static int lastsecond = 61;
  time_t t = myRTC.get();
  if (second(t) != lastsecond) {
    lastsecond = second(t);
    Serial.println(second(t));
  }
}

Wenn ich deinen Code für den ESP compiliere klappt es aber mit folgender Warnung :

WARNUNG: Bibliothek DS3232RTC-master behauptet auf avr Architektur(en) ausgeführt werden zu können und ist möglicherweise inkompatibel mit Ihrem derzeitigen Board, welches auf esp8266 Architektur(en) ausgeführt wird.
Executable segment sizes:
IROM   : 236904          - code in flash         (default or ICACHE_FLASH_ATTR) 
IRAM   : 27560   / 32768 - code in IRAM          (ICACHE_RAM_ATTR, ISRs...) 
DATA   : 1260  )         - initialized variables (global, static) in RAM/HEAP 
RODATA : 732   ) / 81920 - constants             (global, static) in RAM/HEAP 
BSS    : 25400 )         - zeroed variables      (global, static) in RAM/HEAP 
Der Sketch verwendet 266456 Bytes (25%) des Programmspeicherplatzes. Das Maximum sind 1044464 Bytes.
Globale Variablen verwenden 27392 Bytes (33%) des dynamischen Speichers, 54528 Bytes für lokale Variablen verbleiben. Das Maximum sind 81920 Bytes.

byllyy:
Wenn ich deinen Code für den ESP compiliere klappt es aber mit folgender Warnung :

WARNUNG: Bibliothek DS3232RTC-master behauptet auf avr Architektur(en) ausgeführt werden zu können und ist möglicherweise inkompatibel mit Ihrem derzeitigen Board, welches auf esp8266 Architektur(en) ausgeführt wird.

Das ist richtig.
Kann aber ignoriert werden.
Hintergrund ist folgender Hinweis in der lib:

// For AVR architecture, a DS3232RTC object named RTC is instantiated
// by the library and I2C initialization occurs in the constructor;
// this is for backwards compatibility.
// For other architectures, the user needs to instantiate a DS3232RTC
// object and optionally initialize the I2C bus by calling
// DS3232RTC::begin(). The constructor has an optional bool parameter
// to indicate whether I2C initialization should occur in the
// constructor; this parameter defaults to true if not given.

Du musst jetzt in Deinem Sketch für die Uhr einige kleine Änderungen machen.
Ein myRTC Object erstellen und initialisieren.
(Also so wie ich)

dann musst Du im gesamten Code RTC. ersetzen durch myRTC. .
Danach sollte es laufen.

Vielen Dank für deine Hilfe. Ich werde versuchen deine Hinweise umzusetzten und hoffe ich komme weiter.
Ich melde mich in jedem Fall wie es denn so läuft.

Danke nochmal und LG,
Byllyy