Raspberry Pi に Dualshock4 を繋げる。

2016-03-28

ググったらすぐできそうだったのでRaspberry PiにPS4 のコントローラーを繋げる。
この動画を参考というかほぼこれ。
https://www.youtube.com/watch?v=1EYtZC2iVzc

Pythonで使いたい

今回はDualshock4の入力をPythonで自由に使えるようにすることが目標。

使ったもの

  • Raspberry Pi 2
  • Dualshock4
  • Bluetoothドングル(2.1+規格のやつ)

追加でインストールが必要なパッケージ

  • ds4drv(pythonのパッケージ)
  • bluez

ほかにはpygameが必要だけどraspbianには既に入っていた。

まずは、Pythonは2.7じゃなくて3.4使いたいので、システムが使うPythonのバージョンを3.4に設定した。

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.4 1

ds4drvはpipでインストール(pipも既に入っていた)。
pyudevとevdevも勝手に入ってるはずだけど、なかったらそれもpipでインストール。

sudo pip install ds4drv

参考にした動画ではここでsudo ds4drvすればDualshock4に繋げれるはずだけど、エラーがでてできなかったのでググると、Pyhtonのevdevのバージョンを0.5.0にダウングレードすればいけるらしいとあったので、それやると成功した。
でもダウングレードは気持ち悪いので新しいのでできればそれがいい。

sudo pip install evdev==0.5.0

こんどこそsudo ds4drv(bluetoothドングル刺してよ)

sudo ds4drv

スキャン中...みたいのがでるので、Dualshock4のシェアボタンを押したままPSボタンを同時にしばらく押し続ける(ぴかぴか白く点滅する)と接続できる。
接続成功したら、バッテリの残量とか、シグナルの強さとかの情報がでてくる。

実際にPythonで使ってみる

PythonではPygameのjoystickのやつを使う。
とりあえず、Pygameのjoystickのリファレンスのページの下の方にサンプルコードがあるので、それをコピペして走らせると、いまRaspbeery PiにつながっているDualshock4のすべての入力を表示してくれる画面を出してくれる。

こんな感じ

タッチパッドのタッチ以外はすべて読み取れる。L2,R2ボタンのおし具合とかも。

Axisは-1から1までの値で、ボタンのおし具合とか、スティックの傾き具合とか。
Buttonは値が2種類だけで、押してるか押してないか。

これでどのボタンが何番だとか把握する。

Arduinoと連携してLED制御してみる

使い方はこんな感じで


#ひたすら左スティックの左右の傾き具合(-1から1)をプリント
import pygame
import time

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

while 1:
  try:
    pygame.event.get()
    axis = joystick.get_axis(0)
    print(axis)
    time.sleep(0.01)

  except KeyboardInterrupt:
    break;
print ("done")

5,6,7,8行でpygameのjoystick起動して(5行目あれば6行目いらないみたい)ループ内では12行目でキューを取り出して、13行目で、左スティックの情報をとっている。

12行目はボタン押されましたとか、離されましたとかのイベント情報を取るやつで、このコードだと何もしていないみたいだけど、これでイベント情報回さないと13行目でコントローラのイベント情報とれないから重要。

試しにArduinoと連携してNeopixelのLEDでやってみて終了。

今年こそはラジコンしたい。

参考になった:
https://github.com/chrippa/ds4drv/issues/66
https://linuxconfig.org/how-to-change-from-default-to-alternative-python-version-on-debian-linux

プライバシー・ポリシー

Hi, Thank you for visiting here.

2015-2017 www.ningendesu.net