Raspberry PiにBluetooth方式のワイヤレス・ゲームパッドを接続してみました。
早速、↑↑↓↓・・・あのコマンドを入力すると、Raspberry Piが無敵化・・・せずに自爆しました。
それはさておき、接続手順を記録しておこうと思います。
目次
Raspberry PiのXbox(One)ワイヤレスコントローラーBluetooth接続手順
Bluetooth対応Raspberry Pi
Bluetoothを搭載したRaspberry Pi Model B、OSはRaspbianを使用しました。Wi-Fi・Bluetooth内蔵のPi Zero Wも同じ手順で接続できるかと思います。Raspbianの初期設定は、宜しければこちらの記事を御覧ください。
使用するワイヤレスゲームパッド
Windows 10 PCやAndroidスマートフォンとBluetooth接続が可能なこちらのゲームパッドを使用しました。白以外にカラーバリエーションが豊富です。ファントムブラックはスケルトン仕様で、Raspberry Piとデザイン的に相性が良さそうです。詳細はこちらの記事になります。
※Raspberry Piとの接続(ペアリング)・使用はメーカーのサポート外かと思います。環境(機種やOS等)の違いで、ペアリングができない可能性も御座います。この記事は接続を保証するものではありません。ご了承下さい。
設定手順
ゲームパッドを接続すると、最終的に/dev/input/js0というデバイスとして認識されます。正しく認識されるために、つぎの3つのポイントがありました。
ポイント1:xboxdrvのインストール
- ゲームパッドのドライバー、xboxdrvをインストールしておきます。動作確認用のjoystickもインストールしました。
sudo apt-get install xboxdrv joystick
- 念の為再起動しておきます。
sudo shutdown -r now
ポイント2:BluetoothのERTM無効化
Raspbianを使用した場合、Bluetoothは既定で有効でした。特に何も設定しなくても、Bluetoothを使用可能です。
一方、Bluetoothは既定でERTM(enhanced retransmission mode)が有効のようです。ゲームパッドを接続する場合、無効にする必要があるようです。
- モジュールのパラメータ、disable_ertmを有効にします。無効が「N」のようですので「Y」を書き込んでみました。
echo Y | sudo tee /sys/module/bluetooth/parameters/disable_ertm
再起動は必要ありませんが、逆に再起動すると設定が戻ってしまいます。sysctlから設定を変更できると良いのですが、記述方法がよくわかりません・・・ここは改善の余地がありますね。
cronの@reboot(起動時の実行コマンド)等で設定する方法もあるようです。
ポイント3:ペアリング時にbluetoothctlコマンドを併用
最初にX Window Systemデスクトップの画面右上、Bluetoothアイコンの「Add Device」からデバイスを追加してみましたが、ゲームパッドは認識されませんでした。
このためターミナルを起動して、bluetoothctlコマンドを併用してペアリングを行いました。
- Xboxワイヤレスコントローラーの接続ボタンを3秒以上長押しして、ペアリングモードにします。(USB端子の近くにある小さいボタンです)
- ターミナルを起動し、bluetoothctlを起動します。
sudo bluetoothctl
- agentの設定後、スキャンを有効にします。
agent on default-agent scan on
しばらく待つと「Xbox Wireless Controller」と表示されて、Raspberry PiがペアリングモードのXboxワイヤレスコントローラーを認識したことがわかります。
- pairコマンドでペアリング、またはデスクトップ画面上部のBluetoothアイコンをクリック、「Add Device」をクリックします。
- 表示されたXbox Wireless Controllerを選択、「Pair」ボタンをクリックします。しばらく待つと
- ペアリングが完了します。「OK」ボタンをクリックします。
ターミナルのbluetoothctlに、ペアリング中からペアリング完了のログが表示されますが、そちらでも正しくペアリングできたことを確認できます。
ゲームパッドの動作確認・キャリブレーション
jstestコマンドで動作確認できるようです。
jstest /dev/input/js0
キャリブレーションを行いたい場合、jstest-gtkをインストール後gtk版のjstestを起動してマッピングやキャリブレーションを設定する方法がやりやすいかと思います。
以上でRaspberry Piでワイヤレスゲームパッドが使えるようになりました。
大容量のmicroSDカードに
RetroPie等、/dev/input/jsデバイスに対応したソフトウェアをインストールして、ゲームパッドで遊ぶことができます。ワイヤレスですので、ケーブルの邪魔もありませんし、Raspberry Piへの電力的な負担もありません。Minecraft Pi Editionは非対応のようですが、joy2keyやjoy2mouseコマンドで、ゲームパッドからキーボード/マウス入力を行って遊ぶ方法もあるようです。
その他にもRaspberry PiでIoTデバイスを作成する場合のコントローラーとして使用できそうです。ラジコンのようなものを作る場合も
ワイヤレスゲームパッドが使えると、6軸アナログの微妙な力加減が入力できますし、ボタンでLEDライトを点滅させたり、便利で楽しそうです。
いろいろと用途を考えると、Raspberry Piの応用範囲が広がりそうですね。