Programming Tips blog

テキトーにTIPSを紹介します

ラズパイ + Python + PySDL2でPlayStation3ゲームコントローラ(DualShock3)のインデックスをチェックする(ジョイスティッククラス版)

はじめに

 DualShock3(PlayStationゲームコントローラ)について、どのキーに何番が振られているのか、調べます。
 ここではPySDL2のジョイスティッククラスを利用しています。

環境

ハードウェア

ソフトウェア

PySDL2インストール

pip3 install -U git+https://github.com/py-sdl/py-sdl2.git

pysdl2-dllインストール

pip3 install -U pysdl2-dll

ソースコード

#!/usr/bin/env python
# -*- coding: utf-8 -*-

##########
# インポート
##########

import ctypes
import time
from sdl2 import *


##########
# グローバル変数
##########

# ジョイスティッククラス
class Joystick:
	def __init__(self):
		SDL_Init(SDL_INIT_JOYSTICK)
		self.axis = {}
		self.button = {}
	
	def update(self, event):
		while SDL_PollEvent(ctypes.byref(event)) != 0:
			if event.type == SDL_JOYDEVICEADDED:
				self.device = SDL_JoystickOpen(event.jdevice.which)
			elif event.type == SDL_JOYAXISMOTION:
				self.axis[event.jaxis.axis] = event.jaxis.value
			elif event.type == SDL_JOYBUTTONDOWN:
				self.button[event.jbutton.button] = True
			elif event.type == SDL_JOYBUTTONUP:
				self.button[event.jbutton.button] = False


# メイン関数
def main():
	joystick = Joystick()
	event = SDL_Event()
	while True:
		joystick.update(event)
		time.sleep(0.1)
		print(joystick.axis)
		print(joystick.button)
		print(SDL_JoystickName(joystick.device))
		print(SDL_JoystickNumAxes(joystick.device))
		print(SDL_JoystickNumBalls(joystick.device))
		print(SDL_JoystickNumButtons(joystick.device))
		print(SDL_JoystickNumHats(joystick.device))
	return


# メイン関数
# 備考:main()に投げるだけ
if __name__ == "__main__":
	main()

留意事項

機種によってインデックスが異なる

 (機器ごとではなく、)機種ごとにインデックスが異なります。
 そのため、ゲームコントローラクラスを使うことをおすすめします。

hid.ignore_special_drivers=1

 ジョイスティックのものによっては下記を/boot/cmdline.txtに追記してください。

hid.ignore_special_drivers=1

 ランキングに参加しています。下記バナーをクリックしていただけるとありがたいです。