低消費電力化を施してRaspberry Piの電池持ちと発熱を改善する方法【ラズパイ・オーディオ編】


ラズパイ・オーディオ、楽しいですよね。

特にボクはそのRaspberry Pi自体の基板サイズの小ささを活かしたミニマムなオーディオシステムを組むと、とても自己満足が高くなったり(笑)

さて、ラズパイオーディオに入門した人が、次に試したいと思う人が多いのが、「ラズパイ・オーディオのポータブル利用」なんじゃないかと思う。

この、ラズパイ・オーディオのポータブル利用の際に、重要なポイントとなるのが「電池の持ちがどの程度か」と「発熱をいかに抑えるか」という点となる。特に、夏場の利用においては、熱暴走等の問題もあるので、これらの対策は特に重要なポイントになることだろう。

すでに現時点で、ラズパイ・オーディオのポータブル利用を行っている人も、この辺り、気になっている人もいるんじゃないかと思う。

さて、これらのポイント、つまり、「バッテリー問題&発熱問題」はいずれも「ラズパイ・オーディオシステム全体の消費電力に依る」ものとなっている。

対策をするならば、自身のラズパイ・オーディオの消費電力をなるべく抑えてやる必要がある、という事になるだろう。

というわけで、今回は、ボクがこれまでに調査して実践してきた、Raspberry Piを低消費電力化する手法およびその効果について、自身の情報整理も兼ねて、書いてみようと思う。

なお、これらの手法はラズパイ・オーディオのみならず、Raspberry Piを用いたポータブルシステム全体の共通の課題とも言えるかと思うので、その他の用途で用いている人も是非参考にしてみて欲しいかと。



最初の分岐点。Raspberry Piの選択について



さて、このラズパイ・オーディオの省電力化なのだけど、まずRaspberry Pi自体の選定が重要となるだろう。なぜなら、Raspberry Piの種類によって、大きくその消費電力が異なるからだ。

Wikipediaによると、最も消費電力の大きいRaspberry Pi 3B+とRaspberry Pi Zero Wで、実に4~5倍程度とかなり大きい差があることがわかる。

・Raspberry Pi 3B+
459 mA (2.295 W) average when idle, 1.13 A (5.661 W) maximum under stress

・Raspberry Pi Zero W
100 mA (0.5 W) average when idle, 350 mA (1.75 W) maximum under stress


この消費電力の差はそのまま、電池の持ちや発熱につながるので、特に理由がない場合にはRaspberry Pi 3B+等の消費電力の高いラズパイをポータブル用途で用いるのは不向きと言えるだろう。

なお、余談だけど、じんそんさんの「NosPiDAC Zero / NosPiDAC Zero Plus HPA」のような液晶表示とボタンだけで操作が完結するようなシステムを用いるのであれば、思い切って、無線通信機能を保有しない「Raspberry Pi Zero(無印)」を用いて、さらなる省電力化が狙えるかもしれない。

あと、DACについても、使用するI2S DACによっては消費電力の大きい物もあるので、この辺りはカタログスペック等を確認して確認できる場合は確認しておいた方が良いかもしれない。

素のVolumio2の消費電力について


さて、今回はHWに「Raspberry Pi Zero W」+「Sabreberry DAC Zero(たかじんさん謹製)」を、OSに「Volumio2(volumio-2.413-2018-06-21)」を用いる事として、さらなる省電力化を目指してみる事にする。

なお、Volumio2をポータブル利用する場合には、「スマートフォンからの操作」を行うための通信手段が必要となると思うので、省電力化したシステムとの比較対象としては、APモードを有効としたVolumio2を用いる事とする。

16GBのMicroSDにVolumio2をインストールし、I2S DAC周りの設定と曲入れを行ったのみのVolumio2の曲再生中の消費電流量は以下の通り。


目視で確認した結果となるけど、通常稼働時でだいたい190mAで推移しており、時折190mA~270mAの幅で消費電流量が変化する、ような挙動を示している。

平均すると200mA辺りであると考えて良いと思うので、このシステムの消費電力は「5V×0.2A=1W程度」の消費電力と考えて良いかと思う。

なお、この数値を見てもらうと、既に1Wという超低消費電力を達成しており、その削減幅は既にかなり小さい、ということはわかってもらえるかと思う。

余談だけど、最新仕様のUSBチェッカーだと、クイックチャージ2.0や3.0とかに対応してて、電圧30V/電流5.1Aまで測定可能な物が出てきてるのね。



Raspberry Piの省電力化手法について


Raspberry Piのような元々が低消費電力になっているような機器の場合、より低消費電力化するためには、多少突っ込んだ対策が必要になる。ボクの試したところで適用可能で、有効だった手法は以下の通り。

・OSの動作を「powersave」モードに落とす。
・HDMIポートへの電源供給をオフにする。
・無線LANをオフにして、代わりにBluetoothネットワークを有効にする。
・Raspberry Pi Zero W上にあるLEDをオフにする。

以下にこれらを実際に適用するための手順について記載する。

OSの動作を「powersave」モードに落とす。


Volumio2の初期動作は「performance」モードになっているようなので、これを「powersave」モードに落とすことで、Raspberry Pi Zero WのCPUにおける消費電力を低減する。

この設定変更には以下のコマンドを実行する。

$ sudo echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor


無線LANをオフにして、代わりにBluetoothネットワークを有効にする。


より省電力なネットワーク通信を利用するため、無線LAN側はオフにしてしまって、代わりにBTテザリングを有効にしたスマートフォンへ、Raspberrry Pi側からBluetooth経由でテザリング接続を行うように構成を変更。

なお、ディストリごとに必要となる作業は異なるのだけど、ここでは、ボクが実際に試してVolumio2で必要だった作業についてのみ記載する。


まずは、BTテザリングの有効化のために、必要なモジュールのインストール&サービスの有効化&bt-panスクリプトの導入を以下の通り行う。

$ sudo apt-get update
$ sudo apt-get install pi-bluetooth bluez bluez-firmware
$ sudo systemctl enable hciuart.service
$ sudo systemctl start hciuart.service
$ wget https://raw.githubusercontent.com/mk-fg/fgtk/master/bt-pan
$ chmod +x bt-pan
$ sudo chown root: bt-pan
$ sudo mv bt-pan /usr/bin/

なお、以降の手順で、BTの接続設定を行うため、ここで、スマートフォン側はBTテザリングの機能をONにしておく必要がある。

上記の準備が完了後に「sudo bluetoothctl」と実行する事で、Bluetooth設定モードに移行。

$ sudo bluetoothctl

ここで、下記の通り、「power on」&「scan on」と実行後に、しばらく待っていると端末名(この場合はNexus5)と共に、XX:XX:XX:XX:XX:XXといった形式でMACアドレスが表示される。

$ sudo bluetoothctl
[NEW] Controller YY:YY:YY:YY:YY:YY volumio [default]
[bluetooth]# power on
Changing power on succeeded
[bluetooth]# scan on
Discovery started
[CHG] Controller YY:YY:YY:YY:YY:YY Discovering: yes
[NEW] Device XX:XX:XX:XX:XX:XX Nexus 5


[bluetooth]#

この状態で、スマートフォンのMACアドレスが分かるので、これをペアリング設定する。ペアリング設定には、以下の通りのコマンドを実行。なお、「xx:xx:xx:xx:xx:xx」の部分のアドレスは自身のスマートフォンのMACアドレスに変更する必要があるので注意。

[bluetooth]# pair XX:XX:XX:XX:XX:XX


上記を実行後、スマートフォン側で「Volumioをペア設定しますか?」といった風に聞かれるので設定ボタンを押すとペアが確立される。

その後、以下の通り実行して、信頼する端末に追加しておく。

[bluetooth]# trust XX:XX:XX:XX:XX:XX


最後は「exit」を実行する事で、Bluetooth操作モードから抜ける。

なお、この上記までの操作で完了としたいのだけど、このままだと、BTテザリングの接続自体は行えるのだけど、IPアドレスが払い出されず、通信ができない状態になってしまうので、もう一カ所設定を行う。

Volumio2に固定IPアドレスを割り当てるために以下の設定を追加。

$ sudo nano /etc/network/interfaces
(※以下の行を行末に追加)
allow-hotplug bnep0
iface bnep0 inet static
address 192.168.44.81
netmask 255.255.255.0
gateway 192.168.44.1
dns-nameservers 192.168.44.1

なお、注意点としては、Volumio2のGUIからネットワーク設定を行うと、自分の追記した上記設定がすべて消えてしまうので、もしGUI側からネットワーク設定を変更してしまった場合は、上記設定を再度追加する必要がある。
※なお、無線LANをオフにしてしまっているので、この場合はUSB接続の有線LANが必要になるかと。

上記の準備までが完了すると、以下のコマンドで、Raspberry Pi側からのBTテザリングが可能となる。

$ sudo bt-pan client xx:xx:xx:xx:xx:xx
※「xx:xx:xx:xx:xx:xx」には先ほどペア化を行った端末のMACアドレスを入力

なお、接続時にはAndroidの場合、以下のようにステータスバー上にBluetoothテザリング中のマークが表示されるので、ちゃんと接続できているかはこちらで確認できて便利かと。



なお、接続に成功すると、スマートフォン側からは先ほど固定アドレスとして設定した「192.168.44.81」に対してアクセスする事でVolumioにアクセス可能。

無線LANのオフについては色々方法はあるのだけど、Volumio側から設定してしまえば便利。



HDMIポートへの電源供給をオフにする。


Raspberry Piの省電力化の一手法として、「不要なポートへの供給電源をオフにする」というものがある。なお、オフにできるポートとしてはHDMIポートとUSBポートがあるのだけど、Raspberry Pi Zero Wの仕様上、USBポートは一つしかないので、利便性を損なわず、オフにできそうなのはHDMIポートのみとなるだろう。

以下のコマンドを実行することで、HDMIポートへの供給電源をオフにする事が可能だ。

$ sudo /opt/vc/bin/tvservice -o

Raspberry Pi Zero W上にあるLEDをオフにする。


微々たる省電力化ではあるのだけど、Raspberry Pi Zero Wのような超省電力な機器では、ボード上のLEDをオフにする事で、多少、消費電力を抑える事が可能だ。

ボード上のアクティブLEDをオフにするには以下のコマンドを実行。

$ echo none | sudo tee /sys/class/leds/led0/trigger
$ echo 1 | sudo tee /sys/class/leds/led0/brightness

その他の消費電力削減手法


さて、これ以外にも一般的にRaspberry Piの消費電力削減の方法としては、幾つかあるのだけど、今回は適用外としているが、参考にしてほしい。

・USBポートへの供給電源をオフにする。

→Raspberrry Pi Zero Wではそもそも空きのUSBポートが1つしかないので、これをオフにすると不便なので、適用しない。
なお、適用する場合には、「hubctrl」というコマンドを導入して、以下の通りのコマンドを実行する事でOTGポートへの供給源源をオフにできる。

hubctrl -b 1 -d 1 -P 1 -p 0


・不要サービスを停止して、処理不可を減らす。

→Volumioのような、完成されたディストリの場合、オフにする事で不具合や、その他の余計な対処が必要になる事があるため、適用しない。

・無線LANの出力を最低限まで落とす。

→今回のTIPSでは無線LANをオフにして代わりにBluetooth通信を用いているので適用していない。無線LANを使用している場合には有効。

iw dev wlan0 set power_save on
iwconfig wlan0 txpower 0


消費電力削減手法の効果を確認


さて、上記のTIPSを起動時に適用するためには、上記の事前準備が完了後に、以下の通りの記述を「/etc/rc.local」ファイルに追記してやる事で、それぞれのコマンドが起動時に自動実行されるようになる。
※なお、「XX:XX:XX:XX:XX:XX」には自身のスマートフォンのMACアドレスを入力する点に注意。

# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/opt/vc/bin/tvservice -o

# Set the Pi Zero ACT LED trigger to 'none'.
echo none | tee /sys/class/leds/led0/trigger

# Turn off the Pi Zero ACT LED.
echo 1 | tee /sys/class/leds/led0/brightness

bt-pan client XX:XX:XX:XX:XX:XX

echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

exit 0

そして、再起動後に、先ほど、事前に素の状態のVolumio2で再生したのと同じ曲を再生しつつ、消費電流量を計測。

やったぜ!父ちゃん、140mA!!


結果として、音楽再生中でも140mAでほぼ推移するようになり、消費電流量を50mA程度削減することに成功。

なお、時折140mA~190mAの間で変動するような様子も見せたが、最後まで200mAを超えるようなことは無かった。

これは消費電流量が平均150mAと考えると、「5V×0.15A=0.75W」にまで消費電力を削減できたことを意味している。

これは、消費電力で言うと25%の削減となるので、元々が低消費電力なシステムの省電力化としては十分大きな削減と言えるだろう。

なお、さすがに半分まで削減可能、というところまではいかなかったけど、電池の持ちも20%強改善することを考えると、これは十分効果ありと言い切って良いのではないだろうか。

まとめ、暑い夏を省電力化で乗り切ろう!!


さて、今回はボクが実践しているラズパイ・オーディオの省電力化についてまとめて書いてみた。実際にポータブル利用をしようとしている方には、多少なりとも興味が持てる内容もあったんじゃないだろうか。

今回はVolumioを題材として使用したけど、同様のTIPSはMoOde だろうが、Z-MPDだろうが、適用可能だと思うので、興味のある方は是非試してみて欲しい。

まあ、コマンドの実行など、Linuxの操作に不慣れな人にとっては、なかなか難しい内容だったかもしれないけど、このように、ラズパイ・オーディオは「自身で機能の改変が可能なミュージック・プレーヤー」という、とても面白い側面があることを感じてもらえるととてもうれしいです。

なお、Raspberry Pi 3B+は推奨しないような事を書いたけど、CPUのコアを幾つか無効化したり、USBポートへの電源供給を停止し、有線LANすらオフにしてみたりと、チャレンジ案件としては、こっちの方が楽しいかもしれない(笑)

皆さんも何か、「こうしたら劇的に消費電力が削減できるよ!」という情報があれば、是非教えてください!!

スポンサーリンク
スポンサーリンク