常用的计时时钟芯片有 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中的时间按指定格式转换成字符串