リアルタイムクロックに関するまとめ 【Raspberry Pi】

Raspberry Pi

Raspberry Pi のリアルタイムクロックに関するコマンドや設定手順等についてまとめておきます。

今回、以下の環境で確認をしています。
環境の一例: Raspberry Pi 3、Raspbian GNU/Linux 10 (buster)、Grove リアルタイムクロックモジュール

背景

作業の自動化や、Linux の技術検討用に Raspberry Pi を常時活用しています。

Raspberry Pi は基板にクロック(および時刻用電池)がなく、電源の ON/OFF などの通常使用を行うと、単体では正確な時刻を維持できません。
写真で示したように、リアルタイムクロック(Real Time Clock, RTC)を使うと、設定した時刻を維持できるようになります。

設定手順についてネットで探すと、情報が古いものが多く、今では動かないものもかなり多いようです。
そこで、リアルタイムクロックに関する情報を集約しておくことにします。

多少時間が取れ、以前、購入したリアルタイムクロックも、やっと設定が終わりました。

使用している RTC デバイスの事例

・ Grove リアルタイムクロック (Grove-RTC)
101020013(SEN12671P) 通販コード M-09276  (購入時価格で \730)

※ なお私は、上記のリアルタイムクロックを秋葉原で購入しました。DS3231 を使ったものも、Amazon で購入しました。
Amazon で買えるリアルタイムクロックを探すと、DS1307 を用いた同等製品としては、こちら がありました。
普及している製品としては、DS1307 を用いたタイプと、DS3231 を用いたタイプの2種類があります。
いずれも、チップに対応した文字列を設定ファイルに書き込む程度で、特に問題なく動いています。

設定手順

ハードウェアの設定

① Raspberry Pi にリアルタイムクロック RTC の基板を接続する。
・ 4本の結線が必要
・ リアルタイムクロックの電源は 5V のピンにつなぐと動く。
※ 仕様では、3.3V ~ 5.5V と記載されています。しかし、Raspberry Pi の 3.3V ピンにつないだところ、動きませんでした。そこで 5V ピンにつないだところ動作しました。
※ ピン配列は、ターミナルで “pinout” とすると表示されます。
② リアルタイムクロックに電池を入れる。
(仕様では、使用する電池は CR1225 と記載されています。しかし、秋葉原や家電量販店で探したところ、販売している店舗が見つからず、CR1220 を入れたところ動いています。)
③ Raspberry Pi に、キーボード、モニター、LAN ケーブル等を接続し、電源を投入する。

ソフトウェアの設定

④ 以下の手順等で、RTC で使用する通信 I2C が有効となるよう設定する。
Raspberry Pi の画面で左上の「ラズベリーパイのマーク」をクリック → 「設定」→「Raspberry Pi の設定」をクリック → 「インターフェイス」をクリック → I2C 欄の有効を選択する → 「OK」ボタンをクリックする。
⑤ LAN(インターネット)に接続した状態で、コンソールを起動し、以下を参考にツールをインストールする。
sudo apt-get install i2c-tools
(すでに入っていたら不要)
⑥ 以下を例に、起動時のデバイス構成の設定 config.txt を修正する。
sudo vi /boot/config.txt
ファイルの末尾に、以下を追記する。
dtoverlay=i2c-rtc,ds1307
⑦ 以下を例に、モジュールの設定ファイルに RTC のモジュールを追加する。
sudo vi /etc/modules
ファイルの末尾で、以下となるように追記する。
i2c-dev
rtc-ds1307
⑧ コンソールで i2cdetect -y 1 と入力する。
→ ”68″ と表示されていれば、RTC の認識はできている。
(RTC が I2C の 0x68 に対応している。)
⑨ Raspberry Pi の再起動を行って、i2cdetect -y 1 を再度、実行する。
→ ”68″ の表示部分が “UU” に変われば、システムが RTC を正常に認識している。
(ここは正確に記録を残すのを忘れてしまい、記憶があいまいです。詳細が確認できたら後日更新します。)
⑩ 以下でシステムの時刻を RTC に書き込む。
hwclock -w
・ システムの時刻が正しい状態で RTC への書き込みを行う。
・ この書き込みを実行しないと以後の読み出し以降がうまく動かない。
⑪ RTC からシステムに時刻を読み出す。
hwclock -r

再起動時にシステムの時刻合わせを実行するよう設定する

⑫ コンソールで crontab -e と入力する。
⑬ 以下を参考に、Raspberr Pi の起動時に RTC の時刻をシステムに設定するよう追記する。
# 2021/09/XX
@reboot sudo hwclock -s
→ [ctrl] + x などで上書き保存し、crontab を終了する。
⑭ LAN ケーブルを外して、Raspberry Pi の再起動を行う。
※ LAN を接続しなくても、しばらく経って再起動したときに/何度か起動したときに、RTC の設定が読み込まれて、画面右上の時刻の表示が正しく調整されることを確認する。

その他のコマンド

・ RTC の詳細情報を出力するとき
hwclock –verbose
・ Raspberry Pi が起動時に読み込んでいる時刻データを確認するとき
cat /etc/face-hwclock.data
–> 2021-09-07 09:47:35 などの表示がされる。

まとめ

Raspberry Pi のリアルタイムクロックに関し、関連コマンド、設定の流れについてまとめました。

Google 検索をすると、数年以上前の情報が大半で、コマンドも使えなくなっているものが結構あります。
そこで、最近の Raspberry Pi の buster で、現に動いている状態のもので把握している情報をまとめ、公開しておきます。

関連リンク
・ Raspberry Pi を自動で起動、シャットダウンする
・ 【Raspberry Pi】 初期設定のまとめ 【OpenCV】

タイトルとURLをコピーしました