树莓派 DS1302/DS1307/DS3231 RTC 时钟模块的使用

常用的计时时钟芯片有 DS1302、DS1307、DS3231,各型号还有衍生型号。都是 Dallas 生产的芯片。其中 DS1302 和 DS1307 可以看成是同一芯片的不同协议版本(SPI 和 I2C)。他们在树莓派上的用法几乎一致,下面将简单介绍。对于不同的芯片(或模块),只需要将命令中的芯片型号自行替换即可。

首先运行 sudo raspi-config 命令将 I2C 功能打开。

然后运行 sudo nano /etc/modules 命令,编辑配置文件将以下两行内容添加到末尾。

i2c-bcm2708
i2c-dev

其作用是添加 i2c 内核模块。

运行 sudo nano /etc/modprobe.d/raspi-blacklist.conf 命令。加入以下两行:

# blacklist spi and i2c by default (many users don't need them)
blacklist spi-bcm2708
blacklist i2c-bcm2708

为了测试我们还需要安装 i2c-tools 工具与 python-smbus,使用下面的命令:

sudo apt-get update
sudo apt-get install i2c-tools python-smbus
sudo reboot

重启后通过刚才安装的 i2c-tools 对 i2c 设备进行探测,输入以下命令,得到如下结果,说明检测到一个地址为 0x68 的 I2C 设备就是板上的 DS1302。

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: -- -- -- -- -- -- -- --

测试一下功能:

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
hwclock -r
hwclock -w

命令会先读取时钟芯片中的时间并显示出来,然后将当前系统时间写入到时钟芯片中。一切正常之后,接着加入开机启动。

编辑启动文件,使用一下命令:

sudo nano /etc/rc.local

将以下内容加入「exit 0」行之前:

sudo modprobe i2c-dev
sudo modprobe i2c-bcm2708
echo ds1302 0x68 | sudo tee  /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -r
sudo hwclock -s

注意,根据使用的芯片,其中的 ds3231 可以替换成 ds1302 或 ds1307。

到这儿,RTC 时钟模块就配置完成了。以后要用到实时时间就可以简单的使用 date 这个命令来获取。在 Python 编程中可以使用以下代码读取实时时间。

import datetime #导入系统时钟
now = datetime.datetime.now() #读取当前时间并保存到now变量
timeString = now.strftime("%Y-%m-%d%H:%M") #把now中的时间按指定格式转换成字符串


坐沙发

发表评论

你的邮件地址不会公开


*