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