Raspberry Pi 2 にRTCモジュールをつける

投稿者: | 2015年5月3日

以下の内容は古いので最新の 「AdafruiteのRiRTCを入れてRTCで時間を管理してみた」を参照すること。

ネットワーク接続していない時、Raspberry Pi 2の時刻が正しく設定できない。そこでRTCモジュールを積んでみた。

購入したのはこれ

  • ミニRTCモジュール

https://www.switch-science.com/catalog/1682/

でやってみた。まず現物はこれ。

ミニRTC

ちなみに3.3Vと5.0Vで動くのでRaspberry PiだけではなくArduinoでも使えるとある。そして今回、このRTCを接続するのは3.3VDC powerのピン側である。並びは[+][SDA][SCL][なし][GND]となっているので、ちょうどRaspberry Pi 2のPin #01-03-05-07-09の位置に挿さるようになっている。

Raspberry Pi 2に挿したもの。右側に3本出ているコードはネットワークを外して時間が正しく設定できているかどうかを確認するためにUSBシリアルコンソールを使っているため。

ミニRTCをRaspberry Pi 2に挿してみた.

ソフトウェアの設定

ソフトウェアに関しては次の通り。
まずi2cを有効にする。その前にi2cツールをインストールする。

# apt-get install i2c-tools

raspi-configを使いI2Cを有効にする。

# raspi-config

まずメニューから”8 Advanced Options Configure advanced settings“を選び、次のメニューから”A7 I2C – Enable/Disable automatic loading” を選ぶ。あとは指示に従う。

次にモジュールをロードする。永続的にロードするので、/etc/modulesに”i2c-dev”と”rtc-ds1307″を記述する。

snd-bcm2835
i2c-dev
rtc-ds1307

I2Cデバイスとしてds1307を有効にするため”/sys/class/i2c-adapter/i2c-1/new_device“に”ds1307 0x68“を書き込む。ブート時に設定したいので/etc/rc.localに加えておく

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

リブートして。i2cdetectを使い0x68が生きているかどうかをみてみる。

# 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: -- -- -- -- -- -- -- --

これでOKである。 ネットワークに接続しておりntpが外部と通信して時刻を同期させている状態でたちあげ時刻同期の状況をチェックする。

# ntpq -pn
remote refid st t when poll reach delay offset jitter
============================================================
+129.250.35.250 103.1.106.69 2 u 52 64 1 4.014 0.780 0.262
-202.234.64.222 189.77.115.5 2 u 50 64 1 16.338 -0.298 0.617
*157.7.64.173 133.243.238.243 2 u 51 64 1 5.466 0.943 0.444
+129.250.35.251 103.1.106.69 2 u 26 64 3 15.141 1.573 0.490

ここでハードウェアのクロックに現在の時刻を書き込む。

# hwclock -w

これでRTCに現在時刻が書き込まれる。あとはRTCが時間を刻んでいるので、ネットワークに接続していなくてもブート時には正しく時刻が設定される。

さてブートの時にハードウェア・クロックをシステムに設定する必要がある。それには/etc/default/hwclockの最後の行のコメントアウトを外して利用できるようにしておく。

HCTOSYS_DEVICE=rtc0