博主在寝室是使用树莓派来开热点的,但是晚上断电后仍然可以用充电宝进行供电上网,这种丧(xi)心(da)病(pu)狂(ben)的优势让博主失去了心爱的睡眠时间。因此机智的博主想了一个办法,写了一个早睡脚本,只要检测到时间大于11点20就强制关机,并且把脚本设置为开机自启。但是第二天博主就发现树莓派因为没有CMOS时钟,因此之后多长时间,时间都是大于11点20!也就是说我再也打不开树莓派了!
为了应对这种蛋疼的问题,博主只好花了十几块钱从某宝买了个DS3231模块......
DS3231模块是一款适用于多种单片机的RTC模块,通过DS3231,你可以为没有内置时钟模块的单片机提供精准授时。
在树莓派model 3B上,我们可以利用该模块为树莓派授时,使树莓派无需连接网络就能够保证时钟的同步。
- 开启I2C
在树莓派命令行下,输入
$ sudo raspi-config
进入树莓派配置界面,
选择5 Interfacing Options进入
选择I2C
确认即可。完成后保存退出树莓派配置页面。
- 软件配置
对源进行更新:
$ 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.硬件连线
现在能用到的接口是SCL、SDA、VCC、和GND,
按照上图,注意我们使用“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)
编辑启动文件:
$ sudo vim /etc/rc.local
按i键编辑,在exit 0前面添加:
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
hwclock -s
最后文件类似于:
按下esc键,输入英文冒号,再输入wq,回车即可保存。
配置完成后重启设备:
$ sudo reboot
重启后输入之前的命令:
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
来查看是否写入成功。
总而言之,之后操作的命令主要也就三个了:
- 将系统时间写入RTC:
$ sudo hwclock -w
- 从RTC读取时间,但也仅仅是“读取”,并非写入系统时间:
$ sudo hwclock -r
- 将系统时间设置为RTC模块的时间:
$ sudo hwclock -s