PS5 Access Controller with RPi Zero2 W(USB)
前回の続き。
今度は、BlueToothじゃなくて、USBにする。
とっても簡単。
pyusb
を使ってUSBのデータを直接解析するやり方もあるけど、大変。evdevがよい。
evdev のinstall
前回やってれSKIP
sudo apt-get install -y python3-evdev
device の確認
AccessController とRPi Zero2 W をUSB接続する
$ lsusb
Bus 001 Device 003: ID 054c:0e5f Sony Corp. Access Controller
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
ここで Access Controller がでなくれば、USB接続の問題。
配線を見直す
/dev/input/eventX
まず、 /dev/input/ を確認
$ ls -l /dev/input/event*
crw-rw----+ 1 root input 13, 64 Aug 12 15:34 /dev/input/event0
crw-rw---- 1 root input 13, 65 Aug 12 15:28 /dev/input/event1
crw-rw---- 1 root input 13, 66 Aug 12 15:28 /dev/input/event2
みつけたdeviceがAccessController か、一個ずつチェック
import evdev
# コントローラーのデバイスファイルを指定
device = evdev.InputDevice('/dev/input/event0') # XをevtestでN見つけた番号に置き換えてください
print(device)
for event in device.read_loop():
if event.type == evdev.ecodes.EV_KEY:
keyevent = evdev.categorize(event)
if keyevent.keystate == keyevent.key_down:
print(keyevent.keycode)
elif event.type == evdev.ecodes.EV_ABS:
absevent = evdev.categorize(event)
print(absevent.event.code, absevent.event.value)
実行
$ python check_usb.py
device /dev/input/event0, name "Sony Interactive Entertainment Access Controller", phys "usb-3f980000.usb-1/input0"
sample プログラム
# コントローラーの正確なデバイスファイルを指定
device = evdev.InputDevice('/dev/input/event0')
print(f"Device: {device.name}")
import evdev
# コントローラーの正確なデバイスファイルを指定
device = evdev.InputDevice('/dev/input/event0')
print(f"Device: {device.name}")
for event in device.read_loop():
if event.type == evdev.ecodes.EV_KEY:
keyevent = evdev.categorize(event)
if keyevent.keystate == keyevent.key_down:
print(f"Button pressed: {keyevent.keycode}")
elif event.type == evdev.ecodes.EV_ABS:
absevent = evdev.categorize(event)
print(f"Analog input: {evdev.ecodes.ABS[absevent.event.code]} - Value: {absevent.event.value}")
実行結果
Device: Sony Interactive Entertainment Access Controller
Button pressed: ['BTN_WEST', 'BTN_Y']
Button pressed: BTN_Z
Analog input: ABS_X - Value: 127
Analog input: ABS_X - Value: 128
Analog input: ABS_X - Value: 130
Analog input: ABS_X - Value: 132
Analog input: ABS_X - Value: 135