Raspberry Pi 3BでRTC(リアルタイムクロック)
Raspberry Pi 3Bは電源を落とすと時計が止まってしまうので、RTC(リアルタイムクロック)モジュールを試してみました。(※OSはRASPBIAN JESSIE WITH PIXELです。)RTCモジュールはいろいろありますが、今回は「SparkFunのRTCモジュール」を使用します。
I2Cの有効化
RTCモジュールを使用するためには、I2C(アイ・スクエア・シー)を有効化する必要があります。I2Cは外部デバイスとやり取りするためのプロトコルの一つで、Raspberry Piは初期設定でI2Cが無効になっているので有効化します。詳細な設定方法は下記ページが非常に分かりやすいので、参考にしてください。
Raspberry PiとRTCの接続
I2Cを有効化したら、Raspberry PiとRTCモジュールを上図のように5V、GND、SDA、SCLにそれぞれ配線します。※Raspberry Pi 3Bのピンの並びは下図の通りです。
配線したらi2cdetectコマンドで接続を確認します。68が表示されればOKです。
$ i2cdetect -y 1
ハードウェアクロックの設定
RTCモジュールの読み込みをします。「$sudo hwclock」を実行して時間が表示されればOKです。
$ sudo modprobe rtc-ds1307 $ echo ds1307 0x68 | sudo tee /sys/class/i2c-adapter/i2c-1/new_device $ sudo hwclock
● システムクロックを正確な時間に設定
ハードウェアクロックをシステムクロックに同期する前に、ntpdateをインストールして、NTPサーバーでシステムクロックを正確な時間にしておきます。
$ sudo apt-get install -y ntpdate $ sudo ntpdate -u ntp.jst.mfeed.ad.jp $ date
「$ date」で現在の正確な日時が出力されればOKです。
● ハードウェアクロックをシステムクロックに同期
下記コマンドでハードウェアクロックをシステムクロックに同期させます。
$ sudo hwclock -w
● ntp、fake-hwclockのサービス停止
RTCモジュールでハードウェアクロックを使用する時は「ntp」、「fake-hwclock」は必要ないのでサービスを停止させます。
※「ntp」、「fake-hwclock」が動いていると、RTCがうまく動かないようです。
※「fake-hwclock」はシャットダウンする直前の時間を保存して、起動時に表示する機能で、使うこともないので削除してしまいます。
//ntpのサービス停止 $ sudo apt-get install chkconfig $ sudo chkconfig ntp off //fake-hwclockの削除 $ sudo apt-get remove fake-hwclock $ sudo dpkg --purge fake-hwclock
● 起動スクリプトの修正
「/etc/rc.local」の「exit 0」の前に以下を追加して、起動時にシステムクロックをハードウェアクロックに同期するようにします。※「/etc/rc.local」は、起動時に実行されるシェルスクリプト。
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device sudo hwclock -s exit 0
これでRTCが動作するようになりました。