【Raspberry Pi】Raspberry Piにxboxコントローラを繋いでみました
はじめに
こんにちは、がんがんです。
最近はRaspberry Pi Mouseの実験を行っています。
PS3コントローラをBluetooth接続してラズパイマウスを動かそうと試みたのですが、Bluetoothのペアリングがなかなかうまくいきませんでした…。
そのため、まずは有線のxboxコントローラをつないでみて動くかどうかを確認していこうと思います。
目的
- Raspberry Piにxboxコントローラ(有線)を接続する
- Raspberry Piにxboxコントローラ(無線)を接続する
環境
- Raspberry Pi 3 Model B+
- xbox controller
pygameを用いてgamepadの入力コマンド確認
日経BPの雑誌を参考にしてxboxの入力を確認してみます。コードは以下の通りです。
ボタンの総数やアナログスティックの入力を表示させるというものです。動作確認としては便利ですね。
import pygame BLACK = ( 0, 0, 0) WHITE = ( 255, 255, 255) WIDTH = 320 HEIGHT = 240 def main(): pygame.init() surface = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.joystick.init() print("get_count: {}".format(str(pygame.joystick.get_count()))) joystick_id = 0 joystick = pygame.joystick.Joystick(joystick_id) joystick.init() print("get_name: {}".format(joystick.get_name())) print("get_numaxes: {}".format(str(joystick.get_numaxes()))) print("get_numbuttons: {}".format(str(joystick.get_numbuttons()))) print("get_numhats: {}".format(str(joystick.get_numhats()))) myfont = pygame.font.Font(None, 30) myclock = pygame.time.Clock() endflag = 0 while endflag==0: for event in pygame.event.get(): if event.type == pygame.QUIT: endflag=1 ax = joystick.get_axis( 0 ) surface.fill(WHITE) bitmaptext = myfont.render("axis: {}".format(str(ax)), True, BLACK) surface.blit(bitmaptext, (50, 100)) pygame.display.update() myclock.tick(60) pygame.quit() if __name__ == "__main__": main()
無線でも繋いでみる
次は無線での接続を試みてみます。まずはドライバをインストールし、再起動します。
$ sudo apt-get install xboxdrv joystick
次に、bluetoothctlコマンド
を用いてペアリングを行います。
$ sudo bluetoothctl
xboxコントローラの接続ボタン(コントローラの説明書参照)を3秒以上長押ししてペアリングモードにします(点滅の速度が変化)。そして、ラズパイのBluetoothアイコンよりAdd Device
を選択するとDevice名がターミナル上に表示されます。
Xbox Wireles Controller
と表示されていればRaspberry Piがコントローラを認識していることが分かります。先ほど開いたBluetoothアイコンよりXbox Wireless Controllerを選択し、Pair
を選択します。
しばらくすると、Connected successfully
と表示されたら完了です。
動作確認(ターミナルより)
動作確認は以下のコマンドで行えます。
$ jstest /dev/input/js0
ボタンの入力に合わせて入力が遷移していくのが分かります。
動作確認(GUI画面より)
設定
→ Add/Remove Software
→ [joystick]の検索
→ joystick testing and configuration toolにチェック
→ OKをクリック
の手順を踏み、jstest-gtkをインストールします。
起動画面はこんな感じです。コントローラの入力が可視化して分かりますし、キャリブレーションも出来るためすごく便利ですね。
まとめ
今回はRaspberry PiにXboxコントローラを有線・無線接続してみました。これでRaspberry pi Mouseを動かすための準備ができました。次は、コントローラの入力に合わせたモータ制御をさせていきます。
また、現在失敗中のラズパイ×PS3コントローラも引き続き解決していきます。