• 正文
    • 一、使能IIC接口
    • 三、方法1:通過命令配置
    • 四、方法2:通過編程實現(xiàn)
    • 五、結(jié)束語
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

樹莓派應(yīng)用——RTC(DS3231)

2024/11/23
1.1萬
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

樹莓派只有連接了網(wǎng)絡(luò)才能同步正確的時間,但不是所有場景都會有網(wǎng)絡(luò),在沒有網(wǎng)絡(luò)的情況下,如果要獲取正確的時間我們需要用到RTC芯片,因為樹莓派本身是沒有RTC功能的,所以我們需要外接一個,RTC的芯片很多,我們今天要介紹的是DS3231芯片,一款比較常用的芯片,廢話不多說,馬上開整。

一、使能IIC接口

方法1:通過配置命令

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

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
方法2:在可視化界面的設(shè)置里面修改
在這里插入圖片描述
在這里插入圖片描述
如果之前沒有使能,配置完之后要重啟才能生效

二、硬件連接

ds3231是i2c通訊的,需要接到樹莓派的i2c接口,我用的是樹莓派3B+,接入的i2c1。
在這里插入圖片描述

可以通過下面這個命令查看自己的樹莓派引腳

gpio readall

在這里插入圖片描述
也可以參考下面這個引腳圖。
請?zhí)砑訄D片描述
再引用了一張3B的引腳圖,兩張圖對比來看,引腳的對應(yīng)關(guān)系就非常清晰了。
請?zhí)砑訄D片描述

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

1、 修改配置文件

打開配置文件

sudo nano /boot/config.txt

在文件最后添加下面這句,保存退出(這句意思是添加rtc設(shè)備ds3231)

dtoverlay=i2c-rtc,ds3231

在這里插入圖片描述
該設(shè)置需要重啟樹莓派才能生效,重啟之后可以輸入lsmod命令查看設(shè)備,會看到rtc-1307這個設(shè)備
在這里插入圖片描述

2、 設(shè)置RTC時間

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

3、 讀取RTC時鐘和系統(tǒng)時鐘

sudo hwclock -r;date

在這里插入圖片描述
可以看到,RTC的時間已經(jīng)設(shè)置成功了,但是系統(tǒng)的時間和RTC的時間并不統(tǒng)一,我們還需要把RTC的時間更新到系統(tǒng)

4、 更新RTC時間到系統(tǒng)

sudo hwclock -s

更新了時間之后,再查詢一下時間,如果系統(tǒng)時間和RTC時間一致即可

5、設(shè)置開機(jī)自啟動

打開啟動文件:

sudo nano /etc/rc.local

輸入下面這兩句
注意:這兩句要寫在exit0前面,ds1307 0x68是設(shè)備的名稱和i2c地址,i2c-1是RTC模塊接入的端口號,根據(jù)自己實際的情況修改

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

在這里插入圖片描述

RTC裝上電池,斷電之后過一會重新上電,確認(rèn)一下時間是否正確(最好斷開網(wǎng)絡(luò)測試,避免自動同步網(wǎng)絡(luò)時間)。

四、方法2:通過編程實現(xiàn)

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、運(yùn)行腳本

在這里插入圖片描述
注意:如果按上面的方法1修改過配置文件和啟動文件,需要改回來,注釋掉或者刪掉都可以,然后重啟即可

sudo nano /boot/config.txt

在這里插入圖片描述

sudo nano /etc/rc.local

在這里插入圖片描述

3、設(shè)置腳本自啟動

腳本自啟動的方法參考我的博文:樹莓派從零開始快速入門第13講——腳本開機(jī)自啟動

五、結(jié)束語

好了,關(guān)于這一講的內(nèi)容就這么多了,如果對你有幫助,可以給個收藏,關(guān)注我,了解更多樹莓派的知識,后續(xù)我會繼續(xù)更新更多的教程。

樹莓派入門系列教程:樹莓派從零開始快速入門系列匯總

教程相關(guān)的軟件和源碼:https://pan.baidu.com/s/1-lVAZyH2s-VTn5qeSnEPhA ,提取碼:qwer

樹莓派

樹莓派

Raspberry Pi Ltd致力于讓全世界的用戶和企業(yè)都能暢享計算的便利。Raspberry Pi產(chǎn)品成本低、品質(zhì)高、結(jié)構(gòu)緊湊、效率高,可用于很多地方:從家用計算到工廠控制、從復(fù)古游戲到嵌入式應(yīng)用,從教育到企業(yè)。自2012年出售第一款產(chǎn)品以來,Raspberry Pi已成為英國備受歡迎的計算機(jī)公司。

Raspberry Pi Ltd致力于讓全世界的用戶和企業(yè)都能暢享計算的便利。Raspberry Pi產(chǎn)品成本低、品質(zhì)高、結(jié)構(gòu)緊湊、效率高,可用于很多地方:從家用計算到工廠控制、從復(fù)古游戲到嵌入式應(yīng)用,從教育到企業(yè)。自2012年出售第一款產(chǎn)品以來,Raspberry Pi已成為英國備受歡迎的計算機(jī)公司。收起

查看更多

相關(guān)推薦