Raspberry Pi + Bluetooth リモコンシャッター + Google Home で「こっちに来て!」メッセージ
女房がリビング兼ダイニングルームで家事などをしている時、書斎にいるPOOHに大声で呼んでも応えてくれない、というクレームが多くなってきました。マンション住まいなので、そんなに距離があるわけではないのですが、書斎でストリーミングを楽しんでいたりすると声が届かないようです。
こういうことが続くとお互いストレスになるので、リビング兼ダイニングルームでボタンを押せば、書斎に置いてある”Google Home mini“でメッセージを喋る仕組みを作ることにしました。勿論、ラズパイを活用して。
< ボタンはどれにすればいいの? >
ラズパイでボタン操作といえば、過去にやったことのあるAmazonのダッシュボタン (“Amazon Dash ButtonでPhilips Hue 電球専用のDimmer スイッチを作ってみました (2)“)を思い出すのですが、ダッシュボタンは昨年の8月末でサービスを終了 (“バーチャルダッシュ“は未だ健全)。仮にダッシュボタンが壊れたら代替がないのは困るので、100円ショップで見かけるBluetooth仕様のリモコンシャッター(カメラのシャッターをリモコンで押すやつ)を利用することにしました。
300円台で送料無料だったので、”Bluetooth リモコンシャッター 無線 スマホ 自撮り棒 iPhone iPad Android対応 CW-268BT” (CW shutter)を購入しました。
< ラズパイとCW shutterをペアリング >
まず始めに、ラズパイと”CW shutter”をペアリングする必要があるので、必要なパッケージをインストールします。
sudo apt-get install bluez bluetooth libbluetooth-dev build-essential
ペアリングを開始します。以下、ターミナルで順に入力。
bluetoothchl
power on
scan on
ここで、左端が[NEW](下図では[CHG])で、nameまたはAliasが”CW shutter” (購入した製品によって名前が異なります。)を探し、BluetoothのMACアドレスを確認します。
ペアリングを実行します。
pair xx:xx:xx:xx:xx:xx
(MACアドレス)
デバイスの信頼を実行します。
trust xx:xx:xx:xx:xx:xx
(MACアドレス)
ネットの情報ではこれでペアリングが完了するはずですが、ラズパイに画面でログインしてみると、下図のようにペアリングの確認メッセージが表示されていたので、
“OK”ボタンをクリックして完了させておきました。(この状況が正しいのかどうかは不明。)
“CW shutter”の実態はボリュームアップのキーなので、”CW shutter”のボタンを押して、音量が大きくなることを確認しておきましょう。
デバイスが発行するイベントを検知する”evtest“で、”CW shutter”のキーイベントを拾えることを確認します。
sudo apt-get install evtest
sudo evtest
ここで重要なポイントは、下図の”/dev/input/event0: CW Shutter”部分の”/dev/input/event0″なのでメモっておきましょう。
< CW shutterのボタン操作でアクション実行 >
“CW shutter”のキーイベントを検知して設定したアクションを実行するデーモン “bluebutton“をインストールします。
sudo apt-get install ruby
sudo gem install bluebutton
動作確認用の設定ファイルを作成します。(具体的な内容はネットを検索して下さい。)
sudo nano ~/.config/bluebutton
“bluebutton“を実行してみます。
sudo bluebutton -c ~/.config/bluebutton
“CW shutter”が見つからない旨のエラーメッセージが表示されてしまいました。いろいろ調べてみたのですが、POOHの実力では解決に至りませんでした。
ここで諦めてしまっては、300円の投資が勿体ないので、もうひと踏ん張りしてみます。
“Using USB and Bluetooth Controllers with Python“という記事を参考に作業を再開することにしました。
そちらに掲載されているPythonコードを見てみましょう。オリジナルでは”/dev/input/event3″ですが、先程、”evtest“で調べた内容に置き換えて下さい。POOHの場合は、”/dev/input/event0″です。
sudo nano /home/pi/get_keyevent.py ※ この段階で”import subprocess”部分は不要です。
コードに必要なパッケージをインストールします。
sudo pip install evdev
それでは、Pythonコードを実行してみます。
python /home/pi/get_keyevent.py
ボタンの種別までは分かりませんが、これで何とかなりそうです。
< CW shutterのボタンを押すとGoogle Homeが喋る >
それでは、”CW shutter”のボタンを押したら、”Google Home”が喋るようにします。
なお、”Google Home”が喋る仕組みは”google-home-notifier“というJava Scriptのライブラリでやってもらいます。インストール手順やセットアップ方法は、以下のTALKをご覧下さい。
・”Raspberry Piを使ってGoogle Homeに時報サービスをしてもらいましょう”
・”Raspberry PiとGoogle カレンダでGoogle Homeにゴミの日を教えてもらう”
・”Raspberry Piを使ってGoogle Homeに1時間後に雨が降る可能性を予測してもらいましょう”
まず始めに、”google-home-notifier“を使って”Google Home”が喋るJavaスクリプトを作成します。
sudo nano /home/pi/googlehome-wife_calling.js
作成したJavaスクリプトを実行して、”Google Home”が喋ることを確認しておきます。
node googlehome-wife_calling.js
続いて、先程、動作確認に使ったPythonコードを編集します。
全体を整えたうえで、”import subprocess”部分とJavaスクリプトを呼び出す処理を追記しました。
実行してみましょう。
“CW shutter”のボタンを押すと、同じキーイベントが2回連続して発生するため、”Google Home”からは2度同じフレーズが聴こえてきます。当面、解決策が分からないので、ここまま放置しておくことにしました。
python /home/pi/get_keyevent.py
< 作成したPythonスクリプトを自動実行 >
ラズパイを起動したり、リスタートする都度、スクリプトを実行し直すのは面倒なので、以下の手順で自動実行するよう設定をしておきます。
・サービスファイルを作成します。
sudo nano /etc/systemd/system/googlehome_wife_calling.service
・サービスを有効にします。
sudo systemctl daemon-reload
sudo systemctl enable googlehome_wife_calling.service
sudo systemctl start googlehome_wife_calling.service
・サービスが動いていることを確認します。
sudo systemctl status googlehome_wife_calling.service
念の為、ラズパイを再起動後、ちゃんと実行されているか確認しておきます。
これで、人感センサーによるLEDライトの自動オン・オフ制御機能が完成しました。
journalctl -u googlehome_wife_calling.service
ちゃんと喋ってはくれるんですが、エラーが出ている模様。この辺りはもう少し調査が必要だなあ。
p.s>
bluetoothの規格的には10mぐらい離れた場所でも通信できると思っていたのですが、実際に使ってみると、せいぜい3m〜5mぐらいが通信圏内かな?という印象です。恐らく、300円で買えるbluetoothデバイスということもあってか、そもそもの用途がスマホ写真のリモートシャッター機能なので、そんなものなのかもしれませんね。正直なところ、今回の用途にはやや無理があるbluetoothデバイスだと思いました。
|
|
|
ホームページ “THE POOH FILES”にも是非お立ち寄り下さい。
“Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。