ヘルニアクソ野郎エンジニアblog

~ヘルニアでHell near~

Raspberry PiにBluetoothコントローラー(PS3)を接続させる方法

calendar

Raspberry PiにBluetoothコントローラー(PS3のジョイコン)を接続してみましたので、その時の備忘録になります。

基本的には先人の方々と同じ方法なのですが、一部うまくいかず悪戦苦闘した所がありますので、そのあたりを踏まえて、簡潔にまとめようかと思います。

参考にさせていただいたサイトは、下記のサイトになります。↓

ラズパイでラジコン(2):PS3コントローラとBluetooth接続

 

試した環境については、

Raspberry Pi3と4にPS3のジョイコンをBluetooth接続、

になります。

Raspberry Pi ZERRO W は只今確認中ですので、結果が分かり次第ここに追加記載しておきます。

※この接続方法にはコントローラーとラズパイを有線(USB)で接続する工程があります。

 

 

スポンサーリンク

専用ドライバのインストール

初めに、Raspberrypiにbluetooth関連のドライバとツールをインストールします。

続いて、bluetoothサービスを自動起動するように設定します。

再起動。

再起動後、PS3コントローラー専用のドライバをインストールします。まず、ペアリングに必要な「sixpair」をダウンロードし、コンパイルします。

ここで一旦USBケーブルでラズパイとコントローラーを有線接続し、PSボタンを押してペアリングを開始させます。PS3のコントローラーが表示されていれば、認識している事になります。

さきほどコンパイルした 「sixpair」 を実行します。

続いてコントローラーとやりとりするドライバとなるデーモンのソースをgithubからダウンロードします。

 

 

Bluetooth設定

一旦ここでBluetoothの設定を変更しておきます。先ほどBluetoothの自動起動をONにしましたが、それだけではダメな場合もあります。ONにするには下記のコマンドで、設定を確認します。

3行目辺りに「Down」の表記があれば、Bluetoothが立ち上がりません。

Down表記になっていれば、次のコマンドでBluetoothを有効にします。実行後、もう一度sudo hciconfig hci0で確認し、「UP RUNNING PSCAN ISCAN」になっていればOKです。

※UPだけではNGです。スキャンされません。

上記コマンドの際に、「rf killエラー」が発生すれば、とりあえず下記コマンドで無線状況を確認します。BluetoothがSoft blocked: yesなら、ロックが掛かっている状態になるので、変更が必要です。

Soft blocked: yesなら 、下記コマンドでロックを解除します。その後、上記コマンドで再度無線状態を確認します。noになっていればOK。

 

 

ドライバの実行

先ほどgitからDLしたソースをビルドします。

この時、エラーが発生すれば、以下のプログラムをインストールしし、再度上記のコマンドを実行してください。

コントローラーをUSBから外しておきます。sixadを起動すれば、コントローラーがbluetoothでペアリング出来る状態になりますので、下記コマンドを実行します。実行後、コントローラーのPSボタンを押下すると、しばらくしてコントローラーが震え、**Connected Sony …**と出力されれば成功です。

LEDが点滅しっぱなしの場合は、コントローラーのリセットボタンで改善する場合があります。また、スキャンできていない場合があるので、前途したsudo hciconfig hci0で 「UP RUNNING PSCAN ISCAN」 になっているか確認します。

コントローラーの入力情報は、dev/input/js0 に格納されているので、コマンドで確かめてみます。入力後、適当にコントローラーを操作し、入力値が変われば反応しています。

 

 

再起動後の自動接続について

ここまでで、一応ラズパイとコントローラーのペアリングは出来ましたが、このままでは再起動後にペアリングが切れてしまい、途中からですが、また同じ手順を踏まなければなりません。

再起動後の自動接続については、下記の手順で可能です。

まず、再起動後に 先ほど起動したsixadを停止します。

bluetoothctlを実行し、その後にコントローラーのpsボタンを押下すると、コントローラーの情報(macアドレス等)が反映されます。※出てこない場合は前途した「sudo hciconfig hci0」で「 UP RUNNING PSCAN ISCAN 」になっているか確認してください。なっていなければ、再度「sudo hciconfig hci0 up piscan」で変更をかけて下さい。

コントローラーのペアリング試行が切断される前に(赤点滅が消える前)、以下の2つのコマンドを入力します。

trust succeeded の表示が出れば、 再起動後の自動接続が出来ています。

 

 

以上でRaspberry PiとPS3のコントローラーのBluetooth接続は終わりです。

次回は、このコントローラーを使ってRaspberry Piを制御し、ロボットを操作してみたいと思います。