raspberry pi と AB Shutter3(bluetoothボタン) の連携

概要

  • raspberry pi を扱うにあたり、できるだけ簡易なアクションで操作したい
  • ダイソーで300円のbluetoothボタン「AB Shutter3」と連携させてコマンド実行させる仕組みを構築する

参考

qiita.com

github.com

連携前の注意点

AB shutter3 は購入時にお試し用のボタン電池が付いていますが新しいものに絶対替えた方が良いです。
というのも私が電池をケチって替えなかった為に数時間無駄にした為です。 どういう問題が起きるかというと、ペアリングは出来るのにボタンを押した時のイベントが拾えないという中途半端な状態になりました。

bluetoothペアリング作業

# 必要に応じて
$ sudo apt-get install bluetooth

$ sudo hciconfig hci0 down
$ sudo hciconfig hci0 up
$ sudo bluetoothctl
[bluetooth]$ power on
[bluetooth]$ scan on
# ここでペアリング状態(AB shutter3 は電源ONにするだけ)にする
# 検知すると「[NEW] Device XX:XX:XX:XX:XX:XX AB Shutter3」と表示されるのでMACアドレスをメモして
[bluetooth]$ pair XX:XX:XX:XX:XX:XX
[AB Shutter3            ]$ trust XX:XX:XX:XX:XX:XX
[AB Shutter3            ]$ quit

イベントが拾えているか確認(必須ではない、オプション)

$ sudo apt-get install evtest

$ sudo evtest
# 「Select the device event number [*-*] :」と聞かれるので「AB Shutter3」の番号を入力する
# 後はボタンを押してキーイベントが拾えていればOK
# ここで拾えない場合は電池を交換してみるとうまくいくかもしれない

こんな感じ

Event: type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e9
Event: type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 1
Event: -------------- SYN_REPORT ------------
Event: type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e9
Event: type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 0
Event: -------------- SYN_REPORT ------------

bluebuttonのインストール

$ sudo apt-get install ruby
$ sudo gem install bluebutton

設定ファイルの準備

$ vi ~/.config/bluebutton
keyup=echo UP
keydown=echo DOWN
longup=echo LONG UP
longdown=echo LONG DOWN

お試し実行

$ sudo bluebutton -c ~/.config/bluebutton

iosボタンとandroidボタンを区別する

現行のプログラムでは2つあるボタンの区別は出来ておらず、アップかダウンか、長押しアップか長押しダウンかを判定できる。
諸事情でiosボタン(大きい方のボタン)とandroidボタン(小さいほうのボタン)を区別したかったのでプログラムを少し変更。

github.com

変更点は下記のコミット分だけ

https://github.com/miya15/bluebutton/commit/e2b9b4e475c71886a7b3bf41691f6a022c94c4de

gem化はしていないのでやってみたい方は下記(環境によってパスは異なる場合がありますが)に個別にコピーしてください。

  • /var/lib/gems/2.3.0/gems/bluebutton-0.2.1/lib/bluebutton.rb
  • /var/lib/gems/2.3.0/gems/bluebutton-0.2.1/bin/bluebutton
$ vi ~/.config/bluebutton
# ※下記が追加できるようになる
# 注意:反応するタイミングはボタンを離した時です
pushandroid=echo PUSH android
pushios=echo PUSH ios