フォーラムを開設しました!Raspberry Pi の話題はこちらで!

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

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

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

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

参考

https://github.com/kinnalru/bluebutton

https://qiita.com/vimyum/items/8b7548ca8cf45383c5b0

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

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

Bluebuttonの設定

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

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

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

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

テストしてみる

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

押してみると・・・。

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

テスト3 次の曲へ

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

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

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

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

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

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

試してみましょう!

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

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

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

ctrl+Cで中断させます。

次は・・・

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

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

 

フォーラムでお待ちしています!

CTA-IMAGE 記事を読んでご指摘をはじめ、質問などございましたらフォーラムにご記入ください。(スマホなどMobile環境では利用できません)
話題は何でも構いません。Raspberry Pi の情報交換ができたら私も勉強になります!よろしくお願いいたします。

作ってみたカテゴリの最新記事