树莓派 3B+ 安装 DS1307 RTC 时钟模块

本文的翻译动机是小弟在购买了 DS1307 后,查阅相关教学时发现,针对 DS1307 的中文教学时间有点久远,已经不适用于新版本的 Raspbian,故而在这找到合适的教学后打算翻译为中文,以便后面的朋友方便查阅。

  • 本文的首要假定条件是已经正确安装与连接 DS1307 和 树莓派 3B+。
  • 本文为翻译自 Adafruit.com 的教程,原文见 [via]。
  • 本文适用于 Raspbian Jessie 及往后的系统版本,最新支持到 Stretch,旧版本的操作方法见原文连接。
  • 本文的翻译动机是小弟在购买了 DS1307 后,查阅相关教学时发现,针对 DS1307 的中文教学时间有点久远,已经不适用于新版本的 Raspbian,故而在这找到合适的教学后打算翻译为中文,以便后面的朋友方便查阅。
  • 本文并未得到原文的相关著作所有者授权翻译,故而著作所有者如有要求,请电邮联系我删除本文。
  • This Guide DOES NOT Gain the translation authorize from the copyright owner. If You, THE OWNER WHO OWN THE COPYRIGHT WANNA DELETE THIS POST, PLEASE CONTACT ME VIA EMAIL IN THE HOMEPAGE.

1. 开启 I2C

1
$ sudo raspi-config //树莓派配置工具

找到 Advance - I2C - Enable,然后重启树莓派

1
$ sudo reboot

2. 验证与设备的链接

安装 python-smbus 和 i2c-tools

1
$ sudo apt-get install python-smbus i2c-tools

输入

1
$ sudo i2cdetect -y 1

,然后你会看到 ID为 #68 的地址显示出来。
如果你的是第一代的树莓派,则输入

1
sudo i2cdetect -y 0

3. 往设备树添加 DS1307 的支持

1
$ sudo nano /boot/config.txt //树莓派的启动配置文件

最后一行增加

1
dtoverlay=i2c-rtc,ds1307

重启系统

1
$ sudo reboot

重启后登陆,输入命令

1
sudo i2cdetect -y 1

,假如该地址不是显示 0x68 而是显示 UU 的话,则你需要关闭掉 fake hwclock

1
2
sudo apt-get -y remove fake-hwclock
sudo update-rc.d -f fake-hwclock remove

关闭之后,修改 /lib/udev/hwclock-set

1
sudo nano /lib/udev/hwclock-set

找到以下三行

1
2
3
if [ -e /run/systemd/system ] ; then
exit 0
fi

并注释成

1
2
3
#if [ -e /run/systemd/system ] ; then
#exit 0
#fi

4. 从树莓派同步时间到DS1307

DS1307 默认时间是错误的,你需要把树莓派的时间写入到 DS1307 中,它才能显示正确的时间。(你需要先保证你的树莓派的时间是正确的)

1
2
3
$ date  //显示当前树莓派的时间
$ sudo hwclock -w //把树莓派的时间写入到 DS1307
$ sudo hwclock -r //读取DS1307的时间

修改 /etc/rc.local

1
$ sudo nano /etc/rc.local

在 exit 0 前加入

1
hwclock -s

保存重启。
请确保你的 DS1307 有上电池,不然断电后也是没卵子用的。
搞定,收工,下次启动的时候就会从你的 DS1307 读取时间了。

-------------EOF-------------
如果我写的内容帮助到你,方便的话便支持一下