An Arduino library for the DS3231 real-time clock (RTC).
The library provides easy-to-use methods to:
This document explains the installation and usage of the Library with the Arduino IDE.
You do have to install the Library in your Arduino IDE environment before you can use it. Installation instructions are provided, below.
After installing the Library in your Arduino IDE, using it in a program starts with three, simple steps:
#include <DS3231.h>
DS3231 myRTC;
Wire.begin();
Then, Library functions are typically accessed through the DS3231 object. For example, to read the current date of the month (1 through 28, 29, 30 or 31, depending on the month and the year):
unsigned int theDate = myRTC.getDate();
The Library defines two other classes to assist with managing date and time data:
RTClib::now()
function for receiving a date/time snapshot, as a DateTime object, from the DS3231 device.
If you use this library in a publicatoin, please cite it in one or both of the following two ways:
CITATION.cff
file here, which should be up to date with the permanent archive available from Zenodo
DS3231 is a low-cost integrated circuit (IC) providing a highly accurate, real time clock for use with Arduino, Raspberry Pi, BBC micro:bit and other popular small computing devices.
The IC is typically mounted on a circuit board or module, along with other hardware, such as header pins, supportive electrical components, and even EEPROM memory chips, for convenient attachment to a breadboard or an Arduino.
Several different modules are available from a number of competing vendors. This Library aspires to work with any DS3231 module that supports I2C communications with the IC.
DS3231 runs independently and can be kept running for a considerable length of time by a small, backup battery, even if power to the Arduino is turned off.
According to the datasheet , the DS3231 hardware "completely manages all timekeeping functions (including):
Data for the time and date are stored in memory locations on the DS3231. Each, distinct value is stored separately. This means the seconds are in one location, the minutes in another, and so forth. The DS3231 updates the values in the memory locations every second.
The device keeps track of time by operating its own 32.768 kHz crystal oscillator, similar to the timekeeper in an electronic watch. Temperature can affect oscillator speed. Accordingly, the DS3231 takes further steps to maintain accuracy. It senses the temperature around the crystal and adjusts the speed of the oscillator.
The temperature can be read from the DS3231 using a Library function. The data sheet declares it to be accurate to within 3 degrees, Celsius.
The DS3231 can run in a range between 2.3 volts and 5.5 volts. The device actually has two power supply pins: the primary source, V CC , and a secondary, backup source, V BAT .
Some popular modules mounting a DS3231 provide a receptacle for a coin battery, attaching it to the V BAT pin. If a sufficiently-charged battery is present, the DS3231 will switch automatically to the battery after detecting a drop in V CC voltage below a certain "power-fail" level.
It will switch back to V CC automatically, if and when that voltage rises back up above both the power-fail and the battery voltage level.
One point regarding the choice of battery may deserve consideration: the question of whether to install a rechargeable coin battery, or to disable a charging circuit if such a thing is provided on the module being used. The topic is controversial and the authors of this Library do not express any opinion about it. Readers may choose to search online for more information.
The user must also ensure that two, other, required
libraries are available to the Arduino IDE. This DS3231 library takes
care to
#include
the following in a program, but it does not install them in your Arduino IDE:
Note: At the time of writing, both of these libraries were included by default with a standard installation of the 1.8.x version of Arduino IDE for AVR-based devices.
A simple way to check for the availability of the two libraries is to compile the following, blank Arduino sketch. If the IDE does not complain that anything is missing, then the required libraries are available for use with this DS3231 library.
#include <Wire.h> #include <time.h> void setup() {} void loop() {}
Future development of this document may include specific pages for the functions listed here. Presently, additional information about the functions is available in the Examples of Use described below, and in the source files in this repository:
* The RTClib::now() function is not accessed through the DS3231 object. Rather, it has a very specific syntax as described below in
The Special RTClib::now()
Function .
The above list covers for interacting with the DS3231 hardware. Those listed below provide read-only access to information contained inside a DateTime object variable declared in program code.
RTClib::now()
is the precise, complete name for a special function that returns a
DateTime
object from the DS3231. Always write it just so:
RTClib::now()
.
The function returns a DateTime object. To use it in your program, declare a DateTime type of variable to receive the value. For example,
DateTime currentMoment = RTClib::now();
The value of
currentMoment
can then be accessed as either:
back to the list of functions
back to top
There are many examples provided in the examples folder of this repository. At the time of writing the examples include:
Future development plans include updating these examples and adding more of them.
See also Working with the DS3231 libraries and interrupts , a tutorial provided by IowaDave .
If you want to contribute to this project:
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
This is a splice of Ayars' and Jeelabs/Ladyada's libraries.
The authors of this library are A. Wickert awickert@umn.edu , E. Ayars, J. C. Wippler, N. W. LLC info@northernwidget.com and it is maintained by A. Wickert. This library is released into the public domain by Jeelabs, Ladyada, and E. Ayars.
Based on previous work by:
DS3231 is licensed under The Unlicense .
A project is underway to update the library's documentation.