【Python】raspberry pi を置き時計に仕立てる
のその後です。あれからもう1年経とうとしているんですね。
RaspberryPi はもう手放せない愛機となりました。
サーバー機としての性能は申し分ないです。ファンついてないから静かだし。
筐体も邪魔にならないので不満はありません。ただ1つを除いては。
液晶ディスプレイが OFF できない
RaspberryPi を個室に置いて楽しんでいるのですが、寝るときに困ってます。
HDMI 接続のため液晶ディスプレイが点きっぱなしなのです。
部屋を暗くしても煌々と、光り輝いているわけです。
使い終わったらシャットダウンするような使い方なら問題ないんですが、サーバー機として使いたいのでシャットダウンは想定していません。
一応 HDMI の出力は OFF できるけど
以下のコマンドで出来るらしいというところまでは調べてます。
参考:Raspberry PiでHDMIで接続したディスプレイの制御
# OFF
$ tvservice -o
# ON
$ tvservice -p
$ fbset -depth 8
ioctl FBIOPUT_VSCREENINFO: Invalid argument
$ fbset -depth 24
ioctl FBIOPUT_VSCREENINFO: Invalid argument
$ xrefresh -d :0.0
でも一旦 OFF にすると、どうやっても ON にならないんですよねぇ。
しかも液晶ディスプレイのバックライトは結局点灯しっぱなしで RaspberryPi からは制御不可。
¥3,000 のモニターでは所詮ここまで、ということなのでしょう。
お値段相応ではありますが。
バックライトまで消灯できる LCD が欲しい
ありました。執筆時点で ¥7,000 と倍近くの値段です。
【楽天市場】Adafruit PiTFT Plus 480x320 3.5 TFT 【2441】:マルツオンライン
PiTFT のセットアップ
Adafruit PiTFT 3.5" Touch Screen for Raspberry Pi にある Easy Install をやってみました。
$ cd ~
$ wget https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/adafruit-pitft.sh
$ chmod +x adafruit-pitft.sh
$ sudo ./adafruit-pitft.sh
Select configuration:
4. PiTFT 3.5" resistive touch (320x480)
SELECT 1-5: 4
Select rotation:
3. 270 degrees (landscape)
SELECT 1-4: 3
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'
エラーになりました。
全然 Easy じゃないっすね。
調べてみると似たようなエラーに遭遇した人がいたようで、
Adafruit customer service forums
「今朝、もう一度やってみたらうまくいったよ!」
と書いてあったので再起動したのかな、と思ったらその通りでした。
$ sudo reboot
$ sudo ./adafruit-pitft.sh
Select configuration:
4. PiTFT 3.5" resistive touch (320x480)
SELECT 1-5: 4
Select rotation:
3. 270 degrees (landscape)
SELECT 1-4: 3
Would you like the console to appear on the PiTFT display? [y/n] n
Would you like the HDMI display to mirror to the PiTFT display? [y/n] y
どーなってんだ?
と思いましたが、私の方でもうまくいったのでヨシとします。
ちなみに1番目の [y/n] に yes と応答するとコンソール起動になり、GUI 起動しなくなります。この記事を読んでお試しいただく方はご注意ください。
バックライトを消灯してみる
で、本命のバックライト消灯ってどうするのよ?
Adafruit PiTFT 3.5" Touch Screen for Raspberry Pi の 30 ページに書いてありました。
なるほど、GPIO #18 に対してコマンドを送ればいいってことですね。分かります。
(ホントは分かってない)
$ gpio -g mode 18 pwm
$ gpio pwmc 1000
$ gpio -g pwm 18 100
$ gpio -g pwm 18 1023
$ gpio -g pwm 18 0
というコマンドを入れてみましたが反応がありません。ん?こっちが本物?
$ sudo sh -c 'echo "0" > /sys/class/backlight/soc\:backlight/brightness'
おぅ、いぇい。
無事 LCD のバックライトが消灯しました。画面は真っ暗です。
再び点灯させるには "0"
を "1"
に変えて実行すれば良いようで、これなら自動化できますね。
省エネ性能ってどうよ?
余談ですが、バックライトは電気を食うらしいです。
ということはバックライトを消灯できるようになった今、それなりの省エネが期待できるのでは?
以下の表は、それぞれ LCD を装着して可能な限り消灯し
12時間アイドルした後の計測結果です。
LCD | 消費電力 | CO2 排出量 |
---|---|---|
HDMI | 0.22kWh | 0.12kgco2 |
PiTFT | 0.10kWh | 0.05kgco2 |
思った以上にバックライトの消費電力は大きいものだったようです。
まとめ
ほぼ同サイズ、ほぼ同機能で倍のコストがかかる LCD の交換でどうなるか少し不安でしたが、想像以上の結果が出てとても満足です。交換して正解でした。
次回はバックライト消灯を自動化してみようと思います。
2020.05.03 追記
ファームウェアアップデートを実施したら、消灯しなくなりました。
adafruit-pitft.sh を再実行してインストールしたところ、brightness ファイルの更新ではなく
# 再起動後初回実行
$ gpio -g mode 18 pwm
$ gpio pwmc 1000
# 点灯
$ gpio -g pwm 18 1023
# 消灯
$ gpio -g pwm 18 0
で動作するように変わってました。
こっちの方が正規のやり方のような気がしてたので、結果オーライですかね。