Raspberry Pi 5に実装されたRTCを試してみた
色々予定が立て込んでてこのブログをなかなか更新できず、気づいたら2024年が5ヶ月過ぎて今年初投稿となりました…(あけましておめでとうございますw)
久々ということで今回は前からやろうとしていたネタを用意してみました。
今年の2月にRaspberry Piシリーズのニューモデル、Raspberry Pi 5が日本で発売されました。
最近のRaspberry Piは一時期起きてた半導体不足による品薄が解消されて在庫も安定してきたように思います。そんな中でニューモデルのリリースはとてもいいことです。
このRaspberry Pi 5では従来のモデルから新たに実装された機能がいくつかありますが、その中でも今回はRTCモジュールを試してみようと思います。
RTCモジュールについて
公式ドキュメント によるとRaspberry Pi 5のRTCモジュールを使うためには以下の画像の通り電源コネクタの横にあるJ5コネクターに3.3Vの電池を繋げれば良さそうです。
そして、このコネクターはJST-SH型の2ピンコネクターのようです。公式のRTC用バッテリーも販売はしてますが、1000円以上するのでちょっとお試しするには高いのと、たまに試す程度なら交換できたほうが安心するので自分で接続用のバッテリーパックを自作することにしました。
RTC用のバッテリーパックを作る
それでは実際にバッテリーパックを自作していきます。ここからは半田付けなどが必要な作業なのでなれない方は大人しく公式バッテリーを買うことをおすすめします。
今回用意した材料はこちらです。全て秋葉原で買い集めました。
- ボタン電池基板取付用ホルダー CR2032用 CH28-2032LF(TR) (表面実装用ですが、ケーブルをはんだ付けするには端子が程よい広さがあるので採用しました)
- JST-SH型の2ピンコネクター付きケーブル(千石電商で買いました)
余談ですが、はんだごては秋葉原のSigezoneにUSB給電で動くモデルと半田マットがセットで1000円切ってたので衝動買いしたものですw
ケーブルと電池ホルダーを接続するときにはRaspberry Piに接続した時に給電用のUSB端子側のケーブルが電池ホルダーの+端子になるように接続する必要があります。ケーブルの色を頼りに接続すると逆になることがあるのであらかじめはんだ付けする前に接続先のケーブルを確認してからはんだ付けすることをおすすめします。
今回購入したケーブルは黒が電源用のUSB端子側になっていたので黒を+端子に接続しました。
最終的に以下の画像のバッテリーパックを作成しました。これでCR2032のボタン電池を用意すればRaspberry Piに接続できる状態になります。
接続してみる
それでは実際に接続してみます。
作成したバッテリーパックをJ5端子に接続して電源を入れます。
通電確認
接続した電源が通っているか確認するときには以下のコマンドを実行します。
cat /sys/devices/platform/soc/soc\:rpi_rtc/rtc/rtc0/battery_voltage
実行結果で以下のように3V程度の電圧が表示されていれば今回用意したバッテリーパックは正常に動作しています。
もし、明らかに小さい値の場合はバッテリーの接続やはんだ付けに誤りが無いかを確認してください。
ウェイクアラームを設定する
バッテリーが機能していることでRTCが使える状態になっています。
今度はRTC機能で試すことができる機能として、ウェイクアラームを試してみます。この機能はRaspberry Piがシャットダウンされて待機状態になっても指定した時間に再起動することができます。
ウェイクアラームを動かすためにはEEPROMの設定を書き換える必要があります。そこで以下のコマンドを実行してEEPROMを編集する画面を開きます。
sudo -E rpi-eeprom-config --edit
編集画面を開いたら、 POWER_OFF_ON_HALT=1
に変更し追加で WAKE_ON_GPIO=0
を1行追加します。
修正を終えたら Ctrl + O
で保存し、 Ctrl + X
でエディタを終了します。
エディタを終了すると以下の通りEEPROMの書き換え処理が実行されます。表示の通り、書き換えが終わるまで電源を切らないようにしましょう。
最終的に UPDATE SUCCESSFUL
と表示されれば、設定の書き換えは完了です。
Updating bootloader EEPROM image: /lib/firmware/raspberrypi/bootloader-2712/default/pieeprom-2024-04-20.bin config_src: blconfig device config: /tmp/tmp3jjmq4nf/boot.conf ################################################################################ [all] BOOT_UART=1 POWER_OFF_ON_HALT=1 WAKE_ON_GPIO=0 BOOT_ORDER=0xf461 ################################################################################ *** To cancel this update run 'sudo rpi-eeprom-update -r' *** *** CREATED UPDATE /tmp/tmp3jjmq4nf/pieeprom.upd *** CURRENT: Sat 20 Apr 10:53:30 UTC 2024 (1713610410) UPDATE: Sat 20 Apr 10:53:30 UTC 2024 (1713610410) BOOTFS: /boot/firmware '/tmp/tmp.6LKinPaDMv' -> '/boot/firmware/pieeprom.upd' UPDATING bootloader. This could take up to a minute. Please wait *** Do not disconnect the power until the update is complete *** If a problem occurs then the Raspberry Pi Imager may be used to create a bootloader rescue SD card image which restores the default bootloader image. flashrom -p linux_spi:dev=/dev/spidev10.0,spispeed=16000 -w /boot/firmware/pieeprom.upd UPDATE SUCCESSFUL
ウェイクアラームを試す
設定ができたところで、実際にウェイクアラームを試してみます。
以下のコマンドを実行することで10分後に再起動時間を設定してRaspberry Piをスリープにします。
echo +600 | sudo tee /sys/class/rtc/rtc0/wakealarm sudo halt
10分後、再びRaspberry Piが再起動されたら、RTCを使用したウェイクアラームが正常に機能しています。
Raspberry pi 5に実装されたRTCを使ってOSを再起動する機能を試してみた
— KMiura (@k_miura_io) 2024年5月29日
公式のバッテリーがもったいないから自分でバッテリーホルダー作ったけどちゃんと動いてよかったよかった pic.twitter.com/QU2U9F4l8J
dmesg | grep rtc
でカーネル出力を確認するとシステム起動時に時刻の取得処理をRTCから行っていることを確認できます。
[ 0.365625] rpi-rtc soc:rpi_rtc: registered as rtc0 [ 0.367143] rpi-rtc soc:rpi_rtc: setting system clock to 2024-05-29T15:55:29 UTC (1716998129)
まとめ
今回はRaspberry Piの新機能であるRTCを試しました。
それまでは自前でモジュールそのものを用意する必要がありましたが、こうやって電源を用意することでRTCを試すことができるのは魅力的だと感じました。
公式ドキュメントにもありますが、ウェイクアラームを活用するとアイデア次第でタイムラプスなどの定期処理を実行する機能を省電力で実現できるので、その機能も試してみたいところです。
コネクターで供給する電源も向きに気をつけないとRTCが機能しないので自前でバッテリーパックを作る際は十分お気をつけください!(そもそも公式バッテリーを買えばいい話ですが…)