raspberry pi と RTCモジュール

raspberry pi と RTCモジュール

パソコンには RTC と呼ばれる内蔵時計がはいっている
この内蔵時計には専用バッテリーがある
なので、電源を切っても
RTC で時間管理しているので刻合わせしてくれる

でも Raspberry Pi にはない

その代わり、NTPという仕組みを使って
インターネットに接続してソフトで管理している
つまり、ネットにつながっているのなら問題ない

Raspberry Pi は起動すると
前回シャットダウンしたときの時間が設定される

でも、ネットにつながらない環境では
NTPサーバにアクセスできないので
時刻修正ができない

これを解決するには RTC モジュールを取り付ければいい

今回利用したのは
リアルタイムクロック(RTC)モジュール

今回も
秋月電子通商通販

で部品を調達

これで、今回使ったものは
リアルタイムクロック(RTC)モジュール
ブレッドボード
ジャンパーワイヤー4本
Raspberry Pi 本体

インターネットで購入できるので
電車などで向かわなくても購入できるし
ある程度の時間指定もできるので
忙しい人にもおすすめ

なお、配線にあたって回路が全然わからないため
http://www.geocities.jp/zattouka/GarageHouse/micon/MPLAB/16F1827/RTC/RTC.htm
を参考に配線

文字が書いてあるほうを手前にして
右側に3つのーマークがくるようにして
ブレッドボードにはめる

次に
電源が 3,3V なので VDD になる上の左から1番めと
GPIO 3,3V を配線

次にGND同士を合わせるので
右下1番めと
GPIO GND を配線

次に SDA がモジュールの一番右上になるので
これと
GPIO 3 つまり左下2番めと接続

次に SCL モジュールの右上2番めと
GPIO 5 つまり左下3番めと接続

これで配線は完了

ここまでできたら Raspberry Pi の電源を入れて
実験

まずは
I2Cデバイスということで
i2cdetect コマンドで、デバイスのアドレスを検出

$ sudo i2cdetect -y 1

とすると

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                   

となり検出できているのがわかる

次に

ls /lib/modules/$(uname -r)/kernel/drivers/rtc/

でカーネルモジュールを調べる

結果は

rtc-bq32k.ko   rtc-ds3234.ko    rtc-m41t94.ko   rtc-pcf8583.ko   rtc-rx8581.ko
rtc-ds1305.ko  rtc-em3027.ko    rtc-max6900.ko  rtc-r9701.ko     rtc-s35390a.ko
rtc-ds1307.ko  rtc-fm3130.ko    rtc-max6902.ko  rtc-rs5c348.ko   rtc-x1205.ko
rtc-ds1374.ko  rtc-isl12022.ko  rtc-pcf2123.ko  rtc-rs5c372.ko
rtc-ds1390.ko  rtc-isl1208.ko   rtc-pcf2127.ko  rtc-rv3029c2.ko
rtc-ds1672.ko  rtc-m41t80.ko    rtc-pcf8523.ko  rtc-rx4581.ko
rtc-ds3232.ko  rtc-m41t93.ko    rtc-pcf8563.ko  rtc-rx8025.ko

どれをつかうかわからなかったので
時計モジュールをRaspbian OSで管理する

を参考に


次に、デバイスの宣言をするけど
これは sudo でやってもダメなので
一度 root ユーザで行う


sudo su

で root になって

echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-1/new_device 

で書き込む

これで接続成功なら仮想デバイスが作成されているので

ls -l /dev/rtc*

で確認

結果は

crw------- 1 root root 254, 0  9月  9 00:16 /dev/rtc0

となり
/dev/rtc0 ができているのがわかる

次に、時刻の設定
RTCを接続しただけだと、正確な日時は設定されていない

まずはネットにつなげ、date コマンドで時刻を取得

date

とすると

2014年  9月  9日 火曜日 00:22:53 JST

という結果になる

これで時刻取得できているのがわかったので
次に RTC モジュールへ書き込み

sudo hwclock -w

で書き込み

そして RTC の時刻をみたいときには

sudo hwclock -r

でみることができる

実行結果は

2014年09月09日 00時25分37秒  -0.047100 seconds

これでRTCには設定されたけど
Raspberry Pi には設定されていない
なので
hwclock -s でRTCの時刻をシステムに反映できる

これで設定できるようになったので
あとはネットから切り離しても動作するように
起動時にこの動作をするように
/etc/rc.local
へ書き込む

sudo vim /etc/rc.local


exit 0
とかかれている前に追記する

内容は

echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-1/new_device 
sleep 1
hwclock -s

これで起動時に時刻調整することができる

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です