前回の記事の続きです。前回=(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内にあります。
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に割り当てれば状況によって動作が変えられると思います。
ちょっと手探りですけど次の記事でまとめたいと思います。
コメント