树莓派应用——RTC(DS3231)

这里写目录标题

  • 树莓派应用——RTC(DS3231)
  • 前言
  • 一、使能IIC接口
  • 二、硬件连接
  • 三、方法1:通过命令配置
  • 1、 修改配置文件
  • 2、 设置RTC时间
  • 3、 读取RTC时钟和系统时钟
  • 4、 更新RTC时间到系统
  • 5、设置开机自启动
  • 四、方法2:通过编程实现
  • 1、编写代码
  • 2、运行脚本
  • 3、设置脚本自启动
  • 五、结束语

前言

树莓派只有连接了网络才能同步正确的时间,但不是所有场景都会有网络,在没有网络的情况下,如果要获取正确的时间我们需要用到RTC芯片,因为树莓派本身是没有RTC功能的,所以我们需要外接一个,RTC的芯片很多,我们今天要介绍的是DS3231芯片,一款比较常用的芯片,废话不多说,马上开整。

一、使能IIC接口

方法1:通过配置命令

sudo raspi-config    // 打开配置
sudo reboot          // 重启,如果之前没有使能,配置完之后要重启才能生效

codesys 树莓派3_python

codesys 树莓派3_树莓派_02

codesys 树莓派3_python_03

方法2:在可视化界面的设置里面修改

codesys 树莓派3_linux_04

codesys 树莓派3_linux_05

如果之前没有使能,配置完之后要重启才能生效

二、硬件连接

ds3231是i2c通讯的,需要接到树莓派的i2c接口,我用的是树莓派3B+,接入的i2c1。

codesys 树莓派3_linux_06

可以通过下面这个命令查看自己的树莓派引脚号

gpio readall

codesys 树莓派3_linux_07

也可以参考下面这个引脚图。

codesys 树莓派3_linux_08

再引用了一张3B的引脚图,两张图对比来看,引脚的对应关系就非常清晰了。

codesys 树莓派3_linux_09

三、方法1:通过命令配置

1、 修改配置文件

打开配置文件

sudo nano /boot/config.txt

在文件最后添加下面这句,保存退出(这句意思是添加rtc设备ds3231)

dtoverlay=i2c-rtc,ds3231

codesys 树莓派3_树莓派_10

该设置需要重启树莓派才能生效,重启之后可以输入lsmod命令查看设备,会看到rtc-1307这个设备

codesys 树莓派3_python_11

2、 设置RTC时间

sudo hwclock --set --date="2021/08/21 22:02:00"

3、 读取RTC时钟和系统时钟

sudo hwclock -r;date

codesys 树莓派3_树莓派_12

可以看到,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

codesys 树莓派3_树莓派_13

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、运行脚本

codesys 树莓派3_重启_14

注意:如果按上面的方法1修改过配置文件和启动文件,需要改回来,注释掉或者删掉都可以,然后重启即可

sudo nano /boot/config.txt

codesys 树莓派3_linux_15

sudo nano /etc/rc.local

codesys 树莓派3_python_16

3、设置脚本自启动

脚本自启动的方法参考我的博文:树莓派从零开始快速入门第13讲——脚本开机自启动

五、结束语

好了,关于这一讲的内容就这么多了,如果对你有帮助,可以给个收藏,关注我,了解更多树莓派的知识,后续我会继续更新更多的教程。 树莓派入门系列教程:树莓派从零开始快速入门系列汇总 教程相关的软件和源码:https://pan.baidu.com/s/1-lVAZyH2s-VTn5qeSnEPhA ,提取码:qwer