作ってみた!ラズパイガジェット達はこちら

Bluetoothボタンで動作と合成音声の再生

広告
Bluetoothボタン本体 作ってみた

前回の記事の続きです。前回=(Speaker pHAT 単体で音楽再生+Bluetoothボタン制御

100円ショップで売っている300円もするBluetoothボタンを使って、ボタンに機能を割り当てて、その際に喋らせるようにします。

参考

kinnalru/bluebutton
Contribute to bluebutton development by creating an account on GitHub.
わずか300円でIoTボタンを作る方法 - Qiita
# こんなの見つけたよ 100円ショップで物色していたら、こんなものを見つけたよ。100円ショップなのに300円※だったけど、いろいろ遊べそうなので思わず衝動買いしてしまったよ。 (※あとで(

参考サイトではシャットダウンできるようにした記事があります。
今回はこれとは別にボタンを押したら停止、もう一度押したら再生、長押ししたら電源を切るとしてみます。

ちなみに、Bluebuttonというプログラムは、ボタンは2つあるのですけど、別々には拾えないようでして(というか同じ通信?)どちらのボタンを押しても同じ動作になります。ボタンにはAndroidとiOSと記載があるので、それぞれ別に制御できるかと思ったのですけどね。(BluebuttonのGitHubには書いていなかった)

Bluebuttonの設定

前回の記事でBluetoothとのペアリングは出来ていると思います。そこから設定をします。

設定のファイルはホームディレクトリの隠しフォルダ.config内にあります。

sudo nano ~/.config/bluebutton

中身はキーを押した時の検知とそのボタンを離したときの検知、そしてその長押し版の計4つです。

keyup=echo UP
keydown=echo down; echo DOWN
longup=echo LONG UP
longdown=echo LONG DOWN

初期状態(デフォルト)でもターミナルにup、downの文字を表示させるように設定されていますので、まずはこのまま動かしてみましょう。

テストしてみる

Bluetoothボタン本体の電源(スライドスイッチ)を入れてから、検知させるbluebuttonを実行させます。以下のコマンドです。

sudo bluebutton -d="Shutter3" -c ~/.config/bluebutton

押してみると・・・。

一回押すだけで、downとupがセットで表示されます。これが正常です。押して離すので、それぞれが検知できているためです。長押しも同じです。それが確認できればOKです。

先程の通り検知は4通りしかありません。しかし、押して離すで1回なので、実際は1回押すと1回長押しするの2つのパターンしかないのです。これだと再生やら音量やら色々な機能は割り当てできません。
そこで最終的には条件文を書いたPythonプログラムで制御させようと思います。

辞めるには、ターミナルでCtrl+Cで中断させます。

テスト2 ボタンが押されたら喋る

先程の設定ファイルを編集します。

keyup=echo UP
keydown=sh /home/pi/speak.sh && echo DOWN
longup=echo LONG UP
longdown=echo LONG DOWN

keydownにsh /home/pi/speak.sh && echo DOWNと記載しました。
この場合、speak.shという別のシェルスクリプトを容易してそれを割り当てました。

では、そのspeak.shの中身は以下です。

#!/bin/sh
/home/pi/music/jvoice.sh ボタンが押されたよ

女性の声で「ボタンが押されたよ」とするシェルスクリプトです。

このshファイルを別に作成し、やはり実行権を与えておきます。

sudo chmod 755 ./speak.sh

shのあるディレクトリで行うか、絶対パスで指定してください。

絶対パス・・・アドレスをルートから全て記載する方法
/home/pi/sample/zetttai.txt

相対パス・・・起点から見たアドレス
sampleと同じ階層なら、./soutai.txt
sampleより上の階層なら、../soutai.txt

 

speak.shが用意出来たら、再び検知させるbluebuttonを実行します。

sudo bluebutton -d="Shutter3" -c ~/.config/bluebutton

押してみてください。
指定通りspeak.shが実行され、「ボタンが押されたよ」と喋ったら成功です。

テスト3 次の曲へ

今度は、ボタンが押された後、離すタイミングで再生されている曲を次へと送るようにしてみます。

mpcの再生はmpc play 
mpcの停止はmpc stop 
次の曲に送るのはmpc next 

と、その前にmpcで再生できるようにmp3の音楽などを予め転送しておいてください。ディレクトリはmpdで設定したところです。→前回記事 Speaker pHAT 単体で音楽再生+Bluetoothボタン制御

同じようにnext.shを作ります。

#!/bin/sh
command="mpc next"
eval $command

こんな形で良いみたいですね。
そしてこれを同じようにbluebuttonの設定ファイルで編集します。

keyup=sh /home/pi/next.sh && echo UP
keydown=sh /home/pi/speak.sh && echo DOWN
longup=echo LONG UP
longdown=echo LONG DOWN

keyupの箇所をsh /home/pi/next.sh && echo UPにします。

試してみましょう!

まずはmpcをコマンドで再生しておきます。

mpc play

それからbluebuttonを起動します。

sudo bluebutton -d="Shutter3" -c ~/.config/bluebutton

この状態からボタンを1回押してみてください。
少しタイムラグがありますが、「ボタンが押されたよ」と喋った後に次の曲へ送られれば成功です。

ctrl+Cで中断させます。

次は・・・

これだけでは停止もできませんし、電源も切ることができません。長押しの一つしか残っていないからです。
そうなると使い勝手が悪いので、なんとか割り当てるのに、shではなくPythonプログラムで条件分岐させ、それをbluebuttonに割り当てれば状況によって動作が変えられると思います。

ちょっと手探りですけど次の記事でまとめたいと思います。