Make Your OWN clock Using External RTC

ssssss
This content provide you Experience

In ESP Series this is unique project to make own clock using ESP32 and External RTC module and display your clock in OLED display.

Components and software Required –

  • Arduino IDE in operating system.
  • RTC Module 
  • OLED display
  • ESP32 
  • PCB board / Breadboard
  • Jumpers Wire

Install Arduino IDE follow this blog on how to install ESP in Arduino IDE—
https://elconics.com/getting-started-withesp32/

Install Library in Arduino IDE

Go to this get hub link to download zip file of RTC library– https://github.com/adafruit/RTClib

Click on sketch >> include libraries >> add Zip library

Select your zip file named RTClib-master.zip >> click on open

Now you get this notification in bottom of Arduino IDE

Follow this same step and and Download these library >> and install it.
click on this link to download –
Adafruit GFX– –https://github.com/adafruit/Adafruit-GFX-Library
SPI – https://github.com/PaulStoffregen/SPI
Adafruit SSD1306https://github.com/adafruit/Adafruit_SSD1306

Connect ESP to RTC module

Add this Code to view in results in Serial monitor

#include <SPI.h>
#include <Wire.h>
#include "RTClib.h"
 
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
 

 
 
void setup() 
{
 
Serial.begin(9600);
 
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
 

 
rtc.adjust(DateTime(__DATE__, __TIME__));
//*******************************Important Note*******************
// You have to adjust this time only once afterwards you have to comment this line otherwise 
// On every boot time will again reset and will start from the last reseted time



 
}
 
void loop()
{
DateTime now = rtc.now();
 Serial.print(now.hour() , DEC);
 Serial.print(":");
 Serial.print(now.minute() , DEC);
 Serial.print(":");
Serial.print(now.second() , DEC);
Serial.print(" ");
 
 


 

Serial.print(now.day(), DEC);
 Serial.print(":");

Serial.print(now.month() , DEC);
 Serial.print(":");

Serial.print(now.year() , DEC);
Serial.print("  ");
 

Serial.println(daysOfTheWeek[now.dayOfTheWeek()]);
delay(1000);
 

}

To See Results on OLED SPI

Connect OLED in this form with RTC module shown previously

Follow this Code

#include <SPI.h>

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

#include "RTClib.h"

RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

#define OLED_MOSI  23

#define OLED_CLK   18

#define OLED_DC    4

#define OLED_CS    5

#define OLED_RESET 2

Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);


void setup() 

{


Serial.begin(9600);


if (! rtc.begin()) {

Serial.println("Couldn't find RTC");

while (1);

}


rtc.adjust(DateTime(__DATE__, __TIME__));

display.begin(SSD1306_SWITCHCAPVCC);

display.clearDisplay();

display.setTextColor(WHITE);

//display.startscrollright(0x00, 0x0F);

display.setTextSize(2);

display.setCursor(0,5);

display.print("  Clock ");

display.display();

delay(3000);

}


void loop()

{

DateTime now = rtc.now();


display.clearDisplay();

display.setTextSize(2);

display.setCursor(75,0);

display.println(now.second(), DEC);


display.setTextSize(2);

display.setCursor(25,0);

display.println(":");


display.setTextSize(2);

display.setCursor(65,0);

display.println(":");


display.setTextSize(2);

display.setCursor(40,0);

display.println(now.minute(), DEC);


display.setTextSize(2);

display.setCursor(0,0);

display.println(now.hour(), DEC);


display.setTextSize(1);

display.setCursor(0,15);

display.println(now.day(), DEC);

display.print(daysOfTheWeek[now.dayOfTheWeek()]);


display.setTextSize(1);

display.setCursor(25,15);

display.println("-");


display.setTextSize(1);

display.setCursor(40,15);

display.println(now.month(), DEC);


display.setTextSize(1);

display.setCursor(55,15);

display.println("-");


display.setTextSize(1);

display.setCursor(70,15);

display.println(now.year(), DEC);


display.display(); 

}

Leave a Comment

Your email address will not be published. Required fields are marked *

Related post