X

Raspberry Pi 3BでRTC(リアルタイムクロック)

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の接続

Raspberry PiとRTCを接続した回路図

I2Cを有効化したら、Raspberry PiとRTCモジュールを上図のように5V、GND、SDA、SCLにそれぞれ配線します。※Raspberry Pi 3Bのピンの並びは下図の通りです。
配線したらi2cdetectコマンドで接続を確認します。68が表示されればOKです。

$ i2cdetect -y 1

Raspberry Pi 3Bのピンの並び


ハードウェアクロックの設定

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が動作するようになりました。

  • このエントリーをはてなブックマークに追加

関連記事

スポンサーリンク

前の記事へ

FUJIMOCK FES 2016

次の記事へ

Raspberry Pi 3Bで温度センサー(MCP9808)