树莓派安装DS3231 RTC模块

博主在寝室是使用树莓派来开热点的,但是晚上断电后仍然可以用充电宝进行供电上网,这种丧(xi)心(da)病(pu)狂(ben)的优势让博主失去了心爱的睡眠时间。因此机智的博主想了一个办法,写了一个早睡脚本,只要检测到时间大于11点20就强制关机,并且把脚本设置为开机自启。但是第二天博主就发现树莓派因为没有CMOS时钟,因此之后多长时间,时间都是大于11点20!也就是说我再也打不开树莓派了!

为了应对这种蛋疼的问题,博主只好花了十几块钱从某宝买了个DS3231模块......

树莓派安装DS3231 RTC模块_第1张图片
DS3231

DS3231模块是一款适用于多种单片机的RTC模块,通过DS3231,你可以为没有内置时钟模块的单片机提供精准授时。

在树莓派model 3B上,我们可以利用该模块为树莓派授时,使树莓派无需连接网络就能够保证时钟的同步。

  1. 开启I2C

在树莓派命令行下,输入

$ sudo raspi-config

进入树莓派配置界面,

树莓派安装DS3231 RTC模块_第2张图片
raspi-config

选择5 Interfacing Options进入

树莓派安装DS3231 RTC模块_第3张图片
interfacing options

选择I2C

树莓派安装DS3231 RTC模块_第4张图片
i2c

确认即可。完成后保存退出树莓派配置页面。

  1. 软件配置

对源进行更新:

$ sudo apt-get update
$ sudo apt-get upgrade

编辑/etc/modules

$ sudo vim /etc/modules

此处采用vim编辑器,按下 i 键后进入编辑模式,加入i2c-bcm2835、i2c-dev、rtc-ds1307, 编辑后类似于:

snd-bcm2835
i2c-bcm2835
i2c-dev
rtc-ds1307

按下esc退出编辑模式,输入英文冒号+wq退出。

3.硬件连线

树莓派安装DS3231 RTC模块_第5张图片
DS3231

现在能用到的接口是SCL、SDA、VCC、和GND,

树莓派安装DS3231 RTC模块_第6张图片
gpio接口

按照上图,注意我们使用“Physical”这栏接口编号。
接线如下:
VCC接1,即3.3v,电源正极
SDA接3,即SDA.1
SCL接5,即SCL.1
GND接9,即0v,也就是电源负极

4.命令行连接
输入以下命令检测树莓派i2c总线的情况:

sudo i2cdetect -y 1

不出意外的话,会出现以下图片所示,不过其中的UU是68。(本人已配置成功,因此显示UU)

树莓派安装DS3231 RTC模块_第7张图片
sudo i2cdetect -y 1

编辑启动文件:

$ sudo vim /etc/rc.local

按i键编辑,在exit 0前面添加:

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

最后文件类似于:

树莓派安装DS3231 RTC模块_第8张图片
rc.local

按下esc键,输入英文冒号,再输入wq,回车即可保存。

配置完成后重启设备:

$ sudo reboot

重启后输入之前的命令:

sudo i2cdetect -y 1

这次会出现类似如下图片所示:

树莓派安装DS3231 RTC模块_第9张图片
sudo i2cdetect -y 1

这下68已经变成UU,说明安装成功。

5.最后的收尾
刚才我们在rc.local文件中加了一句

hwclock -s

这句话的意思是将设备时间同步为系统时间。因此如果rtc模块没有使用过的话,输入

$ date

查看时间,你会发现时间严重与现在时间不符合。

如果你现在连接到互联网的话,稍等一会,树莓派会自动与授时服务器进行同步时间。但是如果没有连接到网络的话可以输入以下命令设置时间:

$ date -s "2017-05-20 12:03:00"

其中的时间按需修改。

时间设置完毕或者互联网授时完毕后,输入

$ sudo hwclock -w

来将系统时间写入rtc模块。

你也可以输入

$ sudo hwclock -r

来查看是否写入成功。


总而言之,之后操作的命令主要也就三个了:

  1. 将系统时间写入RTC:
$ sudo hwclock -w
  1. 从RTC读取时间,但也仅仅是“读取”,并非写入系统时间:
$ sudo hwclock -r
  1. 将系统时间设置为RTC模块的时间:
$ sudo hwclock -s

你可能感兴趣的:(树莓派安装DS3231 RTC模块)