【python】ESP32でPS4コントローラの入力を受け取る

2020/05/04

ESP32 python プログラミング

最近ESP32を購入しました。ESP32を制御するのにPS4のコントローラが使えそうだったので、PS4のコントローラからの入力を受け取るコードがあったので、それを使ってみました。今回は使い方についてのまとめです。

今回使用したコード

Git HubにPS4コントローラの入力を受け取るコードがあったので、それを使います。
Git HubのURLは下記です。コードについてはリンク先を参照してください。

今回はこのコードをローカルに落として、実行します。
実行するのにpygameが必要なので、まだ入れていない方はpipコマンドでインストールしてください。

使い方は簡単でパソコンとPS4をUSBで接続した状態でコードを実行します。
もし実行時に下記のようなエラーが出た場合はPS4とパソコンの接続がうまくいってない可能性があるので、接続を再確認してください。


File ".\controller.py", line 32, in init
self.controller = pygame.joystick.Joystick(0)      
pygame.error: Invalid joystick device number


今回実行するにあたり、挙動を確認したかったので、time関数をimportしてsleepさせます。sleepを入れたところは下記の個所です。また、一部python2用の記述がされてエラーが出ていたので、変更しています。
 
while True:
            for event in pygame.event.get():
                if event.type == pygame.JOYAXISMOTION:
                    self.axis_data[event.axis] = round(event.value,2)
                elif event.type == pygame.JOYBUTTONDOWN:
                    self.button_data[event.button] = True
                elif event.type == pygame.JOYBUTTONUP:
                    self.button_data[event.button] = False
                elif event.type == pygame.JOYHATMOTION:
                    self.hat_data[event.hat] = event.value

                # Insert your code on what you would like to happen for each event here!
                # In the current setup, I have the state simply printing out to the screen.
                
                # os.system('clear')#python2.*用の画面クリア
                os.system('cls')#python3.*用の画面クリア
                pprint.pprint(self.button_data)#入力されたボタンを表示
                pprint.pprint(self.axis_data)#入力されたジョイスティックの表示
                pprint.pprint(self.hat_data)#入力された十字キーの表示
            time.sleep(3)#動きを確認するために3秒間停止させる。

実行結果

このプログラムを実行するとボタンの入力、ジョイスティックの入力、十字キーの入力の3つを表示されます。 ボタンについては下記のようなものが出力されます。
{0: False,
1: False,
2: False,
3: False,
4: False,
5: False,
6: False,
7: False,
8: False,
9: False,
10: False,
11: False,
12: False,
13: False}
※この出力の上部にもいろいろ出力されていますが、上記13項目だけ確認すれば問題ないです。13項目のうち、押されたボタンに対応した箇所がTrueになります。

ちなみに0~13の割り当ては以下の通りです。
0:□、1:×、2:〇、3:△、4:L1、5:R1、6:L2、7:R2、8:SHARE、9OPTIONS、10:L3(左スティック押下)、11:R3(右スティック押下)、12:PS4ボタン、13:タッチパッド押す

ジョイスティックの出力は下記のとおりです。
{0: -0.0, 1: -0.05, 2: 0.02, 3: -0.04, 4: -1.0, 5: -1.0}

割り当ては下記の通りです。
0:左スティックのx軸(左に倒すと-1、右に倒すと+1)、1:左のスティックのy軸(上に倒すと-1、下に倒すと+1)、2:右スティックのx軸(左に倒すと-1、右に倒すと+1)、3:右のスティックのy軸(上に倒すと-1、下に倒すと+1)
4,5は-1に張り付きで特に変化はありませんでした。(確認方法が悪いのかもしれませんが...)

ちなみに上記は何も出力は何も押してない状況なのですが、0~4の値がすべて0になっていません。私のコントローラがデフォルトで少し入力された状態になっているのですかね?

十字キーの出力は下記のとおりです。
{0: (0, 0)}

割り当ては下記の通りです。
(0,0) = (左右、上下)
※左と下が-1で右と上が+1です。

自己紹介

はじめまして 社会人になってからバイクやプログラミングなどを始めました。 プログラミングや整備の記事を書いていますが、独学なので間違った情報が多いかもしれません。 間違っている情報や改善点がありましたらコメントしていただけると幸いです。

X(旧Twitter)

フォローお願いします!

ラベル

QooQ