In this project, we will interface Real Time Clock (RTC) Module DS3231 with NodeMCU ESP8266 Board and display the Time and Date value on 16×2 LCD Display.
Overview
In this project we will learn how to interface the RTC Module DS3231 with NodeMCU ESP8266 12E Board and 16×2 LCD Display. We will use DS3231 Real Time Clock (RTC) module to keep track of the correct time & date & display it on 16×2 LCD Display using ESP8266 as our microcontroller.
The alternative IC for DS3231 is DS1307. The DS3231 RTC has a built-in alarm functions as well as temperature sensor with a resolution of 0.25 and an accuracy of ±3°C which make this project more easier.
You can refer to our earlier post if you wanna use DS3231 with Arduino Boards:
1. Arduino DS3231 Real Time Clock (RTC) with Temperature Monitor
2. Arduino DS3231 Real Time Clock with Alarm & Temperature
3. ESP32 & DS3231 Based Real Time Clock (RTC) on OLED
Bill of Materials
Following are the components required for making this project. All the components can be easily purchased from Amazon. The purchase link is given as well.
| S.N. | Components Name | Quantity | Purchase Links |
|---|---|---|---|
| 1 | NodeMCU ESP8266 | 1 | Amazon | AliExpress |
| 2 | 16x2 LCD Display | 1 | Amazon | AliExpress |
| 3 | RTC Module DS3231 | 1 | Amazon | AliExpress |
| 4 | Connecting Wires | 10 | Amazon | AliExpress |
| 5 | Breadboard | 1 | Amazon | AliExpress |
DS3231 RTC Module
The DS3231 is a low-cost, extremely accurate I²C real-time clock (RTC) with an integrated temperature-compensated crystal oscillator (TCXO) and crystal. The device incorporates a battery input and maintains accurate timekeeping when the main power to the device is interrupted.
The RTC maintains seconds, minutes, hours, day, date, month, and year information. The date at the end of the month is automatically adjusted for months with fewer than 31 days, including corrections for leap year. The clock operates in either the 24-hour or 12-hour format with an active-low AM/PM indicator. Two programmable time-of-day alarms and a programmable square-wave output are provided.
A precision temperature-compensated voltage reference and comparator circuit monitor the status of VCC to detect power failures, to provide a reset output, and to automatically switch to the backup supply when necessary. Additionally, the active-low RST pin is monitored as a pushbutton input for generating a µP reset.
Key Features:
1. Highly Accurate RTC Completely Manages All Timekeeping Functions
2. Real-Time Clock Counts Seconds, Minutes, Hours, Date of the Month, Month, Day of the Week, and Year, with Leap-Year Compensation Valid Up to 2100
3. Accuracy ±2ppm from 0°C to +40°C
4. Accuracy ±3.5ppm from -40°C to +85°C
5. Digital Temp Sensor Output: ±3°C Accuracy
6. Register for Aging Trim
7. Active-Low RST Output/Pushbutton Reset Debounce Input
8. Two Time-of-Day Alarms
9. Programmable Square-Wave Output Signal
10. Simple Serial Interface Connects to Most Microcontrollers
11. Fast (400kHz) I2C Interface
12. Battery-Backup Input for Continuous Timekeeping
13. Low Power Operation Extends Battery-Backup Run Time
14. 3.3V Operation
15. Operating Temperature Ranges: Commercial (0°C to +70°C) and Industrial (-40°C to +85°C)
16. Underwriters Laboratories® (UL) Recognized
Circuit: ESP8266 & DS3231 Based Real Time Clock
Here is the circuit diagram for interfacing DS3231 Module with NodeMCU ESP8266. The connection is fairly simple. You can assemble the circuit in breadboard as well.
The DS3231 & the 16×2 LCD both are I2C Module. So we just need 2 pins for connection. So, connect the Serial Data (SDA) pins to NodeMCU D2 pin & Serial Clock (SCL) to NodeMCU D1 pin. Supply 5V to LCD & RTC Module through Vin pin of NodeMCU. You can also use 3.3V supply for DS3231 Module.
Source Code/Program
The source code for ESP8266 & DS3231 RTC Module is given below. You can copy the code and upload directly to the NodeMCU ESP8266-12E Board. But before that you will need one library, i.e the library for RTC Module. So download the library first from the link below and add to the Arduino IDE.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
#include <Wire.h> // Library for I2C communication #include <SPI.h> // not used here, but needed to prevent a RTClib compile error #include "RTClib.h" #include <LiquidCrystal_I2C.h> // Library for LCD LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2); RTC_DS1307 RTC; // Setup an instance of DS1307 naming it RTC void setup () { Serial.begin(57600); // Set serial port speed lcd.begin(); Wire.begin(); // Start the I2C RTC.begin(); // Init RTC RTC.adjust(DateTime(__DATE__, __TIME__)); // Time and date is expanded to date and time on your computer at compiletime Serial.print('Time and date set'); lcd.setCursor(0, 0); lcd.print("Real Time Clock"); delay(3000); lcd.clear(); } void loop () { DateTime now = RTC.now(); Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.day(), DEC); Serial.print(' '); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println(); lcd.setCursor(0, 0); lcd.print("Date: "); lcd.setCursor(0, 1); lcd.print("Time: "); lcd.setCursor(6, 0); lcd.print(now.year(), DEC); lcd.print(":"); lcd.print(now.month(), DEC); lcd.print(":"); lcd.print(now.day(), DEC); lcd.setCursor(6, 1); lcd.print(now.hour(), DEC); lcd.print(":"); lcd.print(now.minute(), DEC); lcd.print(":"); lcd.print(now.second(), DEC); delay(1000); lcd.clear(); } |
ESP8266 & DS3231 Based Real Time Clock
Once the code is uploaded the RTC Module will start working. The time and date will be displayed in 16×2 LCD Display. There is no other setting required neither there is need of any extra buttons or switch.










