Amazonのアソシエイトとして、ラズパイダ(raspida.com)は適格販売により収入を得ています。詳しくは当サイトの プライバシーポリシーをご覧ください。

前回、Speaker pHAT 単体で音楽再生+Bluetoothボタン制御の続きです。 100円ショップで売っている300円もするBluetoothボタンを使って、ボタンに機能を割り当てて、その際に喋らせるようにします。 参考サイトにシャットダウンできるようにした記事があります。今回はこれとは別に、ボタンを押したら停止、もう一度押したら再生、長押ししたら電源を切るとしてみます。 ちなみに、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.txtsampleより上の階層なら、../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に割り当てれば状況によって動作が変えられると思います。 参考リンク わずか300円でIoTボタンを作る方法bluebutton

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

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

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

ちなみに、Bluebuttonというプログラムは、ボタンは2つあるのですけど、別々には拾えないようでして(というか同じ通信?)どちらのボタンを押しても同じ動作になります。

ボタンにはAndroidとiOSと記載があるので、それぞれ別に制御できるかと思ったのですけどね。(BluebuttonのGitHubには書いていなかった)

■Pi 5は8GBモデルがオススメ

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に割り当てれば状況によって動作が変えられると思います。

参考リンク