树莓派只有连接了网络才能同步正确的时间,但不是所有场景都会有网络,在没有网络的情况下,如果要获取正确的时间我们需要用到RTC芯片,因为树莓派本身是没有RTC功能的,所以我们需要外接一个,RTC的芯片很多,我们今天要介绍的是DS3231芯片,一款比较常用的芯片,废话不多说,马上开整。
一、使能IIC接口
方法1:通过配置命令
sudo raspi-config // 打开配置
sudo reboot // 重启,如果之前没有使能,配置完之后要重启才能生效
方法2:在可视化界面的设置里面修改
如果之前没有使能,配置完之后要重启才能生效
二、硬件连接
ds3231是i2c通讯的,需要接到树莓派的i2c接口,我用的是树莓派3B+,接入的i2c1。
可以通过下面这个命令查看自己的树莓派引脚号
gpio readall
也可以参考下面这个引脚图。
再引用了一张3B的引脚图,两张图对比来看,引脚的对应关系就非常清晰了。
三、方法1:通过命令配置
1、 修改配置文件
打开配置文件
sudo nano /boot/config.txt
在文件最后添加下面这句,保存退出(这句意思是添加rtc设备ds3231)
dtoverlay=i2c-rtc,ds3231
该设置需要重启树莓派才能生效,重启之后可以输入lsmod命令查看设备,会看到rtc-1307这个设备
2、 设置RTC时间
sudo hwclock --set --date="2021/08/21 22:02:00"
3、 读取RTC时钟和系统时钟
sudo hwclock -r;date
可以看到,RTC的时间已经设置成功了,但是系统的时间和RTC的时间并不统一,我们还需要把RTC的时间更新到系统
4、 更新RTC时间到系统
sudo hwclock -s
更新了时间之后,再查询一下时间,如果系统时间和RTC时间一致即可
5、设置开机自启动
打开启动文件:
sudo nano /etc/rc.local
输入下面这两句
注意:这两句要写在exit0前面,ds1307 0x68是设备的名称和i2c地址,i2c-1是RTC模块接入的端口号,根据自己实际的情况修改
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s
RTC装上电池,断电之后过一会重新上电,确认一下时间是否正确(最好断开网络测试,避免自动同步网络时间)。
四、方法2:通过编程实现
1、编写代码
示例代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import smbus
import time
address = 0x68
register = 0x00
#sec min hour week day mout year
NowTime = [0x00,0x00,0x18,0x04,0x12,0x08,0x15]
w = ["SUN","Mon","Tues","Wed","Thur","Fri","Sat"]
#/dev/i2c-1
bus = smbus.SMBus(1)
def ds3231SetTime():
bus.write_i2c_block_data(address,register,NowTime)
def ds3231ReadTime():
return bus.read_i2c_block_data(address,register,7)
ds3231SetTime()
while 1:
t = ds3231ReadTime()
t[0] = t[0]&0x7F #sec
t[1] = t[1]&0x7F #min
t[2] = t[2]&0x3F #hour
t[3] = t[3]&0x07 #week
t[4] = t[4]&0x3F #day
t[5] = t[5]&0x1F #mouth
print("20%x/%02x/%02x %02x:%02x:%02x %s" %(t[6],t[5],t[4],t[2],t[1],t[0],w[t[3]-1]))
time.sleep(1)
2、运行脚本
注意:如果按上面的方法1修改过配置文件和启动文件,需要改回来,注释掉或者删掉都可以,然后重启即可
sudo nano /boot/config.txt
sudo nano /etc/rc.local
3、设置脚本自启动
脚本自启动的方法参考我的博文:树莓派从零开始快速入门第13讲——脚本开机自启动
五、结束语
好了,关于这一讲的内容就这么多了,如果对你有帮助,可以给个收藏,关注我,了解更多树莓派的知识,后续我会继续更新更多的教程。
树莓派入门系列教程:树莓派从零开始快速入门系列汇总
教程相关的软件和源码:https://pan.baidu.com/s/1-lVAZyH2s-VTn5qeSnEPhA ,提取码:qwer