分類: 樹莓派物聯網

樹莓派 Raspberry Pi 安裝 DS3231 RTC 實時時鐘教學

本篇介紹如何在樹莓派上面安裝 DS3231 RTC 實時時鐘,以及其設定與使用的方式。

DS3231 是一個 I2C 介面的實時時鐘(real-time clock,RTC),上面附帶有一顆電池,在沒有電源供應的情況下也可以紀錄精準的時間。


這個就是 DS3231 RTC 實時時鐘,可以直接插在樹莓派的 GPIO 針腳上。

DS3231 實時時鐘(RTC)

DS3231 在常溫下(攝氏 0 至 40 度)的準確度可以達到 ±2ppm,也就是一天的時間誤差可在 86400 * 2 / 1e6 = 0.1728 秒之內。

樹莓派安裝 DS3231 RTC

DS3231 RTC 的安裝方式很簡單,直接插在樹莓派的第 1、3、5、7、9 這幾個針腳即可。

樹莓派針腳

就像這樣插上去,注意要插在內側這一排針腳上,若插錯排是不能用的。

樹莓派與 DS3231 實時時鐘(RTC)

基本上這一個 DS3231 RTC 裝在這個位置不太會擋住其他的硬體組件。

樹莓派與 DS3231 實時時鐘(RTC)

這種壓克力外殼也剛剛好可以裝的下這個 DS3231 RTC,蓋子也不會卡到。

樹莓派與 DS3231 實時時鐘(RTC)

設定 DS3231 RTC

硬體安裝好之後,接著要設定軟體,將樹莓派開機後,使用 raspi-config 設定工具,啟用 I2C 核心模組:

sudo raspi-config

raspi-config 啟用 I2C 核心模組

載入了 I2C 模組之後,使用 i2cdetect 偵測 I2C 裝置。對於 Rev 2 的板子,可使用:

sudo i2cdetect -y 1

如果是 Rev 1 的板子,則使用:

sudo i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --
若要得知樹莓派的 Revision 資訊,可以參考查詢樹莓派 Raspberry Pi 開發版的 Revision 版本資訊

0x68 這個位置上有發現一個裝置,這個被偵測到的 I2C 裝置就是剛插上去的 DS3231 RTC,在使用之前要先新增這個 RTC,Rev 2 的板子則執行:

sudo echo ds3231 0x68 > /sys/class/i2c-adapter/i2c-1/new_device

若是 Rec 1 的板子則執行:

sudo echo ds3231 0x68 > /sys/class/i2c-adapter/i2c-0/new_device

這時候若再執行一次 i2cdetect,則輸出會變成這樣:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

原本的 0x68 的位置變成了 UU,這就代表這個裝置已經被某個驅動程式使用了。接著就可以使用這個 DS3231 RTC 實時時鐘了。

首先測試一下是否可以讀取到 RTC 的時間資訊:

sudo hwclock -r

正常來說會看到類似這樣的時間訊息:

Sat 01 Jan 2000 12:33:54 AM UTC  -0.859545 seconds

現階段只要可以讀的到時間資訊就表示 RTC 的安裝沒有問題,時間是不是正確的倒是無所謂,我們隨後會再校正時間。如果沒抓到 RTC 的話,通常就會出現這樣的錯誤訊息:

hwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --debug option to see the details of our search for an access method.

使用 DS3231 RTC

接著要設定正確的日期與時間,如果有連上網路的話,可以用 ntp 校時:

sudo service ntp start

或手動使用 ntpdate

sudo ntpdate 0.tw.pool.ntp.org

如果沒有網路,也可以用 date 手動調整時間:

date -s "2016-11-23 08:30:25"

確認 Linux 系統的時間是正確的之後,再將正確的時間寫入硬體的 RTC 中:

sudo hwclock -w

接著在讀取硬體 RTC 的時間,看看是否正確:

sudo hwclock -r

若要將 Linux 的系統時間設定為硬體 RTC 的時間,可以執行:

sudo hwclock -s
Wed 23 Nov 2016 10:37:15 AM CST  -0.717978 seconds

我們可以使用 timedatectl 查看所有的時間資訊:

timedatectl
      Local time: Wed 2016-11-23 10:35:52 CST
  Universal time: Wed 2016-11-23 02:35:52 UTC
        RTC time: Wed 2016-11-23 02:35:52
       Time zone: Asia/Taipei (CST, +0800)
     NTP enabled: no
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

確認所有的時間都正確之後,接下來就是要設定讓樹莓派在開機時,可以自動啟用 DS3231 RTC,編輯 /etc/rc.local 設定檔,在 exit 0 之前加入兩行指令,Rev 2 的板子則加入:

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

Rev 1 的版本為:

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

參考資料:Raspberry Pi Spy葉難adafruitMAKEHUB.tw

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang

Recent Posts

光陽 KYMCO GP 125 機車接電發動、更換電瓶記錄

本篇記錄我的光陽 KYMCO ...

2 年 ago

[開箱] YubiKey 5C NFC 實體金鑰

本篇是 YubiKey 5C ...

2 年 ago

[DIY] 自製竹火把

本篇記錄我拿竹子加上過期的苦茶...

3 年 ago