DCF77 am ESP 32

Hallo,
ich möchte mein ESP32 gerne mit dem DCF77 Zeitsignal versorgen und auswerten. (Wlan ist nicht vorhanden)
Ich bin mittlerweile am verzweifeln da ich scheinbar immer ein Problem mit der DCF77 Bibliothek bekomme.

Wenn ic

#include <DCF77.h> 
#include <Time.h>  

#define DCF_PIN 8	        
#define DCF_INTERRUPT 0		 

time_t time;

DCF77 DCF = DCF77(DCF_PIN,DCF_INTERRUPT);

void setup() 
{
Serial.begin(115200);
DCF.Start();
}


void digitalClockDisplay(time_t _time)
{ tmElements_t tm;   
  breakTime(_time, tm);
  Serial.print("Time: ");
  Serial.print(tm.Hour);
  Serial.print(":");
  ....
  Serial.print(tm.Month);
  Serial.print(".");
  Serial.println(tm.Year+1970);
}

Ergebnis: Compilation error: 'time_t time' redeclared as different kind of symbol

Ich stehe da echt auf dem Schlauch. Was mache ich falsch?

Lies dir das mal durch.

Vielleicht hilft es. Immerhin ist eine Hardware-Anforderung drin.

Alternativ. Nutze einfach ein Zeitmodul mit Batterie.

Gruß

Pucki

welsche Time ist das ?
Empfohlen

Danke für deinen Hinweis!
Dann sollte es
time_t t = now(); // store the current time in time variable t
sein.

Wenn ich das aber auf t anpasse, kompilliert er nicht mehr:

   time_t currentTime =latestupdatedTime - UTCTimeDifference + (now() - processingTimestamp);
                                                                ^~~
                                                                pow

exit status 1

Compilation error: exit status 1

Verwende doch die Libs, die in den Beispielen zu der Library aufgeführt sind:

Hi @Kai-R ,

wenn ich das Beispiel aus der DCF77 Library bei mir compilieren will, ergibt sich zunächst der gleiche Fehler: 'time_t time' redeclared as different kind of symbol.

Ich habe dann mal diese Zeile rausgenommen (alternativ auf "time_t mytime;" ändern):

// Die folgende Zeile auskommentieren, so dass der Fehler
// error: 'time_t time' redeclared as different kind of symbol
// verschwindet. Augenscheinlich muss die Variable "time" hier gar nicht mehr deklariert werden.
//time_t time; 

Danach taucht der Fehler in der DCF77-Library auf, dass "now()" nicht deklariert sei.

Bei einem Blick in die DCF77.cpp zeigt sich dann Folgendes (hier nur der relevante Ausschnitt):

#include <DCF77.h>       //https://github.com/thijse/Arduino-Libraries/downloads
#include <Time.h>        //http://playground.arduino.cc/code/time
#include <Utils.h>

Wenn man nun hier von Time.h auf TimeLib.h umstellt, compiliert der Beispielsketch fehlerfrei (von einigen Warnungen, die auch schon vorher da waren, abgesehen).

Man muss also die DCF77-Library installieren, dort DCF77.cpp öffnen, ändern und speichern:

#include <DCF77.h>       //https://github.com/thijse/Arduino-Libraries/downloads
#include <TimeLib.h>       
#include <Utils.h>

Ob der Rest dann das tut, was gewünscht ist, bleibt zu prüfen ...

:wink:

Schau Dir mal meinen Hinweis im Post 6 an ...

Als erstes mal im Sketch die Zeile time_t time; auskommentieren und speichern:

//time_t time;

Weiter (für Windows):

Das Verzeichnis mit den Libs findest Du am einfachsten, indem Du in der IDE die Einstellungen öffnest und Dir den Pfad des Sketchbooks merkst:

Den öffnest Du dann im Dateiexplorer, suchst dort den Ordner "libraries" und öffnest diesen:

image

Dort in den Ordner DCF77

image

Und dann die Datei DCF77.cpp öffnen:
image

Dort dann anstelle von "#include <Time.h>" das TimeLib.h eintragen, das sollte dann so aussehen:

Speichern.

Zurück zur IDE und kompilieren ...

Ich hoffe es hilft, viel Erfolg!

1 Like

Das ist wirklich eine super Anleitung! Vielen Dank dafür.
Es funktioniert!

Um allen anderen eine fertigen Sketch zu geben, hier mein kleines Testprogramm:

#include "DCF77.h"
#include "TimeLib.h"
#include <Wire.h>

#define DCF_PIN 35         
#define DCF_INTERRUPT 0 

//time_t time;
DCF77 DCF = DCF77(DCF_PIN, DCF_INTERRUPT);

bool g_bDCFTimeFound = false;

void setup() 
{ 
  Serial.begin(115200); 
  DCF.Start();
  Serial.println("Warten auf DCF77-Zeit... ");

  delay(2000);
}

void loop() 
{
  delay(1000);
  time_t DCFtime = DCF.getTime(); 
  if (DCFtime!=0)
  {
    Serial.println("Zeit ist aktuell");
    setTime(DCFtime);
    g_bDCFTimeFound = true;
   
  }
  
  if (g_bDCFTimeFound)
  {
    delay(50);
   
  }
  digitalClockDisplay();  
}

void digitalClockDisplay()
{
  printDigits(hour());
    Serial.print(":");
  printDigits(minute());
    Serial.print(":");
  printDigits(second());
  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
  Serial.print(month());
  Serial.print(" ");
  Serial.print(year()); 
  Serial.println();
}

void printDigits(int digits)
{
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}
1 Like

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