2020年6月28日日曜日

Raspberry Pi 4Bを使ってみる

コロナ禍の影響もあってか、品薄状態かなと感じていたRaspberry Pi 4Bでしたが、緊急事態宣言が解除された頃には少々値段が安くなっていたので思わず衝動買してしまいました。メモリー4GBモデル単体と、別売りの電源、ヒートシンク、ケース(ファン付き)のセットを一緒に購入。合わせて8千円程度の出費で入手できました。

はじめに、ヒートシンクを取り付けて、ケース(アクリル板が層になっているタイプ)の中に組み込むように組み立てていきました。説明書はなかったのでAmazonの商品ページにあった組み立て手順らしき画像を見ながら作業をしました。最後の1枚には、ファンを取り付けてGPIOの4番(5V)と6番(GND)に電源をつないでケース自体のビス止めをしました。

続いて、起動SDカードを準備します。今までは、NOOBSを使って起動SDカードを作っていましたが、今回は、Raspberry Pi Imagerを使って起動SDカードを作ることにしました。Macで作業をしているため、ダウンロードサイトからRaspberry Pi ImagerのMac版をダウンロードして使いました。ダウンロード後、ディスクイメージファイル(Imager.dmg)を開いて、Raspberry Pi Imagerをアプリケーションフォルダにドラッグ&ドロップします。使い方は簡単で、はじめにSDカード(SDFormatterでフォーマット済み)を挿入してRaspberry Pi Imagerをダブルクリックで起動します。Operating Systemの「CHOOSE OS」をクリックして「Raspberry Pi OS(32-bit)」を選び、SD Cardの「CHOOSE SD CARD」をクリックして挿入しておいたSDカードを選択します。最後に、「WRITE」をクリックして待ちます。(少々時間はかかります)出来上がった起動SDカードをRaspberry Pi 4Bに挿して起動します。ここまで、とても順調にできました。

RPi 4Bを起動すると、いつもの通り各種設定の後にアップデート作業を行います。これも時間はかかりますが、最新の状態にしておくことが重要です。一通りの作業が終わってインストールされているものを確認すると、FullバージョンのNOOBSを使ったときより、かなり限定されたものしか入っていないことがわかりました。ソフトウエアのインストールは、Raspberryメニューの「設定」から「Add / Remove Software」か「Recommended Software」を選んで行います。はじめに、「Recommended Software」から定番のものをインストールして、足りないものは「Add / Remove Software」で探してインストールすることにしました。

〈Recommended Softwareで入れたもの〉

〈Add / Remove Softwareで入れたもの〉

はじめの設定の中でロケールを「Japan」としたためか、Fcitx-Mozcは自動的に入っていました。日本語表示や入力に問題はありません。アプリケーションソフトの動作や日本語化もかなり良いと思います。CUPSを入れたので、共有プリンタでの印刷も問題なくできました。

Scratchは、オンライン版(Chromiumを使用)を含めて3バージョンとも快適に動きました。オフライン版の2と3は、日本語入力も問題なし。普通のPCにLinuxを入れて普段遣いをしている感覚では、全く問題はありません。

タスクマネージャで確認すると、CPUやメモリの使用率もかなり低く、タスクバー(LXPanel)にCPU温度を表示させて測ると、待機状態で40度を超えない程度。少し動かしても50度を超えない程度くらいまでしか上がりませんでした。快適と言っていい感じです。

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を自動起動させることです。

2020年6月18日木曜日

Raspberry Pi 2BとScratch 3でデジタルサイネージに挑戦

今の職場にも屋上に太陽光発電システムが導入されていて、その発電状況をモニタリングするための液晶モニタが校内に設置されています。これを使って学校の様々な活動を紹介するスライドショーのようなことができないかということになりました。

この液晶モニタにはDVDプレーヤーがつながっていて、写真をCD-Rに焼いて再生すると液晶モニタに表示されるというシステムになっています。これを使うのが一番手っ取り早いのは間違いないのですが、全く面白くない。今の職場の環境ではデータの持ち出しが厳しく制限されているため、CD-Rに焼くまでの手順が尋常じゃないほど面倒くさいのです。しかも、ミスを修正したり部分的に更新したりすることが容易ではなく、その度に新しいCD-Rに焼く作業をしなければなりません。これでは、効率が悪い上にエコでもない。

幸いなことに、DVDプレーヤーはアナログ3ピン(赤、白、黄)で接続されていて、液晶モニタのHDMI入力が2つもあまっていました。しかも、HDMIケーブルが挿さったまま何にもつながっていません。さらに、液晶モニタの近くには電源も引かれているからまさにおあつらえ向きです。早速、Raspberry PiScratchでデジタルサイネージを作ってみることにしました。

まずは、表示するものを作ります。Scratch 1.4を使ってご当地キャラクターの動きに合わせて背景の写真が切り替わるという簡単なプログラムを作りました。しかし、出来上がったものを作業をしていたPC画面で確認すると、写真の解像度がイマイチで、かなり画像が荒くなってしまうことが判明しました。これでは、大型の液晶モニタには耐えられないだろうと判断。Scratch 3を使う計画に切り替えました。
Raspberry Pi BlogScratch 3 Desktop for Raspbian on Raspberry Piを参考にさせていただきましたが、結論から言うと、最新のRaspbian(Raspberry Pi OS)を使えばScratch 3も一緒にインストールされていることがわかりました。

(1) Raspbian Buster以降のOSを使うことと、(2) 1GB以上のメモリを載せていることが最低条件らしいので、自宅にある各世代のRPiの中からRPi 2Bをチョイスしました。そして、使い慣れたNOOBSをダウンロードして、解凍したファイル&フォルダを在庫していた16GBのSDカードにコピーして起動SDカードを作りました。SDカードは、事前にSDFormatterで初期化しておくことをお勧めします。
#RPi 2Bは、3B以降のようなWireless LANやBluetoothは搭載されておらず、消費電力も抑えられるので割り切った使い方をするのにはちょうどよいと思っています。

NOOBSを入れたSDカードをRPi 2Bに挿して起動すると、Raspbianのデスクトップが表示されて無事に起動することができました。ちなみに、現在推奨されている方法は、Raspberry Pi Imagerを使う方法のようです。最近購入したRPi 4Bのセットアップをするときには、こちらを使おうと思います。

セットアップとアップデート作業(少々時間がかかる)が終わったら、インストールされていたScratch 3 Desktopを使ってデジタルサイネージプログラムの動作確認です。(ついでに、日本語入力環境「fcitx-mozc」もインストール済みでした)実際に動かしてみると、液晶モニタがワイドサイズだったためか、表示画面が小さくて見にくいことがわかりました。せめてタスクバーを隠してその分だけ画面を広くしようと考えて、タスクバー上で右クリックをして、出てきたプルダウンメニューから「パネルの設定」を選んでタスクバーを隠す設定にしました。(「高度な設定」タグの中に「自動的に隠す」という項目があるので、「使わないときはパネルを最小化する」にチェックを入れたら完了です)

なかなかの仕上がりになりました。今後の課題としては、電源を入れるだけでScratch 3まで起動することと、シャットダウンボタンを設置することです。時間を見つけてやってみます。

【追記】シャットダウンスイッチの設定をしました。(2020.6.21)
Raspberry Pi 2BとScratch 3でデジタルサイネージ(シャットダウンスイッチをつける)