<output id="pj4em"></output>

    加入星計(jì)劃,您可以享受以下權(quán)益:

    • 創(chuàng)作內(nèi)容快速變現(xiàn)
    • 行業(yè)影響力擴(kuò)散
    • 作品版權(quán)保護(hù)
    • 300W+ 專(zhuān)業(yè)用戶(hù)
    • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
    • 5000+ 長(zhǎng)期合作伙伴
    立即加入
    • 正文
      • 一、使能IIC接口
      • 三、方法1:通過(guò)命令配置
      • 四、方法2:通過(guò)編程實(shí)現(xiàn)
      • 五、結(jié)束語(yǔ)
    • 相關(guān)推薦
    • 電子產(chǎn)業(yè)圖譜
    申請(qǐng)入駐 產(chǎn)業(yè)圖譜

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

    11/23 11:25
    1萬(wàn)
    閱讀需 7 分鐘
    加入交流群
    掃碼加入
    獲取工程師必備禮包
    參與熱點(diǎn)資訊討論

    樹(shù)莓派只有連接了網(wǎng)絡(luò)才能同步正確的時(shí)間,但不是所有場(chǎng)景都會(huì)有網(wǎng)絡(luò),在沒(méi)有網(wǎng)絡(luò)的情況下,如果要獲取正確的時(shí)間我們需要用到RTC芯片,因?yàn)闃?shù)莓派本身是沒(méi)有RTC功能的,所以我們需要外接一個(gè),RTC的芯片很多,我們今天要介紹的是DS3231芯片,一款比較常用的芯片,廢話(huà)不多說(shuō),馬上開(kāi)整。

    一、使能IIC接口

    方法1:通過(guò)配置命令

    sudo raspi-config    // 打開(kāi)配置
    sudo reboot          // 重啟,如果之前沒(méi)有使能,配置完之后要重啟才能生效
    

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

    二、硬件連接

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

    可以通過(guò)下面這個(gè)命令查看自己的樹(shù)莓派引腳號(hào)

    gpio readall
    

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

    三、方法1:通過(guò)命令配置

    1、 修改配置文件

    打開(kāi)配置文件

    sudo nano /boot/config.txt
    

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

    dtoverlay=i2c-rtc,ds3231
    

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

    2、 設(shè)置RTC時(shí)間

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

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

    sudo hwclock -r;date
    

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

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

    sudo hwclock -s
    

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

    5、設(shè)置開(kāi)機(jī)自啟動(dòng)

    打開(kāi)啟動(dòng)文件:

    sudo nano /etc/rc.local
    

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

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

    在這里插入圖片描述

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

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

    1、編寫(xiě)代碼

    示例代碼:

    #!/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修改過(guò)配置文件和啟動(dòng)文件,需要改回來(lái),注釋掉或者刪掉都可以,然后重啟即可

    sudo nano /boot/config.txt
    

    在這里插入圖片描述

    sudo nano /etc/rc.local
    

    在這里插入圖片描述

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

    腳本自啟動(dòng)的方法參考我的博文:樹(shù)莓派從零開(kāi)始快速入門(mén)第13講——腳本開(kāi)機(jī)自啟動(dòng)

    五、結(jié)束語(yǔ)

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

    樹(shù)莓派入門(mén)系列教程:樹(shù)莓派從零開(kāi)始快速入門(mén)系列匯總

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

    相關(guān)推薦

    電子產(chǎn)業(yè)圖譜