Raspberry PiにBluetoothでワイヤレス・ゲームパッドを接続するには

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のインストール

  1. ゲームパッドのドライバー、xboxdrvをインストールしておきます。動作確認用のjoystickもインストールしました。
    sudo apt-get install xboxdrv joystick

  2. 念の為再起動しておきます。
    sudo shutdown -r now

ポイント2:BluetoothのERTM無効化

Raspbianを使用した場合、Bluetoothは既定で有効でした。特に何も設定しなくても、Bluetoothを使用可能です。

一方、Bluetoothは既定でERTM(enhanced retransmission mode)が有効のようです。ゲームパッドを接続する場合、無効にする必要があるようです。

  1. モジュールのパラメータ、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コマンドを併用してペアリングを行いました。

  1. Xboxワイヤレスコントローラーの接続ボタンを3秒以上長押しして、ペアリングモードにします。(USB端子の近くにある小さいボタンです)
  2. ターミナルを起動し、bluetoothctlを起動します。
    sudo bluetoothctl
  3. agentの設定後、スキャンを有効にします。
    agent on
    default-agent
    scan on

    しばらく待つと「Xbox Wireless Controller」と表示されて、Raspberry PiがペアリングモードのXboxワイヤレスコントローラーを認識したことがわかります。

  4. pairコマンドでペアリング、またはデスクトップ画面上部のBluetoothアイコンをクリック、「Add Device」をクリックします。
  5. 表示されたXbox Wireless Controllerを選択、「Pair」ボタンをクリックします。しばらく待つと
  6. ペアリングが完了します。「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の応用範囲が広がりそうですね。

スポンサーリンク