30
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Raspberry Piを使ったしゃべるKiosk端末の作り方

概要

Raspberry PiのWeb Browser(Midori)をFullscreenで起動してKiosk端末化しました。時計盤はFlipClock.jsを改造して利用しています。いわゆるLAP(Linux/Apache/PHP)環境です。電源とHDMIとLANのケーブルが刺さっています。OSはRaspbian jessieを使いました。

fullhd-calendar-oden.jpg

用意する物

  • Raspberry Pi (今回は 1 Model B を使用)
  • SDカード8GB
  • フルHDディスプレイ
  • USBキーボード
  • 電源ケーブル
  • HDMIケーブル
  • LANケーブル

OSのインストールと設定

OSはRaspbian jessieを使いました。公式サイトからRASPBIAN JESSIEをダウンロードして、installation guideに従って、SDカードを作成しました。

Raspberry PiにSDカードを差し込み、ディスプレイやキーボードやLANケーブルを接続して、電源をONすれば起動するはずです。

初期設定

起動したら、Ctrl-Alt-F1でtty1(ターミナル画面)へ。

raspi-config

$ sudo raspi-config
  1. ファイルシステムの容量の拡張
  2. タイムゾーン/キーボードの設定
  3. ホスト名の変更
  4. rootパスワードの変更

IP固定

$ sudo vi /etc/dhcpcd.conf
/etc/dhcpcd.conf
...
interface eth0
static ip_address=192.168.0.39/24
static routers=192.168.0.1
static domain_name_servers=8.8.8.8

接続テストする。

$ ping example.com

アップデート

$ sudo apt-get update
$ sudo apt-get upgrade

しばらく時間がかかる。

ログインユーザーの変更

今回の場合では、ユーザーpiから新規ユーザーodenに変更した。

$ sudo adduser oden
$ sudo usermod -aG adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio oden
$ sudo visudo
$ sudo vi /etc/systemd/system/autologin@.service 
$ sudo vi /etc/lightdm/lightdm.conf
$ sudo userdel -r pi

アプリケーションのインストールと設定

インストールしたアプリケーションは次の通りです。

  • apache2
  • php5
  • samba
  • midori
  • fonts-ipaexfont
  • unclutter
  • xautomation
  • open-jtalk
  • open-jtalk-mecab-naist-jdic
  • htsengine
  • libhtsengine-dev
  • hts-voice-nitech-jp-atr503-m001

一度ににインストールするなら

$ sudo apt-get install apache2 php5 samba midori fonts-ipaexfont unclutter xautomation open-jtalk open-jtalk-mecab-naist-jdic htsengine libhtsengine-dev hts-voice-nitech-jp-atr503-m001

しばらく時間がかかる。

apache2/php5のインストールと設定

$ sudo apt-get install apache2 php5
$ sudo chmod 777 /var/www/html
$ sudo vi /etc/apache2/envvars
/etc/apache2/envvars
...
#export APACHE_RUN_USER=www-data
export APACHE_RUN_USER=oden
#export APACHE_RUN_GROUP=www-data
export APACHE_RUN_GROUP=oden
...

Apache/PHPを介して、ディスプレイのオン/オフや音量調節やOpen JTalkにしゃべらせてみる為に、起動するユーザーをwww-dataから普通のユーザーodenに変更しました。

sambaのインストールと設定

$ sudo apt-get install samba
$ sudo vi /etc/samba/smb.conf
/etc/samba/smb.conf
...
[www]
   comment = Home Directories
   browseable = yes
   read only = no
   path = /var/www/html
   force user = oden
   create mask = 0775
   directory mask = 0775
   valid users = oden
...

画面上に表示したいファイルをsambaを介して変更できるようにしました。

Kiosk端末化

$ sudo apt-get install midori fonts-ipaexfont unclutter xautomation
$ vi ~/.config/lxsession/LXDE-pi/autostart
~/.config/lxsession/LXDE-pi/autostart
#@lxpanel --profile LXDE-pi
#@pcmanfm --desktop --profile LXDE-pi
#@xscreensaver -no-splash
@xset dpms 0 0 0
@xset s 0
@midori -e Fullscreen -a http://localhost/

画面のリロード

シェル

$ xte -x :0 'key F5'

PHP

/var/www/html/api/reload.php
<?php
header('Content-type: text/plain; charset=utf-8');
system("sleep 5; xte -x :0 'key F5'; echo \$?");

画面のオン/オフと音量調節

シェル

$ amixer -c 0 sset PCM 50% #音量
$ tvservice -o #画面オフ
$ tvservice -p; sleep 1; xset -display :0 dpms force on #画面オン

PHP

/var/www/html/api/av.php
<?php
header('Content-type: text/plain; charset=utf-8');

if(isset($_GET['a'])) {
  $a = intval($_GET['a']);
  if ($a > 100) $a = 100;
  if ($a < 10) $a = 10;
  $a = (log10($a) - 1)*100;
  system("amixer -c 0 sset PCM $a%");
}

if(isset($_GET['v'])) {
  $v = $_GET['v'];
  if ($v === "off") {
    system("tvservice -o");
  }
  if ($v === "on") {
    system("tvservice -p; sleep 1; xset -display :0 dpms force on");
  }
  system("xset -display :0 -q");
}

Open JTalkのインストールと設定

$ sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic htsengine libhtsengine-dev hts-voice-nitech-jp-atr503-m001

しゃべらせてみる

Meiちゃんをコマンドjsay [しゃべらせたい言葉]でしゃべらせてみたい。

$ sudo mkdir /usr/local/share/hts_voice/mei/
$ sudo cp [ここにmei_normal.htsvoiceのパスを記入] /usr/local/share/hts_voice/mei/
$ sudo touch /usr/local/bin/jsay
$ sudo vi /usr/local/bin/jsay
$ sudo chmod +x /usr/local/bin/jsay
/usr/local/bin/jsay
#!/bin/sh

CMDNAME=`basename $0`
if [ $# -lt 1 ]; then
    echo "Usage: ${CMDNAME} [ text ]" 1>&2
    exit 1
fi

TMPFILE=`mktemp /tmp/tmp.XXXXXX.wav`
DIC=/var/lib/mecab/dic/open-jtalk/naist-jdic/
VOICE=/usr/local/share/hts_voice/mei/mei_normal.htsvoice

echo "$1" | open_jtalk \
-x ${DIC} \
-m ${VOICE} \
-ow ${TMPFILE} && \

aplay --quiet ${TMPFILE}
rm -f ${TMPFILE}

exit 0

シェル

$ jsay ぽぽぽぽーん

PHP

/var/www/html/api/jsay.php
<?php
if(isset($_GET['q'])) {
  $q = $_GET['q'];
  $q = str_replace("'", "\"", $q);
  $q = mb_strimwidth($q, 0, 512, " 以下省略");
  header('Content-type: text/plain; charset=utf-8');
  system("jsay '$q'");
}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
30
Help us understand the problem. What are the problem?