PS5 Access Controller with RPi Zero2 W(USB)

最終更新日

前回の続き。

PS5 Access Controller with RPi Zero2 W(BLE)

PS5 Access Controller with RPi Zero2 W(BLE)

2024.08.12

今度は、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

シェアする