ESP8266 NodeMCU v3 + RTC DS1307 connection and what lib ?

Hey ! :slight_smile:
like in the topic i have no clue how to connect esp8266 NodeMCU v3 and RTC DS1307
ive tryed few libs and connections but i cant get it to work

my nodemcu pins are:

clock has :
DS
SCL
SDA
and obviosly: GND VCC

i dont know what lib to use and how to connect those two
ive tryed GitHub - Makuna/Rtc: Arduino Library for RTCs, Ds1302, Ds1307, Ds3231, Ds3232, Ds3234 and Pcf8563/BM8563 with deep support. Please refer to the Wiki for more details. Please use the Github Discussions to ask questions as the GitHub Issues feature is used for bug tracking. this lib with sample code

// CONNECTIONS:
// DS1307 SDA --> SDA
// DS1307 SCL --> SCL
// DS1307 VCC --> 5v
// DS1307 GND --> GND

#if defined(ESP8266)
#include <pgmspace.h>
#else
#include <avr/pgmspace.h>
#endif

/* for software wire use below
#include <SoftwareWire.h> // must be included here so that Arduino library object file references work
#include <RtcDS1307.h>
SoftwareWire myWire(SDA, SCL);
RtcDS1307 Rtc(myWire);
for software wire use above */

/* for normal hardware wire use below /
#include <Wire.h> // must be included here so that Arduino library object file references work
#include <RtcDS1307.h>
RtcDS1307 Rtc(Wire);
/
for normal hardware wire use above */

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

Serial.print("compiled: ");
Serial.print(DATE);
Serial.println(TIME);

//--------RTC SETUP ------------
// if you are using ESP-01 then uncomment the line below to reset the pins to
// the available pins for SDA, SCL
// Wire.begin(0, 2); // due to limited pins, use pin 0 and 2 for SDA, SCL

Rtc.Begin();

RtcDateTime compiled = RtcDateTime(DATE, TIME);
printDateTime(compiled);
Serial.println();

if (!Rtc.IsDateTimeValid())
{
// Common Cuases:
// 1) first time you ran and the device wasn't running yet
// 2) the battery on the device is low or even missing

Serial.println("RTC lost confidence in the DateTime!");

// following line sets the RTC to the date & time this sketch was compiled
// it will also reset the valid flag internally unless the Rtc device is
// having an issue

Rtc.SetDateTime(compiled);
}

if (!Rtc.GetIsRunning())
{
Serial.println("RTC was not actively running, starting now");
Rtc.SetIsRunning(true);
}

RtcDateTime now = Rtc.GetDateTime();
if (now < compiled)
{
Serial.println("RTC is older than compile time! (Updating DateTime)");
Rtc.SetDateTime(compiled);
}
else if (now > compiled)
{
Serial.println("RTC is newer than compile time. (this is expected)");
}
else if (now == compiled)
{
Serial.println("RTC is the same as compile time! (not expected but all is fine)");
}

// never assume the Rtc was last configured by you, so
// just clear them to your needed state
Rtc.SetSquareWavePin(DS1307SquareWaveOut_Low);
}

void loop ()
{
if (!Rtc.IsDateTimeValid())
{
// Common Cuases:
// 1) the battery on the device is low or even missing and the power line was disconnected
Serial.println("RTC lost confidence in the DateTime!");
}

RtcDateTime now = Rtc.GetDateTime();

printDateTime(now);
Serial.println();

delay(10000); // ten seconds
}

#define countof(a) (sizeof(a) / sizeof(a[0]))

void printDateTime(const RtcDateTime& dt)
{
char datestring[20];

snprintf_P(datestring,
countof(datestring),
PSTR("%02u/%02u/%04u %02u:%02u:%02u"),
dt.Month(),
dt.Day(),
dt.Year(),
dt.Hour(),
dt.Minute(),
dt.Second() );
Serial.print(datestring);
}

but all i get in serial monitor is

RTC lost confidence in the DateTime!
165/165/2165 37:165

plz help if any one knows how to sole it

Hey,
Here the SDA is D2 and SCL is D1.
So, connect the SDA pin to D2 and SCL to D1.
After that you can try out with the code in this link(ESP8266 With DS1307 RTC, NV SRAM and Square-Wave Output - Hackster.io), this one worked for me. And was pretty simple to understand.

The 3.3V will work as VCC, won't make any problem.

~Anuj

2 Likes