2021年6月9日 星期三

RPi的 RTC 時鐘使用方法

本篇參考老明的線上文件完成

RaspberryPi-RTC

Install DS3231 RTC on Raspberry Pi

URL如下
https://github.com/laomingOfficial/RaspberryPi-RTC
老明還有 Youtube    的說明影片
https://www.youtube.com/watch?v=xT2mPT57usQ

另外一個參考的好網頁
https://blog.gtwang.org/iot/raspberry-pi/raspberry-pi-ds3231-real-time-clock/

使用 RTC 主要目的是提供 RPi 有正確的實時時鐘

RPi 不像 PC, 它没有內建的時鐘晶片, 無法在關機後記錄時間, 未使用RTC時會在關機前將時間記錄在檔案中, 在下一次開機時載入,  也就是所謂的 Fake Clock,  所以RPi在關機一段時間後重開時, 系統時間會停在前次關機的時間, 若有網路還可以透過ntpdate校時動作校正系統時間(但若關機時間過長, ntpdate會因為時間差異過大造成校正不成功, 預設值是1000s ?) , 需另外手動設定時間後才能自動校時成功. 

安裝 RTC 後就像PC內建時鐘一樣, 直接讀取時鐘的模組即可得到真實時間(前提是RTC的電池有電唷)。

安裝及系統設定如下:

使用 DS3231 模組 (5Pin)

1 關機安裝在RPi 的 pin腳 1,3,5,7,9   (3.3v, GPIO2, GPIO3,GPIO4,GND, 圖的左上角)
   安裝DS3231

2 sudo i2cdetect -y 1 

  開機後偵測是否有連接到 DS3231 模組

   若尚未註冊, UU 的位置會出現 68, 表示在這個位置上有偵測到設備 
   可執行第3步, 將 i2c 的ds3231 模組註冊在 0x68的位置
   這個動作可在開機時完成, 參考第9步

3 echo 'ds3231 0x68 | sudo tee /sys/class/i2c-adapter/i2c-1/new_device 

   註冊 DS3231到RPi的i2c 設備中

4 sudo hwclock -r

  查詢RTC時間

5 sudo hwclock -s

   將RTC時間, 寫入系統時間

6 sudo ntpdate -u clock.stdtime.gov.tw 
   若有網路, 進行網路校時
   (注意若時間差異> 1000s, 需手動設定時間後再自動校時)

7 sudo hwclock -w

   將系統時間寫入 RTC 

8 假設有定時網路校時, 可在關機時將系統時間寫入 RTC

   需在 /etc/systemd/system-shutdown/  中放入有 sudo hwclock -w 指令 的 Script

9 開機時載入 RTC clock
   在 /etc/rc.local exit 0 之前加上這兩行
    echo 'ds3231 0x68' | sudo tee /sys/class/i2c-adapter/i2c-1/new_device
     sudo hwclock -s

其他 
ntpdate 的繼承者 chrony , 可同時校時也可以當Server, 有空再寫好了

開機時網路起來的時間有時會稍慢, 需加上等待時間30秒 sleep 30 再執行ntpdate

hwclock -w 執行時間約1秒, 故與真正時間仍有可能有1秒左右的誤差, 若需精密校時可能要考慮其他如從GPS模組讀入時間的作法