見出し画像

(5)RaspberryPiとタッチディスプレイで自動起動LocalUIFlowサーバーを作る - 低価格化

概要

現在、LocalUIFlowサーバーを作成するのにかかっている費用は、

Raspberry Pi 4でのLocalUIFlow導入費用

です。このうち、ルーターは80台をさばける能力が必要なので、変更できません。(この能力のあるルーターの中では最安レベル)

値段を下げられるとすれば、Raspberry Pi4を別のものに変えることが考えられます。

上記、Lang-shipさんでは、Raspberry Pi Zero 2 Wでの動作確認がとれているようなので、変更してみます。Lang-shipさんによると、

Raspberry Pi 4であればまずまずの速度で動きますので問題はなさそうでした。そのあとRaspberry Pi Zero 2 Wに同じSDを入れて起動したところ、かなり立ち上がりまで時間がかかりますが実行してしまえば結構快適に動きました。

Lang-ship

とのことです。
なお、手元にあるRaspberry Pi Zero (無印)でもやってみたのですが、LocalUIFlowを起動しようとすると「Segmentation fault」が出て起動できませんでした。メモリ違反(読んじゃいけないメモリの領域を読みにいっている)のようですので、Zero(無印)での起動は諦めたほうがよいかもしれません。

Pi4が¥9,850に対し、Zero2は、¥3,799ですので、ほぼ半額以下です。

また、それに併せてディスプレイも¥3,987のOSSOYO 3.5インチタッチディスプレイから、¥1,868の1.54インチのものを使用しました。Aliexpressで¥1868でした(2024/08/12)。Amazonとかでも同様のものが見つけられます。もとはゲーム用らしく、方向キーの他に、A、B、X、Y、L、R、Start、Selectのボタンがついています。

下にリンクをしておきます

1.3インチのものも流通していますが、zero2での動作を確認できなかったので(実際に買ってやってみたけどダメだった)ので、1.54インチのものをお勧めしておきます。1.3インチはzero(無印)では動くらしい(やってない)。少なくとも1.54インチのものがzero2で動くことは確認しています。

ちなみに、こちらにディスプレイ導入済みのRaspberryPiOSのイメージファイル(img)が置いてあります。これをベースにmicroSDにインストールしてディスプレイを接続すれば映ります。
イメージの再配布の是非については議論が分かれるところのようですが、既に公開されていて使用できるものは使わせてもらおうと思います。

ちなみに、私自身は、LocalUIFlowを導入したもののイメージの配布は考えておりません。ライセンス関係が本当にクリアできてるか、よくわからないので…。フリーで公開されていても、再配布OKとは限らないのが難しい…。
本当は、導入済みイメージの再配布が簡単でいいんですけどね。
導入手順は記載しますので、興味あるかたは、ご自分で行ってください。

また、Zero2には、LANポートがありませんので、microUSBタイプ外付けLANアダプタを別途購入しました。Aliexpressで¥459でした。ここは追加出費になります。

同様に下にリンクしておきます

これ、もしやと思ってZero2Wに標準搭載の無線LANでZoro2Wとルーターとの接続を固定したところ、うまくいきましたので、有線LANケーブルはなくてもいけます。
ディスプレイも削減できないかと思ってますが、動作状態を把握し、いざとなれば操作できる方がいいので、ここは必要経費かと思います。

RaspberryZero2に変更した場合

併せて、だいたい¥7,700くらいの導入費用減です。

導入について

1.ディスプレイ導入済みRaspberry Pi OSイメージの入手

1.54インチディスプレイを導入済みのRspberry Pi OSイメージが公開されているので、ディスプレイの導入そのものは簡単に再現できます。

上記サイトよりRspberry Pi OSのイメージをダウンロードし、Raspberry Pi Imagerで書き込みます。

ダウンロードしたのは真ん中のbuster。bookwormはなぜか動作しませんでした。

この時点で、ディスプレイを接続して起動するとRaspberry Pi OSが起動し、ディスプレイも使用できるようになります。

2.LocalUIFlowの導入+自動起動+マウス操作自動化

基本的には(1)と(3)の内容を再現するだけです。

備忘録としてのnoteの記録が役に立ちました。ただ、おおまかには同じですが、少しだけ変更しています。省ける部分の省略と、Zero2にして能力が低下したことによるパラメータの調整、自動アップデートのダイアログ対応です。

まずはLocalUIFlowの導入。
今回は、ユーザー名を「uiflow」にしました。
パスワードは任意で決めてください。

これで、「/home/uiflow/」が起動時のホームディレクトリ(基準のディレクトリ)になります。

ここから、ターミナルを介してコマンドラインによる操作をするのですが、ディスプレイの大きさが絶望的に小さすぎるので、コマンドラインによる操作は困難を極めます。VNCが標準で有効なので、別パソコンにVNCをインストールし、RaspberryPiと同一ネットワークからVNCで接続するとよいでしょう。

VNCはなんでもいいと思いますが、私は「RealVNC Viewer」を利用しました。(多分、配布イメージを作成するときもVNCで環境構築したのだと思います)

https://www.realvnc.com/en/connect/download/viewer/

かろうじてタッチが効くと思うので、

RaspberryPiOS上のこのアイコンから詳細画面を表示させます。

すると、IPアドレスが表示されますので、操作パソコンのVNCでこのIPに接続します。

RealVNC Viewerから、「File>New connection」

VNC Server欄には、先ほどのIPアドレスを
Nameは任意で分かりやすい名前を入れます(なんでもいいです)。

OKしてできたアイコンを右クリックしてConnect


認証を求められるので、先ほど決めたユーザー名とパスワードでOKします。

これで、操作用のパソコンの画面で操作ができるようになります。
操作用パソコン側でウィンドウの大きさを調整して見やすい大きさにしましょう。

ターミナルを起動し、ホームディレクトリ(/home/uiflow/)直下に
LocalUIFlowのディレクトリを「UIFlow」で(/home/uiflow/UIFlow/)
自動起動スクリプトの保存先を「AutoStart」で(/home/uiflow/AutoStart/)
作成します。

mkdir UIFlow
mkdir AutoStart

そして、LocalUIFlowを取得、展開します。

wget https://static-cdn.m5stack.com/resource/software/UIFlow-Local-Server/UIFlow-Local-Server_Linux_arm.tar.gz
tar zxvf UIFlow-Local-Server_Linux_arm.tar.gz -C UIFlow

(1)では、

sudo apt install ttf-mscorefonts-installer

を入れましたが、今回は省きます。省いても、「LC_ALL=C」で起動が正常にできたので、なくても問題ないことが判明しました。

念のため起動テストをしておきます。

cd UIFlow
 LC_ALL=C ./UIFlow.Server.Desktop

起動できることを確認したら、自動操作の設定に移ります。

まずはxautomationを入れます。

sudo apt-get install xautomation

特にパッケージの不足等を何か言われることもなくインストールは終了しました。

LocalUIFlowのStartボタンのマウス位置を測定します。

xmousepos

返答は

238 261 238 225

でした。

xte 'mousemove 240 260'

で、マウスがボタン上に移動することを確認します。
また、アップデートがあってインターネットに接続している場合、更新するかどうかのダイアログが出るので、そのダイアログの「No」のマウス位置も取得しておきます。

自動操作用シェルスクリプトを書きます。

cd /home/uiflow/AutoRun
nano click.sh

click.shファイルを作ろうとnanoエディタが起動するので、

#!/bin/sh
sleep 25s
xte 'mousemove 280 340'
sleep 1s
xte 'mouseclick 1'
sleep 1s
xte 'mousemove 240 260'
sleep 1s
xte 'mouseclick 1'

と記入して、「Ctrl+x」で終了、保存と上書きを聞かれるので、「y」と「Enter」で終わらせます。

内容としては、25秒待って、アップデートダイアログの「No」位置にマウスを移動、1秒待ってボタンを押す(もしダイアログが出てなかったら空打ちになりますが、問題はありません)、1秒待ってLocalUIFlowの「Start」ボタン位置にマウス移動、1秒待ってボタンを押す、という流れになります。

Raspberry Pi 4に比べてZero2は、性能が低いので、起動まで待つ秒数は多めにとってあります。気になる人は適宜調整してあげてください。

このテキストファイルに実行権限を与えます。

chmod +x click.sh

実際に起動してみます。

./click.sh

固まったように見えるかもしれませんが、25秒待つと、カーソルが動き、実行が終了します。
何かしらエラーが出たら、タイプミスとかを疑ってください。

次に、UIFLowの起動をスクリプトで設定します。
nanoエディタでautorun.shを作成します。

nano autorun.sh

スクリプト内容は以下の通り

#!/bin/sh
 /home/uiflow/AutoRun/click.sh &
 cd /home/uiflow/UIFlow/
 LC_ALL=C ./UIFlow.Server.Desktop

内容は、click.shを実行してすぐさまターミナルに戻り、
UIFlowディレクトリに移ってLocalUIFlowを起動するという内容です。
LocalUIFlow実行に時間がかかるので、25秒後にクリック動作が入ります。

Ctrl+x、y、Enterで上書き終了、実行権限を与えます。

chmod +x autorun.sh

試しに実行してみて、UIFLow起動+自動操作を確認します。

./autorun.sh

これで、autorun.shを実行すれば、UIFLow起動+自動操作が行われるようになります。

最後に、autorun.shを起動時自動実行するように設定します。

まずは、.configディレクトリにautostartディレクトリを作成、移動。

cd /home/uiflow/.config/
mkdir autostart
cd autostart

nanoでautostart.desktopを作成します。

nano autostart.desktop

スクリプト内容は以下の通り

[Desktop Entry]
Exec=lxterminal -e /home/uiflow/AutoRun/autorun.sh
Type=Application 
Name=LocalUIFLow
Terminal=true

Ctrl+x、y、Enterで上書き終了。

最後に、再起動をして、自動起動+自動実行動作を確かめます。

reboot

3.ルーターの設定

基本的には同じですので、(1)の手順4の説明に譲ります。

TP-Linkルーターでしたら、ルーターにRaspberry Pi Zero2を接続したらMACアドレスを認識するので、それをもとにIPアドレスを固定してあげます。

最後に

これで、低価格化の実現となったわけですが、Zero2に変更した都合上処理能力は落ちていると思うので、40人さばけるか問題はやってみないと分かりません。たくさんリクエストが来たときにさばけるかどうかだと思います。
ただ、低価格化と同時にコンパクト化も図れているので、問題なければこっちの方が取り回しは楽だと思います。
心配していた、起動までの時間も、Pi 4と比べてそこまで気になるほどではありませんでした。

何かあったときのために、ここまでの環境のmicroSDのイメージのバックアップをとっておきます。microSDカードを入れたカードリーダーをRaspberryPiに接続し(Zero2だとmicroUSBで接続する必要があります。Pi 4だとUSB Type-Aなので、普通のリーダーが接続できるはず)、アクセサリから「SD Card Copier」を選びます。

FromとToを正しく設定し(ToがMass StorageならだいたいOK)「New Partition UUIDs」にチェックを入れて「Start」

これで複製の完了です。もし何かあったら複製から起動してコピーしなおせばOKです。

この記事が気に入ったらサポートをしてみませんか?