2019年09月29日記載
Bluetoothシャッターボタンを使ってラズパイを操作する方法
ダイソーから300円(税別)で「Bluetoothシャッターボタン」が発売している。自宅からほど近い場所の中型店舗でも電気コーナーのスマートフォンアクセサリのコーナーに置いてあった。

ネット上ではBluetoothシャッターボタンを使ってラズパイを操作するページがいくつか見つかるが、多くの紹介サイトはたいていpythonが使われている。ラズパイの動作を極めるにはゼロからPythonを覚えれたほうが良いのかもしれないが、ある程度複雑なことをやりたいと思うと、やっぱりすでに知っている言語PHPで使って動かしたい。

そこでLinuxのシェルコマンドとPHPの知識だけを使って、ダイソーのBluetoothシャッターボタンのボタンを押す動作をトリガーとした好みの動作をPHPで動作させるにはどうしたら良いかを紹介したい。

本題に入る前にこれから説明するための事前準備として以下の環境が整備されていることを前提とします。

・GUI起動できる状態
・GUI操作が動作できる状態
・piユーザで自動ログインができる状態
・PHPを動かせる状態(PHPを使って動かす場合)

上記4点が整っていることを踏まえた先の作業について紹介する。

やりたい内容を整理する。

(1)ラズパイの電源を入れる
(2)Bluetoothシャッターボタンを押す
(3)目的の動作が実行させる

以上だ。目的の動作はなんでもいい。たとえばメール送信する、別のサーバにPOSTデータを送信する、ラズパイのシャットダウンを実行するなどが概ね実行したい動作だと思う。

たったこれだけの動作をボタンを押すトリガーで実行さえるまでの手順をおおまかに説明する。

(STEP1)Bluetoothシャッターボタンとラズパイ間でペアリング設定する
(STEP2)AutoKeyをインストールする
(STEP3)AutoKeyにBluetoothシャッターボタン情報を登録する
(STEP4)ラズパイ起動と同時にターミナルとAutoKeyを自動実行する
(STEP5)動作させたいPHPプログラムを作成する

ポイントはAutoKeyを使用する点である。他のサイトでは第三者がPythonで作成されたBlueButtonなどが紹介されているが、pythonがわからない私は別の方法を採用。それがAutoKeyを使うというものである。

Bluetoothシャッターボタンはラズパイから見るとキーボードデバイスと認識され、ボタンが押されると音量アップキーとして送信される。このキー情報は通常の106日本語キーボードには存在せず、マルチメディアキーの一種となっている。

AutoKeyを使うと、音量アップキーの情報が入力されると別の文字列キー情報に置換する機能がある。つまりAutoKeyプログラムが動いている環境でラズパイに対し、音量アップキーが入力されると、音量アップだけでなく、事前に指定した文字列に置き換えてキーボード入力に振る舞ってくれるのがAutoKeyなのである。

ただしAutoKeyはGUIでのみ動作する。CUIでは動かない。更にラズパイ上だとAutoKeyのGUI操作だけではログイン時自動起動設定ができない不具合が存在する。元祖であるDebianはクリックひとつで自動起動設定ができても、ラズパイ用OSであるRassian上では自動起動設定がマウス操作からのチェックだけでは有効にならなかった。

そこで手動でラズパイ起動時にAutoKeyも自動起動するように設定する方法も紹介する。

更に動作させたい命令はShellコマンドプロンプトにキーボード入力させることで実行させることから、ラズパイの起動後にGUI環境からターミナルウインドウが開くように設定も行う。

つまりラズパイの電源を入れると、GUIが立上がり、AutoKeyとターミナルも起動してスタンバイ状態となる。自動でペアリングされたBluetoothシャッターボタンからボタンが押されると、AutoKeyで設定したコマンドラインが実行される。こんな流れである。

サンプルではラズパイをシャットダウン命令をさせるケースとしているが、もし自前で書いたPHPプログラムを動かしたければ、AutoKey上で動かしたいPHP命令を書くだけで対応できる。

ではこれより詳細に説明する

(STEP1)
Bluetoothシャッターボタンとラズパイ間でペアリング設定する

説明省略。別サイトを参考してください。いきなり突き放す形だがどのサイトも設定方法は同じになるので省略する。

(STEP2)
AutoKeyをインストールする

SSHまたはターミナル画面から以下のコマンドを入力してインストールする。

#sudo apt -y install Autokey-gtk

(STEP3)
AutoKeyにBluetoothシャッターボタン情報を登録する

GUI画面の右上のラズパイマークからアクセサリをクリックするとインストールした「AutoKey」が表示されているのでクリックし起動させる。



・左側の[My Phrases]を開き、新規をクリックする。
・好きな名前をつける(例:button)
・右上のフォームに置換したい文字列を入力する(例:sudo poweroff)
・Paste usingに[Keyboard]が選択されていることを確認する



・Hotkeyの[Set]ボタンを押す
・[Press to Set]ボタンを押す
・Press a key...と表示が変わるのを確認する
・ペアリングされた状態でBluetoothシャッターボタンを押す
・左側の表示がKey:となったのを確認しOKボタンを押す
・[Save]ボタンを押す

以上でBluetoothシャッターボタンが押さえると、「sudo poweroff」の文字列が入力として作動する準備が完了する。

念の為、GUIのテキストエディタを開いた状態でBluetoothシャッターボタンを押したら、「sudo poweroff」と表示されれば設定が問題なくできていることが確認できる。

あとはターミナルのシェルコマンド待ち状態でボタンを押せば、ラズパイはシャットダウン処理に入ることができることがおわかりいただけるだろう。






残すはラズパイの電源を入れたら自動でAutoKeyとターミナル画面が自動起動させれば良い。一般的な自動起動のやり方は別サイトでも紹介されているが、AutoKeyの自動起動はGUI上での設定ではうまく動作しなかったので別の方法を紹介する。

(STEP4)ラズパイ起動と同時にターミナルとAutoKeyを自動実行する

/home/piフォルダ内に所定のディレクトリを作成し、配下のファイルを作成を行う。本コラムではすべてGUI上からの操作でのやり方を紹介する。

・/home/piのファイルを隠しフォルダ表示モードでオープンする。




・.configフォルダに移動する
・新規に[autostart]ディレクトリを作成する



・[autostart]ディレクトリに自動起動するファイルを新規に作成する。
・AutoKey起動用のファイルとターミナル起動用の2つの空ファイルを作成する。
・ファイル名は[任意の文字列].desktopとする。



・サンプルでは[autokey.desktop]と[terminal.desktop]とした。
・autokey.desktopファイルに画像のように記述を行い保存する。



・name行は任意で可。重要なのはexce行。
・ターミナルも同様に作成する。

例:autokey.desktop
[Desktop Entry]
Type=Application
Name=AutoKey
Exec=AutoKey

例:terminal.desktop
[Desktop Entry]
Type=Application
Name[ja]=terminal
Exec=lxterminal
Terminal=true

それぞれ上書き保存して完了。きちんと動作するかラズパイを再起動する。再起動後にAutoKeyとターミナルが自動オープンすれば完了。

あとはボタンをおせばラズパイはターミナルにシャットダウンコマンドが入力された状態となり、シャットダウンボタンの完成となる。

(STEP5)動作させたいPHPプログラムを作成する

本件の説明の主題とは離れるが、PHPプログラムをコマンドラインから実行する場合の書き方を紹介して終わりにする。

#php [パス付きPHPファイル名]

で良い。phpインストールをapt経由で実施していない場合はパスをチェックする。aptでphpインストールをしていれば、パスが通っているのでphpを書くだけで実行してくれる。

以上、ラズパイでGUIモードを有効にした状態でAutoKeyを使うケースはネット上でもあまり見かけなかったので紹介してみた。皆さまの参考に一助となれば幸いである。


コラムワード検索
表示件数
ワード検索
本コラムに関する意見
Twitterにて受け付けます @megahit_jp