■はじめに
心が疲れることはありませんか?(私はあります)
そんなときこそ誰かがそばにいてほしいと思いませんか?(私にはいません)
手元にあるのはラズパイ3とスマホ・・・
これを使って荒んだ心を慰めてみたいと思います。
■イメージ
■準備したもの
部品 | 個数 |
---|---|
Raspberry Pi 3 Model B+ | 1個 |
ブレッドボード | 1個 |
ジャンプワイヤ(オス-オス) | 2本 |
ジャンプワイヤ(オス-メス) | 2本 |
押しボタンスイッチ | 1個 |
Lineが入っているスマホ | 1個 |
■押しボタン側の構成
押しボタン側はRaspberryPiのGPIOピンによる電気回路を利用します。
(といっても、LEDや抵抗器は使わず、オームの法則すら考えません)
Raspberry GPIOの3.3V電圧源ピンを出力とし、26Pinを入力とします。その間に押しボタンスイッチを設け、「押していない=遮断されている=26Pin入力値0」「押している=導通している=26Pin入力値1」、として入力判断します。
・Raspberry PI3 GPIOピン
https://www.raspberrypi.org/documentation/usage/gpio/README.md
#適当なスイッチが無かったので、導線とスイッチをテープで繋いでいます。
■GPIO側の構成
Bashにて、gpioピンの状態は簡単に確認できます。
・gpio 26ピンを入力として利用
gpio -g mode 26 in
・gpio 26ピンの状態を確認 → 結果が0だと遮断、1だと導通
gpio -g read 26
pi@raspberrypi:~test $ bash gpio -g read 26
1
pi@raspberrypi:
■音声出力の構成
Open JTalkとaplayを利用し、文字列を読み上げてもらいます。
①日本語文字列がある
②JTalkが文字列を音声ファイル化
③aplayが音声ファイルを再生
④スピーカーから音が聞こえる
詳細は以下記事にて。
・Raspberry Pi3に日本語で喋ってもらうまで
・JTalkの音声変換と音声出力をシェルで一気にやる(ラズパイ用)
■Line notifyの構成
Line notifyを利用します。
1ライナーでLine通知が出来るので非常に便利だなと思いました(小並感)。
①Lineに自分だけのグループを作成する
②Line notify登録 ※アクセストークンを入手
③自分だけのグループにLine notify(Line公式アカウント)を招待&自動参加
④bashから適当なメッセージをPOST
curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" -F "message=MESSAGE" https://notify-api.line.me/api/notify
以下記事を参考。
・【LINE】知ってる? 自分1人だけのグループトークの使い道と作り方
・[超簡単]LINE notify を使ってみる
・LINE Notify 簡単なシェルスクリプトで試してみた
■シェルスクリプト本体
①RaspberryPiのGPIO入力を検知
②音声用文字列を取得
③音声用文字列から音声を出力
④LineにメッセージをPOST
どうしたの?大丈夫?
つらかったね。大変だったね
今まで、がんばってきたんだね
大丈夫だよ。心配ないさ
いつもそばにいるよ
いつでも話聞くよ
大切なことの相談相手に選んでくれてありがとう
明日はきっとよくなるよ
# !/bin/bash
lp=10 #ループ変数
row=0 #音声用テキストファイル行数
wordfile=./voice_text.txt #音声用テキストファイル
gpstat=0 #gpio入力状態
# gpio 26pinを入力インターフェース化
gpio -g mode 26 in
# 無限ループ
for((i=0;i<$lp;i));do
#gpio 26pinを入力の入力状態確認(導通=1,遮断=0)
gpstat=`gpio -g read 26`
if [ $gpstat = 1 ]; then
#音声テキストファイルの行数を取得し、行番号をランダムで選択
row=`cat voice_text.txt| wc -l`
rand=$(($RANDOM % "$row" + 1))
#音声テキストファイルの行番号の内容を音声化
/usr/jtalk/JtalkFromArg.sh `sed -n "$rand"p $wordfile`
#Line notify連携
ACCESS_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
MSG='大丈夫?無理しないで。 https://www.inochinodenwa.org/'
curl -sS -X POST -H "Authorization: Bearer $ACCESS_TOKEN" -F "message=$MSG" https://notify-api.line.me/api/notify
sleep 0.9
fi
sleep 0.1
done
#無限ループのため、終了時はctrl + c
で停止しています。
root@raspberrypi:/usr/jtalk# cat ./JtalkFromArg.sh
# !/bin/sh
### Making WAV File from Command Line Argument
### and speaking with aplay command
# TempWAVFile
TMP=/tmp/jtalkTmp.wav
if [ $# -ne 1 ]; then
echo "Error: argument not exist"
exit 1
fi
echo "$1" | open_jtalk \
-m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic/ \
-ow $TMP \
chmod 777 $TMP
aplay --quiet $TMP
exit 0
# EOF
JtalkFromArg.sh の詳細は以下で。
JTalkの音声変換と音声出力をシェルで一気にやる(ラズパイ用)
■結果
ラズパイ >> タイセツナコトノ ソウダンアイテニ エランデクレテ アリガトウ(野太い男性声)
精神的負荷がやっべぇ
二度と押さねぇ
■出典/参考
[Raspberry]GPIO
https://www.raspberrypi.org/documentation/usage/gpio/README.md
fritzing
http://fritzing.org/download/
「Raspberry Pi3 Model B」で遊んでみよう!Part2
https://pc.watch.impress.co.jp/docs/column/nishikawa/1006048.html
Raspberry Pi3に日本語で喋ってもらうまで
https://qiita.com/Higemal/items/6dde8637a680bfe200ca
JTalkの音声変換と音声出力をシェルで一気にやる(ラズパイ用)
https://qiita.com/Higemal/items/aacaa30588ebd2fceb1f
【LINE】知ってる? 自分1人だけのグループトークの使い道と作り方
https://appllio.com/line-lonely-group
[超簡単]LINE notify を使ってみる
https://qiita.com/iitenkida7/items/576a8226ba6584864d95
LINE Notify 簡単なシェルスクリプトで試してみた
https://qiita.com/tbuchi888/items/f014f809a7e9f649d270
大切な人を励ますシンプルな8つの言葉
https://shigotonomirai.com/cheer-up-words