加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 一、使能IIC接口
    • 三、方法1:通过命令配置
    • 四、方法2:通过编程实现
    • 五、结束语
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

树莓派应用——RTC(DS3231)

11/23 11:25
1万
阅读需 7 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

树莓派只有连接了网络才能同步正确的时间,但不是所有场景都会有网络,在没有网络的情况下,如果要获取正确的时间我们需要用到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

相关推荐

电子产业图谱