ラズパイ4BにPS4のコントローラを接続してみます。
XboxやPS4のコントローラはロボットを外部から無線制御する場合にしばしば使われます。前にご紹介したMini PupperでもコントローラにPS4が使われています。
ゲームやったことのない人もコントローラだけ買って慣れておきましょう(^^)。純正品は高いですが、互換機ならAmazonで2、3000円くらいで入手できます。
試しにPS4コントローラをBluetoothで接続してPythonでキーの入力を取得してみます。
PS4のコントローラはいろいろなメーカーから様々なデザインで販売されていますが、だいたいこんな感じが基本形のようです。
ラズパイのイメージはRaspberry Pi ImagerでMicroSDカードに焼いて使います。
ライブラリをインストールしておきます。
1 |
sudo pip3 install pyPS4Controller |
初期設定
Raspberry piのBluetooth設定をONにして、
(不要かもしれませんが)検出を可能にしておきます。
bluetoothctlを開きます。
1 |
bluetoothctl |
power onを実行
検出してもらうように、SHAREボタンとPS(HOME)ボタンを同時に長押しするとLEDインジケータが点滅します。
scan on を実行
Wireless Controller として検出されます。
アドレス(例:98:B6:E9:35:3D:DF)をコピーしておいて、ペアリングを実行します。
1 |
pair 98:B6:E9:35:3D:DF |
paired されたらトラスト実行
1 |
trust 98:B6:E9:35:3D:DF |
これでOKです。
ここで一旦ラズパイを再起動します。
ラズパイを起動後、PS(HOME)ボタンをクリックしてBluetooth接続します。
LEDインジケータが薄い青で’点滅します。
検出すると紫の点灯に変わります。
接続が確立すると青の点灯になります。機種によってはLEDインジケータの位置が違うものもあります(純正品?)。
Joystickとして認識されています。
1 |
ls -al /dev/input |
jsの後ろの番号は状況によって変わります。
リモートデスクトップを使っている場合、マウスのキーイベントが「js0」に割り当てられていることがあり、その場合は「js1」になっていたりします。
例えばこんな感じ。
この場合、PS4コントローラはjs1でアサインされています。
キー取得用のPythonコードはこんな感じになります。
【ps4con.py】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/usr/bin/env python3 # -*- encoding:utf-8 -*- from pyPS4Controller.controller import Controller import sys args = sys.argv if(len(args) < 2): js_num = str(0) else: js_num = args[1] class MyController(Controller): def __init__(self, **kwargs): Controller.__init__(self, **kwargs) controller = MyController(interface="/dev/input/js" + js_num, connecting_using_ds4drv=False) controller.listen() |
js0の場合は以下のように引数に0を指定するか引数無しで実行
1 |
python3 ps4con.py 0 |
circleボタンや右スティックボタンをいじるとキーを取得してくれました。
これらのメッセージを吐き出しているのは、controller.pyです。下記のAppendix参照。
PS4コントローラを使って何かをする場合、controller.pyにコードを記述する代わりに、ps4con.pyのMyControllerクラスに記述します。
例:
def on_L3_down(self, value):
print(“L3 Down”)
PS4コントローラ側からBluetoothを切断する場合
PS(HOME)ボタンを8秒以上長押しします。
青いLEDインジケータが消灯します。
再接続する場合はPS(HOME)ボタンをクリック
Touch Padはマウスとして動作します。
表面をなぞればマウスカーソルが動きますし、クリックすればポイントできます。
Appendix
キーイベントを取得してデータを吐き出しているコードはcontroller.pyです。
以下の場所にあるので、自作のロボットを制御する場合はいろいといじってみましょう。
/usr/local/lib/python3.7/dist-packages/pyPS4Controller/controller.py
Appendix2
Bluetooth接続がよく切れる場合
PS4コントローラは5GHzで通信しているそうですが、Wi-Fiの周波数帯域とかぶって干渉している可能性があります。
Wi-Fiの周波数を2.4GHzに変更してみるといいかもしれません。
Appendix3
なんかの事情でつながらなくなった場合
背面にあるリセットボタン(というかホール)を細い針状のもので押します。
かすかですがクリック感があります。
で、以前に登録されていたWireless Controllerデバイスを削除して、再度一から接続設定をし直します。
Appendix4
充電
PS4™コントローラーをUSBケーブルで電源に接続すると、コントローラーのバッテリーを充電できます。 スタンバイモード中は、ライトバーがオレンジ色にゆっくり点滅し、充電が完了すると消灯します。
Appendix5
Leave a Reply