こんにちは、ゆうかりです。
今回は、ウチのラズパイさんのIoTな使い方的なものを紹介します。
なお、センサーやIR制御などは、ウチでは、ESP32ベースで組んじゃってるので、IoTハードウェア的なお話ではありません。
「データ表示とかどうしましょう」案件です。
Raspberry Piと映像
ラズパイさんは、映像出力を持っています。
特に最近のは、複数画面に対応してたり、4Kに対応してたりと、割とリッチです。
が、センサー用途などに使われる場合、往々にして映像出力は使われません。
割と勿体ない気がするので、リッチなデータモニターとして使えるキッティングを紹介したいと思います。
全画面Webブラウザ
・・・を、割と最低限な構成で。
「電源を入れたら、特定のサイトを全画面に表示する」系の自動実行が、ラズパイには合っていると思います。
なので、そんな風にキッティングしていきましょうか。
キッティング
前提条件
・Raspberry Pi OS LiteをMicroSDカードに展開してあること
・管理者ユーザーを設定、ネットワークに接続し、SSH接続を有効化、SSHで接続していること
作戦
まあ、ざっくり以下な感じです。
・自動ログイン用ユーザーを作成、設定
・X11を、全画面表示専用なウインドウマネージャで起動
・chromiumを自動起動に最適化して実行
キッティングスクリプト
コイツをsudo suした状態でSSH端末から流し込んであげれば、次回起動時に「elchika.com」が表示されるはずっ!。
kitting.sh
## install package
apt update -y
apt upgrade -y
apt install -y xserver-xorg xinit matchbox-window-manager x11-apps x11-xserver-utils xfonts-75dpi xterm unclutter
apt install -y chromium
## setup user
adduser player --disabled-password << EOF
Y
EOF
## set monitor config
cat <<EOF > /usr/share/X11/xorg.conf.d/10-monitor.conf
Section "ServerFlags"
Option "StandbyTime" "0"
Option "SuspendTime" "0"
Option "OffTime" "0"
Option "BlankTime" "0"
EndSection
EOF
## auto login
mkdir /etc/systemd/system/getty@tty1.service.d
cat <<EOF > /etc/systemd/system/getty@tty1.service.d/override.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin player --noclear %I 38400 linux
EOF
systemctl daemon-reload
## auto start x window
cp -f /etc/skel/.profile /home/player/.profile
cat <<EOF >> /home/player/.profile
if [ -z "\$DISPLAY" ] && [ \$(tty) = /dev/tty1 ]; then
exec startx -- -nocursor
fi
EOF
chown player:player /home/player/.profile
chmod 644 /home/player/.profile
## auto start player
cat <<EOF > /home/player/.xsessionrc
#!/bin/sh
/usr/bin/xsetroot -solid grey10 &
/bin/sleep 2
/home/player/startPlayer.sh &
EOF
chown player:player /home/player/.xsessionrc
chmod 755 /home/player/.xsessionrc
cat <<EOF > /home/player/.xinitrc
#!/bin/sh
sh ./.xsessionrc
matchbox-window-manager
EOF
chown player:player /home/player/.xinitrc
chmod 664 /home/player/.xinitrc
## start chromium
cat <<EOF > /home/player/startPlayer.sh
#!/bin/sh
chromecount=`ps -ef |grep chromium |grep -v grep |wc -l `
if [ $chromecount = 0 ] ; then
if [ -e /home/player/chromeuserdata/Local\ State ]; then
if grep -q "\"exited_cleanly\":true" /home/player/chromeuserdata/Local\ State; then
:
else
rm -rf /home/player/chromeuserdata
fi
else
rm -rf /home/player/chromeuserdata
fi
chromium --window-size=1920,1080 --window-pos=0,0 --enable-frame-rate-limit=60 --disable-gpu-vsync --disable-dev-tools --no-first-run --no-default-browser-check --allow-running-insecure-content --disable-crash-reporter --disable-software-rasterizer --disable-extension --disable-background-mode --disable-web-security --user-data-dir="/home/player/chromeuserdata" --unlimited-quota-for-files --unlimited-storage --disable-permissions-api --noerrdialogs --allow-file-access-from-files --disable-popup-blocking --disable-features=PreloadMediaEngagementData,AutoplayIgnoreWebAudio,MediaEngagementBypassAutoplayPolicies --autoplay-policy=no-user-gesture-required --simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT' --kiosk --app=https://www.elchika.com/ --enable-logging=stderr --v=0 &>> /dev/null
fi
/bin/sleep 30
./startPlayer.sh &
EOF
chown player:player /home/player/startPlayer.sh
chmod 755 /home/player/startPlayer.sh
キッティングスクリプトの簡単な説明
install package
X11、及び「matchbox-window-manager」という全画面専用なウインドウマネージャーをインストールしてます。
あとchromium。
setup user
「player」という名前のユーザーを、自動起動用に作成しています。
set monitor config
ラズパイ標準だと、10分くらいで画面がスリープしてしまいます。
そんなスリープ設定を無効化するおまじない。
auto login
systemdでtty1をフックし、自動的にログインする感じ。
auto start x window
ユーザーがログインした際、tty1からの場合は、自動的にX11を起動せよ、て感じの仕込みです。
auto start player
ウインドウマネージャー設定、及びchromium起動用スクリプトの呼び出し回りです。
start chromium
chromiumを起動するためのスクリプトです。
なんか事故ってchromiumが落ちた場合、自動的にchromiumを再起動します。
また、chromiumのプロファイルが壊れてそうな場合は初期化します。
chromiumの起動オプションは、ぐぐって頂ければ分かるかと。
ユーザー確認系や音声設定、初期設定、開発ツールなど、要らなそうな要素を飛ばす設定を入れています。
「--app=https://www.elchika.com/」の部分を書き換えると、任意のWebサイトを表示できます。
例えば、、、同じラズパイにセットアップしたapacheのサイトを「--app=http://localhost/」で呼んだり、ね!。
また、/dev/nullに捨てている出力は、ログファイルなどに書き換えることで、chromiumのコンソール出力をロギングすることができます。
デバッグなどにどうぞ!。
作業場での使い方
例えば、、、
・ESP32+IRレシーバーでリモコンコードを受け取る
・ラズパイへJSONを送信
・ラズパイは貰ったJSONをapache経由で公開
・chromium上でajax非同期でJSON読み込み、処理実行
を実装することで、「リモコン対応Web画面」を作ったりしています。
また、HEMS画面を拡大してテレビに表示とか、やらかしたりしてたり・・・。
これは元々720P固定なパナソニックのaiseg画面を拡大し、Raspberry pi 5を使ってテレビに表示している、やーつです。
たのしんでくださいな
・・・まあこれ、普通にデジタルサイネージなプレイヤーとして使える設定だったりします・・・。
もし余ってるモニターがあって、それがセンサー扱いのラズパイの近くにあるなら、試してみてくださいなっ!。
以上です。
投稿者の人気記事
-
eucaly
さんが
2024/10/25
に
編集
をしました。
(メッセージ: 初版)
ログインしてコメントを投稿する