As shipped, the Pi has no real-time clock …
* comment the line “blacklist i2c-bcm2708” from /etc/modprobe.d/raspi-blacklist.conf
* add the lines “i2c-bcm2708” and “i2c-dev” to /etc/modules
The Pi takes a bit longer to boot up with i2c enabled. Once booted, you can see the devices it has detected on the i2cbus with:
sudo i2cdetect –y 0
My RTC showed up is device 0x68. Linux already has support for the DS3231 RTC clock, so to enable it:
echo ds3231 0x68 | sudo tee /sys/class/i2c-adapter/i2c-0/new_device
i2c i2c-0: new_device: Instantiated device ds3231 at 0x68
You can then use “hwclock” to query the time. Initially it gave me some time in the year 2000. I plugged an ethernet cable into my Pi, waited for ntpd to sync, verified using the “date” command, and then set the time on the rtc using “hwclock -w” which sets the RTC based on the system clock.
You can make the Pi set the clock automatically on boot from the RTC by adding this to /etc/rc.local:
echo ds3231 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
“hwclock -s” sets the system clock from the RTC clock. To test that it works, I unplugged the ethernet and rebooted. The “date” command showed the correct date. All fine!
For my upcoming experiment I need to be able to add more i2c devices, so I decided to move the clock out to a breadboard — my first time using one.
Since the RTC was designed to plug directly into the Pi’s headers, I needed similar header pins on the breadboard to mount the RTC. I had a long strip of breakable headers, so cut off 5 pins. At first, the pins kept popping out of the breadboard — the legs were too short — until I discovered you could actually slide the black plastic up a bit to make the legs longer.
I wired the 3.3V and GND to the power bus on the breadboard, and connected the RTC to the power bus, and also wired the I2C SDA (blue) and SCL (white) lines to the breadboard. Powered up everything and — yay — the clock still works!