2020年6月21日日曜日

Raspberry Pi 2BとScratch 3でデジタルサイネージ(シャットダウンスイッチをつける)

前回の続きです。まず、Raspberry Piは、defaultでマウス操作などをしない状態で10分程度でモニタがブランク画面になる(スクリーンを守るための仕様)ようになっています。デジタルサイネージとして使うのですから、当然マウスもキーボードも使いません。(と言うより抜いてしまいます)その場しのぎの方法としては、ターミナルを開いて以下のコマンドを走らせることでブランク画面になることを回避することができます。

$ sudo xset s off
$ sudo xset -dpms
$ sudo xset s noblank

より本格的な方法としては、XScreenSaverを使うと良いようです。まずはインストール作業から。

$ sudo apt install xscreensaver

インストールが終わったら、Raspberryメニューから「設定」をたどっていくと「スクリーンセーバー」の項目が現れます。これをクリックして、「表示モード」タグ内の「モード:」から「セーバーを無効にする」を選びます。これで再起動すればモニタがブランクになることはなくなります。ここまでは、まだ序の口。

続いて本題のシャットダウンスイッチを設定します。ここからはGPIOの出番です。今回は、pythonでプログラムを書いて、自作PCのテストで使われる電源/リセットのスイッチを挿してシャットダウンスイッチとして動作させます。GPIOの状態は、ターミナルから「gpio readall」コマンドで確認することができます。GPIOの番号は「BCM」の欄を見るようです。
#詳しくは、クラゲのIoTクイックレシピの「RaspberryPiでLチカ」を参考にしました。

以降は、「ラズパイでシャットダウンボタンを付ける(ついでに起動ボタン)」を参考に、GPIOの設定をしてプログラムを動かします。GPIOの23番を選んで設定をしていきます。すぐ隣にGND(0V)があるからです。スイッチのON/OFFを検知させるためには、23番をinからupに設定を変更する必要があります。試しに以下のコマンドで動作確認をしてみました。

$ gpio -g mode 23 up

これで、23番(16)と隣のGND(14)をスイッチでつなぐと、ONで0、OFFで1が出てくるようになります。(「gpio -g read 23」で確かめられます)これで、ハードウエアの動作確認は終了です。

続いてpythonでプログラムを書きます。とはいえ、先達が作ってくれているものがありますので、ありがたく拝借いたします。下準備として、/home/pi/の下に、pyhomeというフォルダを作って、その中にshutdownd.pyというテキストファイルを作ります。中身は、以下のとおりです。

#!/usr/bin/python
# coding:utf-8
import time
import RPi.GPIO as GPIO
import os
pinnumber=23
GPIO.setmode(GPIO.BCM)
#GPIO23pinを入力モードにして、pull up設定にします
GPIO.setup(pinnumber,GPIO.IN,pull_up_down=GPIO.PUD_UP)
while True:
GPIO.wait_for_edge(pinnumber, GPIO.FALLING)
sw_counter = 0
while True:
sw_status = GPIO.input(pinnumber)
if sw_status == 0:
sw_counter = sw_counter + 1
if sw_counter >= 50:
print("長押し検知!")
os.system("sudo shutdown -h now")
break
else:
print("短押し検知")
break
time.sleep(0.01)
print(sw_counter)

#「shutdown -h now」が煩わしいので「halt」を使おうと思ってやってみましたが、うまくいきませんでした。

pyファイルの中身が出来上がったら保存して、以下のコマンドで権限を設定します。

$ sudo chmod 755 shutdownd.py

次に、/usr/lib/systemd/system/の下に、shutdownbuttond.serviceというサービスファイルを作ります。今回は、スクリーンエディタのnanoを利用することにします。
#nanoの使い方は、ゆたりんブログの「[ソフト] nano(テキストエディタ)の基本的な使い方」を参考にしました。

$ sudo nano /usr/lib/systemd/system/shutdownbuttond.service

中身は、以下のように書きます。

[Unit]
Description=Shutdown Daemon
[Service]
ExecStart =/home/pi/pyhome/shutdownd.py
Restart=always
Type=simple
[Install]
WantedBy=multi-user.target

これを保存して、次のコマンドを使ってバックグラウンドで動かします。

$ sudo systemctl enable shutdownbuttond.service
$ sudo systemctl daemon-reload

これでシャットダウンスイッチが使えるようになるはずですが、「systemctl status shutdownbuttond.service」コマンドで確かめたところ、どうもうまく動いていない感じだったので、「reboot」コマンドで再起動してみました。すると、無事に動作するようになりました。これで、Scratch 3が動いている状態からでもスイッチひとつでシャットダウンまでできるようになりました。残りの課題は、Scratch 3を自動起動させることです。

0 件のコメント: