New ESP32-S3 development board is now available → /products
</>OceanLabz
Beginner2 Jul 2026 · 2 min read

ESP32 DS3231 Real Time Clock (RTC) Module with Arduino IDE

## Introduction The DS3231 is a highly accurate real-time clock (RTC) module for ESP32, featuring an I2C interface for easy connectivity. It is ideal for applications requiring precise timekeeping, such as clocks and timers. Here’s a guide on reading the current date and time using ESP32 with the DS

ESP32 DS3231 Real Time Clock (RTC) Module with Arduino IDE

#Introduction

The DS3231 is a highly accurate real-time clock (RTC) module for ESP32, featuring an I2C interface for easy connectivity. It is ideal for applications requiring precise timekeeping, such as clocks and timers. Here’s a guide on reading the current date and time using ESP32 with the DS3231 module.

#Required Components

  • ESP32 Board
  • DS3231 RTC Module
  • Jumper Wires
  • Breadboard (Optional)

#Pinout

#Circuit Diagram / Wiring

  • RTC VCC → 3.3V (ESP32)
  • RTC GND → GND (ESP32)
  • RTC SDA → GPIO 21 (ESP32)
  • RTC SCL → GPIO 22 (ESP32)

#Code / Programming

/* Filename: ol_ds3231_rtc.ino Description: Reads current date and time from DS3231 RTC Module Author: www.oceanlabz.in Modification: 1/4/2025 */

#include <Wire.h> #include "RTClib.h"

// Create an RTC object RTC_DS3231 rtc;

void setup() { Serial.begin(115200); Wire.begin(21, 22); // SDA, SCL

// Initialize the RTC if (!rtc.begin()) { Serial.println("Couldn't find RTC"); while (1); }

// Check if the RTC lost power and set the time if (rtc.lostPower()) { Serial.println("RTC lost power, let's set the time!");

[object Promise]

} }

void loop() { // Get the current date and time DateTime now = rtc.now();

// Print date and time 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();

delay(1000); }

#Explanation

  • The code initializes a DS3231 RTC (Real-Time Clock) module with the ESP32 to keep track of the current date and time.
  • In the setup() function, the RTC is checked for proper connection, and if it has lost power, it sets the time to the compilation date and time.
  • The loop() function continuously retrieves the current date and time from the RTC and prints it to the Serial Monitor every second.

#Troubleshooting

  • Ensure the DS3231 module is powered correctly (VCC to 3.3V and GND to GND).
  • Verify that SDA is connected to GPIO 21 and SCL is connected to GPIO 22.
  • Install the RTClib library by Adafruit using the Arduino Library Manager.
  • If "Couldn't find RTC" appears in the Serial Monitor, check the I2C wiring and module connections.
  • If the displayed time resets after power loss, ensure the CR2032 backup battery is installed correctly and has sufficient charge.