下面介绍基于DS3231的RTC时钟模块的使用,这个模块自带纽扣电池,可以在树莓派掉电后系统时间能继续保持。
一、启用树莓派的I2C功能
sudo apt-get install -y python-smbus sudo apt-get install -y i2c-tools sudo raspi-config
按照下面的步骤设置开启 I2C 功能。
重启树莓派。
sudo reboot
添加 I2C 模块
sudo nano /etc/modules
添加以下两行内容:
i2c-bcm2708 i2c-dev
将DS3231的RTC时钟模块通过GPIO连接到树莓派。
二、安装 I2C 工具
sudo apt-get update
sudo apt-get install i2c-tools python-smbus
sudo reboot
重启后通过刚才安装的i2c-tools对 I2C 设备进行探测,输入以下命令,得到如下结果,说明检测到一个地址为0x68的I2C设备就是板上的DS3231。
sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
三、测试时钟模块
下面我们通过i2c-tools来测试下DS3231的功能,并将DS3231这个掉电不丢失的时钟用于树莓派系统的时钟。
下面的测试必须在root权限下测试。
=== 如何启用 root 账户的分割线 开始===
debian里root账户默认没有密码,但账户锁定。
当需要root权限时,由默认账户经由sudo执行,Raspberry pi 系统中的Raspbian
默认用户是pi 密码为raspberry
重新开启root账号,可由pi用户登录后,在命令行下执行
sudo passwd root
执行此命令后系统会提示输入两遍的root密码,输入你想设的密码即可,然后执行
sudo passwd --unlock root
这样就可以解锁root账户了。
现在就有两个账户 pi@raspberrypi 和 root@raspberrypi 两个账户可以来回切换:
在pi@raspberrypi 输入 su 然后输入刚才设置的密码进入 root 账户
在root@raspberrypi 输入su pi 进入 pi 账户
=== 如何启用 root 账户的分割线 结束===
su Password: modprobe i2c-dev echo ds3231 0x68 > sudo tee /sys/class/i2c-adapter/i2c-1/new_device hwclock -r Sat Jan 1 00:00:12 2000 -0.120717 seconds
将系统时钟设定为当前时间,然后将系统时钟写入到DS3231硬件时钟里面
date 062120352014.00 备注:6月21日 20点35分 2014年 Sat Jun 21 20:35:00 UTC 2014 hwclock -w date Sat Jun 21 20:35:21 UTC 2014
四、设置开机自动读取时间
编辑启动文件
sudo nano /etc/rc.local
将以下内容加入“exit 0”行之前
sudo modprobe i2c-dev echo ds3231 0x68 > sudo tee /sys/class/i2c-adapter/i2c-1/new_device hwclock -r hwclock -s
ctrl+x退出
过几分钟拔掉网线,重启树莓派,输入“date”看看时间是否正确。
安装DS3231SN I2C模块的时候,新增的两行内容可以侦测到I2C设备但是hwclock -r无法访问。
换成:
i2c-bcm2835
i2c-dev
rtc-ds1307
之后正常,系统是2019-07-10-raspbian-buster-lite。
系统是2019-07-10-raspbian-buster-lite
时钟芯片是ds3231
换成:
i2c-bcm2835
i2c-dev
rtc-ds1307
并且echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
这里时“ds1307”,不是ds3231
https://raspberrypi.stackexchange.com/questions/55676/raspberry-pi-3-ds3231-rtc
亲测有效