サラリーの仕事の依頼で掲示板的なデジサイを作れないか?と言われ
ラズパイで構築する事にしてみました。
まだ採用になるか分からないけど、やっぱりラズパイ面白いな と思ったので構築メモです。
目次
FullPageOSをベースにカスタムサイネージを作ります
まずラズパイのOS選定。
デジサイ専用にOSも存在しますが、今回はキオスクが直ぐに使える『FullPageOS』というOSをベースに進めます。
OSのインストールは『rpi-imager』で出来るの、そこの説明は省きます。
OSインストール後の作業
パスワード設定などは省きます。
やったほうが良いです。
はい。
まずはFullPageOSはApacheが走っておりますので、
WWWディレクトリがディスプレイを操作出来るように設定します。
もしかしたら『lighttpd』だったのかも。
データ書き換えて調べるのも面倒だったのでテキトーです。
xhost
$ sudo apt install xdotool $ sudo nano /etc/systemd/system/xhoston.service [Unit] Description=xhostadd [Service] User=pi Environment=DISPLAY=:0 ExecStart=/usr/bin/xhost si:localuser:www-data [Install] WantedBy=user@.service
xhostonという名称のサービスを作ります。
www-dataがxhostを実行できるようにします。
visudo
www-dataが一部のコマンドをパスワード無しで実行できるようにする。
$ sudo visudo //これを追加 www-data ALL=(ALL) NOPASSWD: /sbin/shutdown now, /sbin/reboot, /bin/systemctl start xhoston.service
FullPageOSはシャットダウンや再起動をCLIからやらないといけないので、ブラウザから出来るようにする為の設定。
あと先に作った『xhoston』もwww-dataでスタートさせるので設定。
ちなみにスタートアップで起動するとどうにもタイミングが合わないのか起動しないので、
PHP側でスタートする事にしました。
hostnameを取得するshファイル
$ sudo nano /home/pi/hostname.sh #!/bin/sh _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "IP is %s\n" "$_IP" fi exit 0 $ sudo chmod +x /home/pi/hostname.sh
IPアドレスが分かったほうが良いので、shファイルを設定しておく。
ラズパイから出力した画面にIPが無ければ、WIFI接続出来てない。
raspi-config
$ sudo raspi-config /* locale は ja_JP.UTF-8 timezone は Asia/Tokyo */ Current default time zone: 'Asia/Tokyo' Local time is now: Wed Mar 9 16:46:12 JST 2022. Universal Time is now: Wed Mar 9 07:46:12 UTC 2022. Generating locales (this might take a while)... ja_JP.UTF-8... done Generation complete.
hostnameの変更
$ sudo nano /etc/hosts $ sudo nano /etc/hostname
で好きなhostnameに。
オーディオの設定
Raspberry Pi 4でHDMI経由での音が出なかったので追記。
$ sudo nano /boot/config.txt //追記もしくはコメントを消す hdmi_drive=2
$ sudo nano /boot/cmdline.txt //↓を改行せず追加 snd_bcm2835.enable_headphones=1 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_compat_alsa=1
これでHDMI経由でも音が出ました。
まとめ
あとはwwwディレクトリにPHPを組めばOK。
その際、初回のアクセスで
shell_exec("sudo /bin/systemctl start xhoston.service");
を実行出来るようにします。
あとはラズパイ側の画面を更新したいタイミングに
xdotool を実行すれば良いです。
そんなワケで作った仕組みを簡単にご紹介。
Javascriptを使わずに画面を更新してるので、何も行われない時は負荷はホトンドありません。
外部サーバーも必要無いし、ラズパイなのでコストは結構安いです。
動画ではテキストのみですが、もっと色々出来ます。
普通のデジサイのように組む事も可能ですね。
ではでは