TOPに戻る

ラズパイ2023年10月更新 bookworm ⑩ ラズパイ5のRTC

 ラズパイ5になってRTCが搭載されました。バックアップ用電池は別売ですが、純正品が用意されています。OSが立ち上がっていると、NTP(ネットワーク・タイム・プロトコル)サーバと通信し、正しい日時がきざまれます。RTCの内容も補正が必要なら適切に処理されるようです。

環境

  • ハードウェア Raspberry Pi 5(4GBモデル)
  • OS Raspberry Pi OS (64ビット)、リリース日December 5th 2023
  • Windows10 22H2にて、ssh(OpenSSH_9.2p1 Debian-2+deb12u2, OpenSSL 3.0.11 19 Sep 2023)および、VNC Viewerを動作させている

RTCリアル・タイム・クロック

 バックアップ電源(電池)のつながったRTCがあれば、ラズパイ5に電源が入っていなくても、時を刻みます。したがって、ネットワークがつながっていなくても、OSが立ち上がれば、正しい日時を得ることができます。

 こちらのページによると、ラズパイ5は、revisionが1.0で、 codesは、4GBがc04170、8GBがd04170です。つまり、世界中で、ひとつのハードウェア・モデルが製造販売されています。

 Raspberry Pi 5のこのページにはReal Time Clock (RTC)に解説があります。電源用USB-Cコネクタの横にある、2PのコネクタJ5に充電可能な電池をつなげるようになっています。

 制御は、その下に見えるRenesasのICが担当しているようです。公式のページの写真にはdialogのロゴが見えますが、ここは、ルネサスが2021年に買収した英国の半導体製造会社です。

boot/overays/README

 READMEには、追加するハードウェアRTCのi2c-rtc関係のデバイス・ドライバの利用方法が書かれています。ラズパイ5のRTC関係はないようです。

Raspberry Pi 5にリアルタイムクロック。だから何?

 この記事によれば、「RTCドライバは起動時に通常のLinux hwclock の動作に従います」と書かれています。確認してみました。

$ hwclock -v
hwclock from util-linux 2.38.1
System Time: 1709003706.555883
Trying to open: /dev/rtc0
hwclock: cannot open /dev/rtc0: Permission denied
No usable clock interface found.
hwclock: Cannot access the Hardware Clock via any known method.

$ sudo hwclock -v
hwclock from util-linux 2.38.1
System Time: 1709005422.129282
Trying to open: /dev/rtc0
Using the rtc interface to the clock.
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
ioctl(4, RTC_UIE_ON, 0): Invalid argument
Waiting in loop for time from /dev/rtc0 to change
...got clock tick
Time read from Hardware Clock: 2024/02/27 03:43:43
Hw clock time : 2024/02/27 03:43:43 = 1709005423 seconds since 1969
Time since last adjustment is 1709005423 seconds
Calculated Hardware Clock drift is 0.000000 seconds
2024-02-27 12:43:42.119819+09:00

 短絡すぎるかもしれませんが、ラズパイ5は、RedHatのようなシステムと同等の「時」の管理ができるようになったということかもしれません。

 今までも、pythonでdatetimeモジュールを使って日時を取得できていました。これは、ネットワークでNTPサーバとやり取りをしているので正しい時を得られていたからです。

起きだす実験

$ python bme280_LCD.py

 目に見える形でプログラムを一つ動かします。LCDに結果を表示しています。

 ブートローダ設定を編集します。

$ sudo -E rpi-eeprom-config --edit

 2行を追加します。

POWER_OFF_ON_HALT=1
WAKE_ON_GPIO=0

 CTRL-O、CTRL-Xでエディタを抜けたら次のメッセージが表示されました。

  /sys/class/rtc/rtc0/wakealarmに、ラズパイ5を非常に低電力状態 (約3mA)に切り替える時間を書き込みます。ここでは180秒です。

echo +180 | sudo tee /sys/class/rtc/rtc0/wakealarm
+180
$
sudo halt

 ネットワーク接続が切れ、

  • LCDの表示はそのままでで、内容は更新されなくなり
  • ラズパイ5につないでいるディスプレイが暗転し
  • ラズパイのボード上の緑のLEDが赤色に変化

 3分後、何も起こりません。停止したままです。

 電源スイッチを押して起動し、60秒を書き込んでみました。

echo +60 | sudo tee /sys/class/rtc/rtc0/wakealarm
+60

 /sys/class/rtc/rtc0のwakealarmの内容は、Unixtimeがテキストで記述されます。

1709088781

 現在の時刻は、2024-02-28 13:04:32   1709093072 は、未来の時間です。 

 こんどは、600秒の設定をします。

echo +600 | sudo tee /sys/class/rtc/rtc0/wakealarm

 読み出した時刻は、約10分後になっていました。

1709093712  は、2024-02-28 13:15:12

 1分ほどして読み出します。

1709093712

変化はありません。つまり、10分後の時間が設定されており、どこかべつのところでカウントダウンが行われているようです。

<10分ほど休憩中>

  13:15:33には、ラズパイが立ち上がっていました。

 $ dmesg | grep rtc
[    0.382033] rpi-rtc soc:rpi_rtc: registered as rtc0
[    0.383543] rpi-rtc soc:rpi_rtc: setting system clock to 2024-02-28T04:15:24 UTC (1709093724)

 bme280_LCD.py の実行は止まったままです。勝手にアプリの実行は継続はしないようです。

 再度試します。 14:00に、

echo +600 | sudo tee /sys/class/rtc/rtc0/wakealarm
+600
$
sudo halt

(休憩中)

 14:10 起動しました。正常にこの仕組みは動くようです。つまり、低電力状態に移行し、その後ラズパイを正常な状態に戻ったら、何らかの処理プログラムを起動するという手順で、定期的な監視用のプログラムを動かすなどができそうです。

-