ラズパイ4B + PS4コントローラ


ラズパイ4BにPS4のコントローラを接続してみます。

XboxやPS4のコントローラはロボットを外部から無線制御する場合にしばしば使われます。前にご紹介したMini PupperでもコントローラにPS4が使われています。

ゲームやったことのない人もコントローラだけ買って慣れておきましょう(^^)。純正品は高いですが、互換機ならAmazonで2、3000円くらいで入手できます。

試しにPS4コントローラをBluetoothで接続してPythonでキーの入力を取得してみます。

PS4のコントローラはいろいろなメーカーから様々なデザインで販売されていますが、だいたいこんな感じが基本形のようです。

 


ラズパイのイメージはRaspberry Pi ImagerでMicroSDカードに焼いて使います。

 

 

 

ライブラリをインストールしておきます。

初期設定

Raspberry piのBluetooth設定をONにして、
(不要かもしれませんが)検出を可能にしておきます。

 

bluetoothctlを開きます。

power onを実行

検出してもらうように、SHAREボタンとPS(HOME)ボタンを同時に長押しするとLEDインジケータが点滅します。

 

scan on を実行

Wireless Controller として検出されます。

アドレス(例:98:B6:E9:35:3D:DF)をコピーしておいて、ペアリングを実行します。

paired されたらトラスト実行

これでOKです。

ここで一旦ラズパイを再起動します。

 


ラズパイを起動後、PS(HOME)ボタンをクリックしてBluetooth接続します。

 

LEDインジケータが薄い青で’点滅します。

 

検出すると紫の点灯に変わります。

 

 

接続が確立すると青の点灯になります。機種によってはLEDインジケータの位置が違うものもあります(純正品?)。

 

 


Joystickとして認識されています。

jsの後ろの番号は状況によって変わります。

リモートデスクトップを使っている場合、マウスのキーイベントが「js0」に割り当てられていることがあり、その場合は「js1」になっていたりします。

例えばこんな感じ。

この場合、PS4コントローラはjs1でアサインされています。

 

 

キー取得用のPythonコードはこんな感じになります。

ps4con.py

js0の場合は以下のように引数に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

Jetson Nano の場合

 


 

Be the first to comment

Leave a Reply

Your email address will not be published.


*