Install RTC on Raspberry Pi: Simple Setup Tutorial

Key Takeaway

  • Installing an RTC helps your Raspberry Pi maintain accurate time offline.
  • Common RTC modules include DS1307 and DS3231.
  • Simple commands can help you set up and manage the RTC.

To install an RTC on a Raspberry Pi, users need some basic knowledge and tools. This guide will walk them through setting up an RTC module, such as the DS3231 or DS1307. By following these steps, the Raspberry Pi will be able to keep accurate time, even without an internet connection. Many users face challenges with timekeeping, especially when the device is powered off. Fortunately, installing an RTC module can solve these issues. Want to learn how to set it up? Keep reading for a simple, step-by-step process. (1)

Prerequisites

Credits: Broken Signal

Before starting the installation, users should ensure they have the right hardware and software. This preparation helps things run smoothly and avoids potential issues later on.

  • Hardware: First, a compatible RTC module is needed. Popular options include the DS1307 and DS3231, which are designed to keep time accurately. These modules can be found at many electronics stores or online. When selecting a module, users should confirm it’s compatible with their specific Raspberry Pi model. Choosing the right RTC module is essential for proper functionality.
  • Software: Next, users should check that their Raspberry Pi is running an appropriate operating system. Raspberry Pi OS is a solid choice, but Ubuntu works well too. Both systems support the necessary tools and libraries for setting up the RTC. Before proceeding, it’s a good idea to verify the current OS version to determine if any updates are needed. Instructions for checking the OS version can be found on the Raspberry Pi website or in the Ubuntu documentation.

Having the correct hardware and software ready will provide a solid foundation for successfully installing the RTC. This preparation can help prevent headaches during the installation process, making everything smoother and easier.

Update Your Raspberry Pi

The first step in preparing for an RTC installation is to update the Raspberry Pi. Keeping the system up to date is essential for smooth operation, ensuring that users have the latest features and security patches.

To update, users can open a terminal window on their Raspberry Pi. This can be done by clicking on the terminal icon or using a keyboard shortcut. Once the terminal is open, they should type in the following commands:

sudo apt update

sudo apt upgrade

The first command, sudo apt update, refreshes the list of available software and updates, letting the system check for newer versions of the installed software. The second command, sudo apt upgrade, installs those updates.

Running these commands doesn’t take long, but it’s a crucial step. By keeping the Raspberry Pi updated, users reduce the chances of encountering issues during the RTC installation. Additionally, having the latest packages can enhance performance and stability.

Once the update and upgrade are complete, users should check if a reboot is necessary. Sometimes a reboot is required for the changes to take effect. If prompted, they can reboot the Raspberry Pi by entering:

sudo reboot

By following these steps, the Raspberry Pi will be well-prepared for the RTC installation, making the process much smoother.

Enable I2C Interface

RTC modules rely on the I2C protocol for communication, which means users need to enable I2C on the Raspberry Pi to interact with the RTC. Here’s a simple way to get that done.

First, users should open the configuration tool on their Raspberry Pi by typing the following command in the terminal:

sudo raspi-config

After entering this command, a menu will pop up. Users should look for the option labeled Interfacing Options and select it to access more settings. Inside, they will find the option for I2C. Choosing this option will enable the I2C interface.

Once I2C is enabled, the Raspberry Pi will be able to send and receive data from the RTC module. This step is crucial because, without enabling I2C, the Raspberry Pi won’t be able to communicate with the RTC.

After enabling I2C, a reboot is necessary for the changes to take effect. Users can do this by typing:

sudo reboot

Rebooting allows all settings to refresh and ensures that the I2C interface is active. Once the Raspberry Pi has rebooted, it will be all set to work with the RTC module.

Install Required Packages

Now that I2C is enabled, the next step is to install the necessary tools to help the Raspberry Pi interact with I2C devices like the RTC module.

To install these tools, users should open a terminal window and type the following command:

sudo apt install -y i2c-tools python-smbus

This command installs both i2c-tools and python-smbus. The i2c-tools package provides useful commands for working with I2C devices, allowing users to detect devices on the I2C bus and interact with them.

The python-smbus package is essential for using Python scripts to communicate with the RTC module. Since many Raspberry Pi projects are built using Python, having this package installed is highly beneficial.

Once the command is run, the installation process will take a moment. After it’s complete, the Raspberry Pi will be equipped with the necessary tools to check and manage the RTC module.

With these packages installed, users can easily read the time from the RTC, set the time, and perform various tasks. This setup is crucial for ensuring that the Raspberry Pi can effectively communicate with the RTC module.

Connect the RTC Module

Now, it’s time to connect the RTC module to the GPIO pins on the Raspberry Pi. This step is essential for allowing communication between the Raspberry Pi and the RTC. The connections are straightforward, but it’s vital to ensure that each wire is attached to the correct pin. (2)

For both the DS1307 and DS3231 RTC modules, the connections are identical. Here’s a quick reference for making those connections:

RTC ModuleVCC (3.3V)GNDSDA (Data)SCL (Clock)
DS1307Pin 1Pin 6Pin 3Pin 5
DS3231Pin 1Pin 6Pin 3Pin 5

To start, users should connect the VCC pin on the RTC module to Pin 1 on the Raspberry Pi. This pin provides the necessary 3.3V power to the RTC. Next, connect the GND pin on the RTC module to Pin 6 on the Raspberry Pi, which supplies the ground reference for the module.

The next step is connecting the SDA (Data) pin on the RTC module to Pin 3 on the Raspberry Pi. This connection allows data to flow between the RTC and the Raspberry Pi. Finally, connect the SCL (Clock) pin on the RTC module to Pin 5 on the Raspberry Pi. This connection carries the clock signal that helps synchronize data transfers.

It’s important to double-check each connection to ensure they are correct. A loose or incorrect connection can lead to issues when reading the time from the RTC. Using jumper wires can make these connections easier. Additionally, keeping the Raspberry Pi powered off while making these connections is a good practice to avoid any potential damage.

Verify Connection

After connecting the RTC module, the next step is to verify that it is detected by the Raspberry Pi. This crucial step ensures that everything is working properly. To check the connection, users should open a terminal window and enter the following command:

sudo i2cdetect -y 1

This command scans the I2C bus for connected devices. The output will display a grid of addresses. Users should look for an address like 0x68, which is common for both the DS1307 and DS3231 RTC modules. If 0x68 appears in the output, it means the RTC module is connected correctly.

If the address does not show up, there may be an issue with the connections. Users should check each wire to make sure it is securely connected to the correct pin. Restarting the Raspberry Pi and running the command again might also help.

Verifying the connection is a simple yet essential step. Once the RTC module is detected, the Raspberry Pi will be able to read and write time data. This setup allows users’ projects to keep accurate time, even when the Raspberry Pi is powered off or not connected to the internet.

Load the RTC Kernel Module

The next step is to load the appropriate kernel module for the RTC chip. This action is necessary for the Raspberry Pi to recognize and communicate with the RTC module during operation.

For the DS1307 RTC module, users can load the kernel module by entering this command:

sudo modprobe rtc-ds1307

If they are using the DS3231 module, the command is slightly different:

sudo modprobe rtc-ds3231

Running these commands prepares the Raspberry Pi for communication with the RTC module. Once the kernel module is loaded, the Raspberry Pi can read the time and date from the RTC. This capability is essential for projects that require accurate timekeeping, especially when the Raspberry Pi isn’t connected to the internet.

Loading the kernel module is a straightforward process, but it’s an important step to ensure everything works properly. If the module isn’t loaded, the Raspberry Pi won’t be able to access the RTC data. After entering the command, there won’t be any output if it runs successfully. However, if there’s an error, the terminal will display a message to indicate what went wrong.

Once the kernel module is loaded, users can continue with the next configuration steps, ensuring that the RTC module is fully integrated into the system.

Configure for Boot

To ensure that the RTC is recognized every time the Raspberry Pi boots up, it’s important to add it to the configuration files. This way, the Raspberry Pi will automatically load the correct settings for the RTC during startup.

Start by opening the /boot/config.txt file, which contains essential settings for the Raspberry Pi’s boot process. Users can do this by typing the following command in the terminal:

sudo nano /boot/config.txt

Once the file is open, users should scroll to the bottom and add a new line. The specific line to add depends on which RTC chip is being used.

For the DS1307, the line to add is:

dtoverlay=i2c-rtc,ds1307

For the DS3231, users should add:

dtoverlay=i2c-rtc,ds3231

Adding this line instructs the Raspberry Pi to utilize the specified RTC module during the boot process.

After adding the correct line, users need to save the changes by pressing CTRL + X. Then, they should press Y to confirm the changes and hit ENTER to exit the editor. This saves the updated configuration file.

Making these changes ensures that the RTC module is properly recognized each time the Raspberry Pi starts up. Without this configuration, the RTC could fail to function correctly after a reboot. This simple step lays the groundwork for reliable timekeeping in users’ projects.

Remove Fake Hardware Clock

To ensure that the RTC module works properly, it’s necessary to remove the fake hardware clock service. This service can create conflicts with the RTC and lead to incorrect timekeeping. To remove it, users should open a terminal and enter the following commands:

sudo apt -y remove fake-hwclock

sudo update-rc.d -f fake-hwclock remove

The first command removes the fake hardware clock package from the Raspberry Pi. This package isn’t needed because the RTC module will take over the timekeeping duties. By getting rid of it, users can prevent any confusion that arises from having two different time sources.

The second command disables the fake hardware clock service from starting during boot. This step ensures that the Raspberry Pi won’t attempt to use the fake hardware clock, which could disrupt the RTC’s operation.

After running these commands, the Raspberry Pi will rely solely on the RTC for accurate timekeeping. This is particularly important for projects that require precise timing, such as data logging or time-sensitive applications. By removing the fake hardware clock, users can expect a smoother experience with their RTC module.

Final Setup

Now that the fake hardware clock has been removed, the next step is configuring the system so the RTC module loads correctly at boot. This involves editing two important files: /etc/modules and /etc/rc.local.

First, users should edit the /etc/modules file, which tells the Raspberry Pi which modules to load during startup. To open this file, they can type:

sudo nano /etc/modules

Once the file is open, users should scroll to the end and add the appropriate line for their RTC module. For the DS1307, the line to add is:

rtc-ds1307   # For DS1307

If using the DS3231, they should add this line instead:

rtc-ds3231   # For DS3231

After adding the line, users can save the changes by pressing CTRL + X, then Y, and hitting ENTER to exit.

Next, it’s time to edit the /etc/rc.local file, which runs commands during the boot process. To open this file, users should type:

sudo nano /etc/rc.local

They need to add the following lines just before exit 0:

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device   # For DS1307 

echo ds3231 0x68 > /sys/class/i2c-adapter/i2c-1/new_device   # For DS3231 

sudo hwclock -s   # Synchronize hardware clock with system time.

date              # Display current date and time.

These commands set up the RTC during each boot, allowing the Raspberry Pi to recognize the module. The hwclock -s command synchronizes the hardware clock with the system time, while the date command displays the current date and time, helping users verify that everything is working correctly.

By completing these final setup steps, users can ensure that their RTC module will be recognized and function properly every time the Raspberry Pi starts. This setup is crucial for maintaining accurate timekeeping in various projects.

Reboot and Test

The final step is to reboot the Raspberry Pi one more time. This ensures that all changes made to the configuration files take effect. To do this, users can type the following command in the terminal:

sudo reboot

After the Raspberry Pi restarts, it’s time to check if everything is working as expected. The first step is to read from the hardware clock using this command:

sudo hwclock -r   # Read time from the hardware clock.

This command instructs the Raspberry Pi to read the time stored in the RTC module. If everything is set up correctly, the output should display the current time and date as maintained by the RTC. This time should match what users set earlier.

If the output doesn’t appear as expected, it may indicate an issue with the connections or configuration. It’s important to double-check that all previous steps were followed correctly.

Next, if the system time isn’t synchronized with the hardware clock, users can write the current system time to the hardware clock with this command:

sudo hwclock -w   # Write system time to the hardware clock.

Running this command updates the RTC with the current time from the system. This is especially important if the Raspberry Pi has been running without an internet connection.

With these steps completed, the installation process for the RTC module is finished. Now the Raspberry Pi can maintain accurate time, even when it isn’t connected to the internet. This feature is particularly useful for projects requiring precise timekeeping, such as data logging, scheduling tasks, or running time-sensitive applications.

FAQs

How do I start setting up i2c and install i2c tools on my Raspberry Pi OS?

To get started, you’ll need to enable the i2c interface and install i2c tools. First, make sure you have an internet connection via ethernet or wifi. Then run sudo apt to auto renew packs, followed by the command to install i2c tools. The i2c protocol allows your pi to communicate with the rtc module through gpio pins.

What’s the easiest way to connect an rtc module to Raspberry Pi?

The rtc modules are low cost hardware clock add-ons that keep track of time using a coin battery. Connect your rtc board (like ds3231 rtc or ds1307 real time clock) to the i2c bus on your pi’s gpio pins. Use sudo i2cdetect to verify the i2c dev is properly connected.

How do I load the proper kernel module for my rtc device?

After connecting your clock chip, you’ll need to load the right rtc dev drivers. Use sudo modprobe i2c and sudo modprobe rtc to enable the needed kernel module. This lets your system recognize the hardware clock when your pi boots.

What steps do I take to set the correct time on my RTC?

First check your time zone and system time are correct. Use sudo hwclock to read the time from the hardware. To set the time from the rtc, use sudo hwclock followed by the proper commands. Choose your hour format (12/24) when setting up the real time clock.

Why does my Raspberry Pi RTC lose time after a sudo reboot?

If your pi rtc isn’t keeping the current date and time after reboot, first check if a fake hwclock is interfering with the system clock. Also verify your coin battery has enough power and the rtc chip is properly connected to the i2c interface.

How do I make sure my RTC settings persist after a system restart?

To ensure your rtc time settings stick, you’ll need to save the file containing your configuration. Use sudo nano to edit the necessary config files, then sudo echo to add the right commands. After you save the file, your rtc settings should remain after a sudo reboot.

What’s the difference between the DS3231 and DS1307 RTC modules?

Both rtc boards are popular choices as a real time clock for Raspberry Pi. The ds3231 rtc tends to be more accurate than the ds1307 real time clock, though both are reliable low cost options. Either can serve as your hardware clock to keep time when your pi boots without internet.

How can I check if my RTC is working properly on Raspbian Wheezy?

After setting up your rtc dev on a microsd card with Raspbian Wheezy, use i2c tools to verify the i2c bus connection. You can read the time from the hardware clock using sudo hwclock to confirm it matches your system time.

Conclusion

Setting up a Real Time Clock (RTC) on a Raspberry Pi allows for accurate timekeeping in projects that require it. By following these straightforward steps, users can easily install and manage RTC modules like the DS1307 and DS3231. With the RTC in place, the Raspberry Pi can maintain the correct time even without an internet connection, providing reliable timekeeping for various applications. Enjoy more dependable timing in your projects.

References

  1. https://pimylifeup.com/raspberry-pi-rtc/
  2. https://raspberrypi-guide.github.io/electronics/add-real-time-clock 
Share your love
Avatar photo
Nathan Griffin

I’m Nathan Griffin, the founder and owner of Crocodile RTC. My passion for electronics and precision engineering has driven me to build a business that specializes in one of the most critical yet often overlooked components—Real-Time Clock (RTC) modules. With years of experience in the field, I’ve developed a deep understanding of the intricacies behind accurate timekeeping, and I’m committed to delivering products that meet the highest standards of reliability.

Articles: 164