ラズパイでLogicool ワイヤレスゲームパッド F710を使ってみた

スポンサーリンク

久々のブログ更新。
ラズパイ上でゲームパッドの情報を取得してみたくなったので、その記録です。

環境

ハード: Raspberry Pi 3 model B、F710ワイヤレス ゲームパッド
OS: Raspberry Pi OS (32bit)

動作確認

まず必要なパッケージをインストール(初回のみ)

$ sudo apt install joystick jstest-gtk

次にゲームパッドの接続確認。
とりあえずデバイスが表示されれば接続OK。

$ ls -l /dev/input/js0
crw-rw----+ 1 root input 13, 0 Dec 14 20:28 /dev/input/js0

CUIでテスト

$ jstest /dev/input/js0

GUIでテスト。画面表示が必要になるけど、わかりやすい。

$ jstest-gtk

pythonで情報取得

ゲームパッドを扱う好みのサンプルプログラムがなかったので、こちらのページを参考に作成。 画面表示をしていないラズパイだと、ダミーのディスプレイドライバを設定してあげないと動作しなかった。

import pygame
import os
import sys
from pygame.locals import *

os.environ["SDL_VIDEODRIVER"] = "dummy"
pygame.init()

pygame.joystick.init()
joy = pygame.joystick.Joystick(0)
joy.init()

print('NAME:', joy.get_name())
print('NUM AXES:', joy.get_numaxes())
print('NUM BUTTONS:', joy.get_numbuttons())
print('NUM HATS:', joy.get_numhats())
print('NUM BALLS:', joy.get_numballs())

while True:
    pygame.time.wait(30)
    for e in pygame.event.get():
        if e.type == pygame.locals.JOYAXISMOTION or e.type == pygame.locals.JOYHATMOTION:
            axes_data = {
                "L": (round(joy.get_axis(0), 3), round(joy.get_axis(1), 3)),
                "R": (round(joy.get_axis(3), 3), round(joy.get_axis(4), 3)),
                "LT": round(joy.get_axis(2), 3),
                "RT": round(joy.get_axis(5), 3),
                "HAT": (joy.get_hat(0)[0], joy.get_hat(0)[1]),
            }
            print(axes_data)
        elif e.type == pygame.locals.JOYBUTTONDOWN or e.type == pygame.locals.JOYBUTTONUP:
            if e.type == pygame.locals.JOYBUTTONDOWN:
                print('BUTTON %d DOWN' % e.button)
            elif e.type == pygame.locals.JOYBUTTONUP:
                print('BUTTON %d UP ' % e.button)
            buttons_data = {
                "A": joy.get_button(0),
                "B": joy.get_button(1),
                "X": joy.get_button(2),
                "Y": joy.get_button(3),
                "LB": joy.get_button(4),
                "RB": joy.get_button(5),
                "BACK": joy.get_button(6),
                "START": joy.get_button(7),
                "AXIS_L": joy.get_button(8),
                "AXIS_R": joy.get_button(9),
            }
            print(buttons_data)

www.sato-susumu.com