はじめに
DualShock3(PlayStationゲームコントローラ)について、どのキーに何番が振られているのか、調べます。
ここではPySDL2のゲームコントローラクラスを利用しています。
環境
ハードウェア
- Raspberry Pi
- ゲームコントローラ Logicool F310r
ソフトウェア
- Raspberry Pi OS Bookworm 64bit Lite
- Python 3
- PySDL2 0.9.16
- pysdl2-dll 2.30.0
F310r設定
F310rは裏のスイッチを「X」(X input)にします。
また、表の「MODE」は消灯にします。
PIPインストール
apt install -y python3-pip
PySDL2インストール
pip3 install -U --break-system-packages PySDL2
pysdl2-dllインストール
pip3 install -U --break-system-packages pysdl2-dll
ソースコード
#!/usr/bin/env python3 # -*- coding: utf-8 -*- ########## # インポート ########## import ctypes import time from sdl2 import * ########## # クラス ########## # ゲームコントローラクラス class GameController: def __init__(self): SDL_Init(SDL_INIT_GAMECONTROLLER) self.axis = {} self.button = {} def update(self): event = SDL_Event() while SDL_PollEvent(ctypes.byref(event)) != 0: if event.type == SDL_CONTROLLERDEVICEADDED: self.device = SDL_GameControllerOpen(event.cdevice.which) elif event.type == SDL_CONTROLLERAXISMOTION: self.axis[event.caxis.axis] = event.caxis.value elif event.type == SDL_CONTROLLERBUTTONDOWN: self.button[event.cbutton.button] = True elif event.type == SDL_CONTROLLERBUTTONUP: self.button[event.cbutton.button] = False else: print("BUTTON No:" + str(event.cbutton.button)) print("EVENT TYPE:" + str(event.type)) # メイン関数 def main(): gamecontroller = GameController() while True: gamecontroller.update() time.sleep(0.1) print(gamecontroller.axis) print(gamecontroller.button) print(SDL_GameControllerName(gamecontroller.device)) print(SDL_GameControllerMapping(gamecontroller.device)) print(SDL_CONTROLLER_BUTTON_MAX) print(SDL_CONTROLLER_AXIS_MAX) print("-----") return # メイン関数 # 備考:main()に投げるだけ if __name__ == "__main__": main()
hid.ignore_special_drivers=1
下記を/boot/firmware/cmdline.txtに追記する必要があります。
hid.ignore_special_drivers=1
中華製のDual Shock3
中華製のDual Shock3は、買うたびにLinuxが認識したり、認識しなかったりとまちまちなので使わない方がいいです。
ランキングに参加しています。下記バナーをクリックしていただけるとありがたいです。