あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

Raspberry Piの消費電力をカリカリにチューニングする

特に気にもしていなかったために今まで知らなかったのですが、Raspberry Piを節電のために色々無効化できるらしく、とくにHDMIを無効化して30mA節約できるあたりに感動したので、自宅の常設Raspberry Piに一通り設定しつつ、Ansible Playbookを書いてみました。

github.com

varsはこんなかんじ。ご使用のモデルと用途に応じてnoをyesに変えてください。コミットではgroup_varsにおいてますが、host_varsに置いてホスト単位で管理したほうがいいかなと思います。

# HDMIの無効化 (All model)
# 30mAくらい減る
disable_hdmi: no

# ACT・電源のLEDを消灯 (1B+/1A+以降,Zeroはactのみ)
# 数mA減る
disable_led_act: no
disable_led_power: no

# EthernetのLEDを消灯(Pi3 B+/Pi4 B)
# 数mA減る
disable_led_ethernet: no

# 無線の無効化 (Pi 3以降、Zero W)
# セットで落とすと40mAくらい減るらしい
disable_wifi: no
disable_bluetooth: no

# USBコントローラーの無効化 (Model B)
# ※1B〜3B+はLANごと使用不可になるので注意!
# 1B〜3B: 140mAくらい減る (LAN9514)
# 3B+: 220mAくらい減る (LAN7515)
disable_usb_controller: no
# 起動後に無効化されるまでの時間(秒.デフォルトは300)
disable_usb_controller_delay: 300

HDMIの無効化

HDMIに接続していなくても、force_hotplug=1でなくても、HDMIの出力のために電力を使っているらしく、無効化すると30mAほど消費電力が落ちるようでした。塵も積もれば山となるで、自宅の常時稼働の4台に設定すれば120mAが節約できる計算です。120mAあればPiZero1台分なのでラズピッピ的にはデカい。

設定はコマンド実行なので、/etc/rc.localにコマンドを書き込みます。トラブルシューティング時は母艦マシンを用意して/etc/rc.localを開いてコメントアウトなどで対応すれば良さそうです。

電源・SDカードのACTランプの消灯

電源のLEDとSDカードのACTのLEDを無効化するものです。これらは節電というよりは、部屋の見えるところに置いて点滅が目障りに無ったときなどに良さそうです。PiZeroのときはACTランプのみ無効化でOK。

設定は/boot/config.txtにあるため、トラブルシューティング時は同じく母艦マシンを用意して当該設定をコメントアウトで対応すれば良いです。FATパーティションなので対応はHDMIよりかんたん。

(Model Bのみ)LANポートのLEDの消灯

こちらも同じくLEDの光が目障りなときに有効です。/boot/config.txtで設定可能な、Raspberry Pi 3 Model B+とRaspberry Pi 4 Modelのみ対応です。

Raspberry Pi 1B+〜3Bについては、以下のツールで対応できるようですが、今回は含めていません。

github.com

Wi-FiBluetoothの無効化

常設環境で無効化することはそれほどないのでほとんどテストしてませんが設定できるようにしてあります。参考にしたサイトいわく40mAくらいカットできる模様。多分、どちらかだけ無効化だと変化は見られないような気がします。そのへんも含め未確認です。

(Model Bのみ)USBコントローラー(LAN951x/LAN7515)の無効化

Raspberry Pi 1B+〜3B+で、USBポートとLANポートを無効化することで節電します。1B+と2Bではネットワークにつなぐ手段を失うことになるためこれをやる意味はありませんが、3Bと3B+は無線が残るため、おそらく3A+と同等くらいの消費電力にできると思われます。1B〜3Bで140mA、3B+で220mAほど消費電力が落ちるので結構大きいです。

設定はコマンド実行なので、/etc/rc.localにコマンドを書き込みます。USBコントローラーの無効化はトラブルシューティング時に辛くなりそうなので、実行までの待ち秒数を設定できるようにしておきました。また、この設定だけは、Playbook実行時にモデルに応じた設定を書き込むため、書き込み後に違うモデルにSDカードを差し替えたときはPlaybookの再実行が必要です。

なお、4BのLANコントローラーはPCIレベルとか無効化できましたが、消費電力は落ちないようでした。もしかしたら電源を落とせる別のコマンドがあるのかも。また、LANポートもDeviceTreeレベルで切っても変わらないようでした。

3B+での設定例

設定内容はこんな感じ。

  • HDMI無効化
  • LED全部消灯
  • USBコントローラー無効化

ビフォーアフター

  • 設定前: 0.40A
  • 設定後: 0.15A

という感じでPiZeroのアイドル並の消費電力まで落ちます。3A+は全部使用中なので比較はできないですが、多分同じくらいだと思いたいです。わざわざ3A+相当にして使い物になるかと言われると難しいところですが、3A+ではRAMが足りないけどそれ以外は3A+くらいの割り切りでいい時とか、でしょうかー。

まとめ

自宅内に常設のラズピッピおおすぎ……。24時間稼働4台(2B, 3A+, 4B,ZeroW)、使うときだけオン(3A+, ZeroW)の6台……。