Ubuntu mate + RPi 3B + DS3231 RTC

在樹莓派上沒有RTC,所以每次開機時都要用網路對時的方式來對時間校正。

如果有DS3231 RTC的話,可用來對時間做存取。

先不討論硬體的部分,預想已在樹莓上接上DS3231了

1. 打開I2C設定:

在指令下輸入sudo raspi-config

請將I2C的設定Enable

2. 輸入指令確定I2C設備已接上,並新增RTC至I2C:

sudo i2cdetect -y 1

會出現以下畫面
     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: -- -- -- -- -- -- -- --
有出現68代表I2C已有接上

接著輸入新增RTC至I2C指令
sudo echo ds3231 0x68 > /sys/class/i2c-adapter/i2c-1/new_device

在ubuntu mate下會顯示權限問題無法新增,需先給與new_device可讀取的權限
sudo chmod 777 /sys/class/i2c-adapter/i2c-1/new_device

再次重新輸入新增RTC的指令就OK了

再次輸入sudo i2cdetect -y 1 確認是否新增成功
     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: -- -- -- -- -- -- -- --
原本的68會變成UU

3. 測試並使用DS3231

輸入指令讀取RTC的時間
sudo hwclock -r






如果找不到RTC會顯示以下畫面






可直接輸入正確的時間或網路NTP校時。校時完後把正確的時間輸入到RTC裡
sudo hwclock -w

再次查看RTC的時間
sudo hwclock -r

將 Linux 的系統時間設定為硬體 RTC 的時間
sudo hwclock -s

接著輸入指令查看所有時間資訊
timedatectl

最後設定開機時,自動啟用DS3231 RTC
編輯檔案
sudo gedit /etc/rc.local

在exit 0之前加入兩行指令
echo ds3231 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s

之後開機就會自動使用RTC的時間對系統時間修正了

完成

參考 reference:
https://blog.gtwang.org/iot/raspberry-pi/raspberry-pi-ds3231-real-time-clock/

留言

熱門文章