

The DS3231 is a highly accurate real-time clock (RTC) module with an I2C interface. It is designed to keep track of time (hours, minutes, seconds) and date (day, month, year) even during power outages, thanks to its onboard battery backup. The module features a temperature-compensated crystal oscillator (TCXO), ensuring exceptional accuracy with a drift of only ±2 minutes per year.








The DS3231 module typically has 6 pins. Below is the pinout and description:
| Pin | Name | Description |
|---|---|---|
| 1 | GND | Ground connection |
| 2 | VCC | Power supply (2.3V to 5.5V) |
| 3 | SDA | Serial Data Line for I2C communication |
| 4 | SCL | Serial Clock Line for I2C communication |
| 5 | 32K | Optional 32kHz output (can be used for external clocking) |
| 6 | SQW | Square Wave/Interrupt output (programmable frequency or alarm interrupt signal) |
VCC pin to a 3.3V or 5V power source and the GND pin to ground.SDA and SCL pins to the corresponding I2C pins on your microcontroller. For an Arduino UNO:SDA connects to A4SCL connects to A5SQW pin for alarms or square wave output.32K pin if you need a 32kHz clock signal.SDA and SCL lines if not already present on the module.0x68 by default.Below is an example of how to interface the DS3231 with an Arduino UNO to read the current time and date:
#include <Wire.h>
#include "RTClib.h" // Include the Adafruit RTC library
RTC_DS3231 rtc; // Create an RTC object
void setup() {
Serial.begin(9600); // Initialize serial communication
Wire.begin(); // Initialize I2C communication
if (!rtc.begin()) {
Serial.println("Couldn't find RTC. Check connections!");
while (1); // Halt execution if RTC is not found
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, setting the time!");
// Set the RTC to the current date and time
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
DateTime now = rtc.now(); // Get the current time and date
// Print the current time and date to the Serial Monitor
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); // Wait for 1 second before updating
}
RTC Not Detected:
SDA and SCL connections. Ensure the I2C address is set to 0x68.Incorrect Time/Date:
rtc.adjust() function to set the correct time and date.No Output on Serial Monitor:
Serial.begin(9600) is called in setup() and the Serial Monitor is set to 9600 baud.Drifting Time:
Q: Can the DS3231 operate without a battery?
A: Yes, but it will lose timekeeping during power outages.
Q: How long does the battery last?
A: A typical CR2032 battery can last several years, depending on usage.
Q: Can I use the DS3231 with 3.3V systems?
A: Yes, the DS3231 is compatible with both 3.3V and 5V systems.
Q: What is the purpose of the SQW pin?
A: The SQW pin can output a programmable square wave or serve as an alarm interrupt signal.
By following this documentation, you can effectively integrate the DS3231 RTC module into your projects for precise and reliable timekeeping.