Raspberry Pi のRaspberry Pi OS(以前はRaspbianと呼ばれていたもの)用にDS3231のRTCモジュールの設定を行いました。 Raspberry Piがインターネットに接続されていないときでも高精度に時刻をキープできるようになりました。インターネットに接続されているときには、インターネットの時刻を優先して使用し、RTCの時刻も適宜補正されるようになり便利に使用できるようになりました。
はじめに
実は2017年2月にこちらのブログにあるようにRaspbian JessieにRTCモジュールの設定をしました。 その後、このところしばらくこのラズパイを使用していなかったのですが、再使用にともない最新のRaspberry Pi OSをインストールしたところ、前回の方法ではRTCモジュールの設定をできなくなっていたので、別の方法をインターネットで探し回りRTCを無事に使用できるようになりました。
使用したラズパイとOSとRTC
モデル:Raspberry Pi 3
OS:Raspberry Pi OS Full (32-bit), Released: 2021-05-07, A port of Debian with desktop and recommended applications (ここから入手しています。Download for Windowsをクリック)
RTC:HiLetgo 3.3V/5V DS3231 高精度 RTC モジュール リアルタイム クロック モジュール
上記はすでに販売されていないようですが、DS3231を搭載した同様の外観のRTCが多数あるようです。
RTCの設定手順(OSはインストール済みであることが前提です。)
1.I2Cインターフェースを有効にする
/boot/config.txt ファイルの #dtparam=i2c_arm=on の記述の行の頭の#を取り去り dtparam=i2c_arm=on に変更します(root権限が必要なので、sudo vi /boot/config.txt などで行います)。
ファイル編集後、シャットダウン($ sudo shutdown -h now)し、電源オフ、RTCモジュールを接続し、再度起動します 。 Pi 3へのRTCモジュールの接続は、写真のようにピンヘッダーに差し込みするだけです。
2.I2CのRTCモジュールの接続状況を確認
次のコマンドを実行すると、画像のような結果になります。アドレス0x68のところが68になっていればOKです。もし他のアドレスと同じく”ーー”の表示の場合はRTCモジュールがうまく接続されていません。
$ i2cdetect -y 1
3.RTCモジュールをOSに登録
/boot/config.txt ファイルの最後の部分に dtoverlay=i2c-rtc,ds3231 の記述を追加します。(root権限が必要なので、sudo vi /boot/config.txt などで行います)。
ファイル編集後、再起動します($ sudo shutdown -r now) 。
4.I2CのRTCモジュールの接続状況を再度確認
次のコマンドを実行すると、画像のような結果になります。アドレス0x68のところがUUになっていればOKです。
$ i2cdetect -y 1
5.RTCの時刻をシステム時刻に設定するサービスを登録
・ /etc/systemd/systemに、下記の内容のhwclock-start.service ファイルを作成します。(root権限で作成するので $ sudo vi /etc/systemd/system/hwclock-start.service などで行います。)
[Unit]Description=hwclock-start to read rtc and write to system clock
After=sysinit.target [Service]
Type=oneshot
ExecStart=/sbin/hwclock –hctosys –utc [Install]
WantedBy=basic.target
・ 次の3つのコマンドを実行し、RTCの時刻をシステム時刻に設定するサービスを登録しサービスを起動します。
$sudo systemctl daemon-reload
$sudo systemctl enable hwclock-start.service
$sudo systemctl start hwclock-start.service
ネットに接続されているならば、しばらく待っていると(15分くらい待たされることもあり)RTCに正しい時刻が設定されます。
インターネットに接続されていない場合に手動でRTCに時刻を設定するには、下記コマンドで行います(””で括られた日時部分は適宜変更)。
$ sudo hwclock –set –date “20 Jun 2021 14:15:00”
6.確認
$ date コマンドや、 $ timedatectl コマンドでシステムの時刻や、RTCの時刻等が確認できます。 自分は、わざとRTCの時刻をずらして、インターネット接続をできない状態にして再起動したり、インターネット接続できる状態で再起動したりして動作を確認しました。
インターネットに接続されていないときは、RTCの時刻がシステム時刻に使われ、インターネットに接続されているときは、その時刻がRTCに設定され、かつ、システム時刻に使われることが確認できました。
まとめ
Raspberry Piに限ったことではないですが、最新情報についていくのが大変ですね。 今回は無事にRTCがまた使用できるようになり良かったです。なお、今回の設定手順は、ここ(英語です)を参考にしています。