中野島ロボット

小さなロボットの自作記事を書いています。

週刊中ロボ144 ラズパイ4にリアルタイムクロックを乗せる

はじめに
Raspberry Pi 4(RPi4)を普通のPCとして使用できない理由の一つは、リアルタイムクロック(RTC:時計)を搭載していない事ですが、安価なArduino用のRTCモジュールがRPi4でも使えます。

 

購入品情報
Arduino用にずいぶん前に購入していた時計モジュールをRPi4に接続してみました。 

このモジュールは5V /3.3V のどちらでも動作するので、RPi4にも直結できます。5Vの時は充電できるバックアップ電池を使う必要があり、充電できない普通のCR2032を使う場合は改造が必要ですが、3.3Vのときは改造は不要です。
 

接続
といってもインタフェースがI2Cなので、Raspberry Pi のI2Cと電源3.3VとGNDの4本をケーブルで繋ぐだけです。

f:id:nakarobo:20210324225952j:plain

   RPi4  RTC Module

  3.3V       1――――  2 VCC 赤 
  SDA    3 ――――  3 SDA オレンジ
  SCL  5 ――――  4 SCL  黄色
  GND      9 ――――  1 GND  茶色

 

設定
ラズパイメニュからRaspberry Pi の設定を開き、インターフェイス タブでI2Cを有効にしてOKを押します。

f:id:nakarobo:20210325043555p:plain
これで、I2Cが使えるようになります。再起動の必要はありません。

次に端末を開き、以下のコマンドでRTCモジュールが認識されているか確認します。

 

pi@raspberrypi:~ $ /usr/sbin/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: -- -- -- -- -- -- --57 -- -- -- -- -- -- -- -- 

60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 

70: -- -- -- -- -- -- -- --

このモジュールは、RTCとEEPROMが搭載されているので、二つのアドレスが表示されていればOKです。
アドレスの0x57がEEPROMで、アドレスの0x68がRTC DS3231です。

インストール
RTCのチップはDS3231ですが、rtc_ds1307 のデバイスが使用できます。一応対応を確認してから、デバイスとI2Cのアドレスを関連付けます。

pi@raspberrypi:~ $ sudo modprobe -c |grep ds3231
alias i2c:ds3231 rtc_ds1307
alias of:N*T*Cmaxim,ds3231 rtc_ds1307
alias of:N*T*Cmaxim,ds3231C* rtc_ds1307

pi@raspberrypi:~ $ echo ds3231 0x68 | sudo tee /sys/class/i2c-adapter/i2c-1/new_device

 

再度I2Cに接続されているデバイスを確認すると、さっきの68のところがUUに代わっていればOKです。

pi@raspberrypi:~ $ /usr/sbin/i2cdetect -y 1
(中略)

60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 

(後略)

 

RTCの動作確認
RTCへの現在時刻の設定は、 hwclock -w コマンドで行います。

pi@raspberrypi:~ $ sudo hwclock -w
2021-03-24 22:27:00:48.602690+09:00

うまく機能していれば、システム時刻をRTCに書き込みます。

うまく機能していない場合は

hwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --verbose option to see the details of our search for an access method.

と表示されます。

RTCからの時刻の読み出しは、 hwclock -r コマンドです。

pi@raspberrypi:~ $ sudo hwclock -r
2021-03-24 22:27:00:48.636663+09:00

時刻が読みだされたら動作確認は終了です。

 

起動時スクリプト
RPi OSは、起動時に毎回ネットワーク経由で時刻を入手してきてそれを使用する設定(fake-hwclock)になっています。これを起動時にRTCクロックから入力するように変更します。変更するファイルは /etc/crontab と /etc/rc.local の二つのファイルです。

pi@raspberrypi:~ $ sudo vi /etc/rc.local

(中略)
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sleep 1
/sbin/hwclock --hctosys

(中略)

exit 0


pi@raspberrypi:~ $ sudo vi /etc/crontab
(中略)

0 13 * * * root /sbin/hwclock --hctosys

(中略)


今後RTCを使うなら”fake-hwclock”をアンインストール

1.”fake-hwclock”をアンインストールします。

pi@raspberrypi:~ $ sudo apt-get purge fake-hwclock


2.“/boot/config.txt”を編集 最後に二行追加

pi@raspberrypi:~ $ sudo vi /boot/config.txt

# RTC_DS3231
dtoverlay=i2c-rtc,ds3231

 

3.“/etc/udev/rules.d/85-hwclock.rules”を新規作成 1行記述

pi@raspberrypi:~ $ sudo vi /etc/udev/rules.d/85-hwclock.rules

 KERNEL=="rtc0", RUN+="/sbin/hwclock --rtc=$root/$name --hctosys"

 

4.確認
RPi4をネットワークから切り離して電源をオフにし、しばらくしてから再起動します。そしてディスクトップの時計が、正しい時刻になっていたら成功です。

 

戻す場合
編集した2つのファイルを戻して、fake-hwclock を再度インストールします。

pi@raspberrypi:~ $ sudo apt-get fake-hwclock

再起動して元に戻ることを確認して下さい。

 

おわりに
RPi4はRTCを積んでいないで、ネットから時刻が取れない場合はファイルの作成時間や、ログの時間が起動していた最後の時からの続きになり、ぐちゃぐちゃになってしまいます。
ほんとはRPi4を低消費電力のスリープ状態にできれば、RTC は無くても良いのですが、RPi4はスリープやスタンバイにできないので、ネットワーク接続が無い状況でPCとして使う場合はRTCが必須だと思います。(時刻はとても重要です。)
RTCのチップの原価は100円しないと思うけどなんで付けていないんだろう。ネット接続が前提のChrome OSなら判りますが、そもそもセキュリティの甘いRaspberry Pi では、必要な時以外ネットから切り離していた方が安心だと思います。後は電源が自動でOFFにできるようになれば、ノートPCとして使えそうです。 

 

おしまい

 

購入品情報
RPi4にRTCが付けば、ネットワークにつなっがっていない状態でも正確な時刻が使えるようになり、普段使いのPCやノートPCとして使えるようになります。

 RTC 3個で1000くらい(@333円)
はこれを使っています。

充電可能なバッテリー
バッテリバックアップする場合の電池はこちらから。 一個450円くらい。

充電式 LIR2032 LIR 2032 3.7V ボタン電池

充電式 LIR2032 LIR 2032 3.7V ボタン電池

  • メディア: エレクトロニクス
 

4個で1120円 くらい

バッテリのケースをはずして薄く仕上げるにはリード付きのこっちの方が良いと思います。 780円 ちょっと高い。

(今度買ってみよう) 

 接続ケーブル 1000円くらい

 

参考

risaiku.net

データシート

www.maximintegrated.com