LoginSignup
26
29

More than 5 years have passed since last update.

[Raspberry Pi] 特定の時刻にラズパイに喋らせてみる

Last updated at Posted at 2016-08-16

目的

唐突ですが、僕はスイッチをオンにするとライトが点灯する電源タップを使っています。
僕の母親はどうもこの電源タップのライトの消費電力が気になるらしく、ライトを消すためにスイッチをオフにしてしまいます。
「消さないで!」とお願いしていても消されます。
デスクトップPCやラズパイの電源を落とされると困るのでどうしようかと考えた結果、

常にラズパイに「電源タップのスイッチを消さないで!」と喋らせよう!

となりました。その場で「電源タップのスイッチを消すな!」と言われて消す人はいないでしょう。
ラズパイを使ういい機会にもなるので、この方法で決まりです。

方法

AquesTalk Piのダウンロード

ラズパイ上で音声合成といえば、「Open JTalk」や「AquesTalk Pi」があるそうです。
今回は、「AquesTalk Pi」を使うことにします。

まず、http://www.a-quest.com/products/aquestalkpi.html から「AquesTalk Pi」をダウンロードしましょう。

ダウンロードが終われば、ホームディレクトリに展開します。

AquesTalk Piの使い方

ここからは、コマンドラインの作業になります。

まず、普通に喋らせたいときには、以下のようにします。

$ ~/aquestalkpi/./AquesTalkPi "電源タップのスイッチを消さないで!" | aplay

別にこのまま実行してもいいんですが、少し長いのでシェルスクリプトを書いてみます。
保存場所はaquestalkpiディレクトリ内です。

call_ban_off_power.sh
#!/bin/bash

echo "電源タップのスイッチを消さないで!" | ~/aquestalkpi/./AquesTalkPi -f -| aplay

権限を変更します。

$ chmod 755 ~/aquestalkpi/call_ban_off_power.sh

実行する

$ ~/aquestalkpi/./call_ban_off_power.sh

このままでは自分でコマンドを打たないといけません。
そこで自動で処理を行うために、cronを使います。

cron

参考サイト: Make. 何か作りたいモノづくりサイト-決まった時間に処理する

上記の参考サイトを見ればある程度わかると思います。

まず、以下のコマンドでcronの設定を編集します。

$ crontab -e

このとき、僕はデフォルトでnanoが起動しました。
vimに変更したかったので一旦終了し、以下のコマンドを入力。

$ select-editor

vimを使いたいので3を入力しました。

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny

Choose 1-4 [2]: 3

そして、再度cronの設定を編集します。

$ crontab -e
cron
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command

cronは標準では分刻みの設定しかできません。
秒刻みの処理を行いときは時間は指定せず、コマンドを指定する場所でsleepを使い処理を書きます。

末尾に以下を追記します。

* * * * * for i in `seq 0 10 59`;do (sleep ${i}; ~/aquestalkpi/./call_ban_off_power) & done;

編集を終了し、1分ほど待つと、「電源タップのスイッチを消さないで!」と10秒間隔でラズパイが喋り出し始めるはずです!

ラズパイ時報

「電源タップのスイッチを消さないで!」と言わなければいけない状況はレアケースだと思うので、もっと役に立ちそうなものをラズパイに言わせたい。
例えば、現在の時刻を言わせたいときは、以下のコマンドを入力。

$ echo "`date +%k`時`date +%-M`分になりました。" | ~/aquestalkpi/./AquesTalkPi -f -| aplay

先ほどと同様シェルスクリプトにしてしまいましょう。
権限の変更を忘れないように。

call_now_time.sh
#!/bin/bash

echo "`date +%k`時`date +%-M`分になりました。" | ~/aquestalkpi/./AquesTalkPi -f -| aplay

cronの設定にも以下を追記します

*/30 * * * * ~/aquestalkpi/./call_now_time.sh
26
29
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
29