読者です 読者をやめる 読者になる 読者になる

WELCOME TO EASTWORLD

Eastworld でドロイド遊び Rapiro が主人公 ラズパイが好物

Rapiro にあの手この手でもっと迫りたいの巻

ということで、今回は PS4のコントローラーを "手" 段に、ググッと Rapiro に迫ってみます。以下、ググった情報を元にメモ。

 

<メモ>

sudo apt-get install python3

sudo pip install ds4drv

sudo apt-get install python-pygame

 

さらに、

sudo ds4drv

と打ち込み、下記操作でDUALSHOCK4をペアリングモードに。

SHARE ボタンと PS ボタンを長押し

 

と、進めたかったが、sudo ds4drv を打ち込んだ時点で下記のエラー:

IOError: could not open uinput device in write mode

 

そこで、Web で小耳に挟んだ対処療法を施す。evdev のダウングレード:

sudo pip install evdev==0.5.0

 

再度、

sudo ds4drv

やはり同じエラー。

 

よく見ると、Python 2.7 で実行しようとしているもよう。

Python 2 でも構わないだろうが、Python 3 を開拓していきたいので、ここで脇道に逸れて修正を施す。

まず、Python 2 と 3 のバージョンを確認:

python2 -V

python3 -V

2.7.9 と 3.4.2 だと判明。Python 3 を優先するように設定:

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

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1

 

この後、ds4drv を入れ直したりしたが、やはり同じエラー、と思ったが、微妙に違う OSError:

OSError: could not open uinput device in write mode

いずれにせよ、接続への別ルートを探ることに。Rapiro への想いは一方通行のまま。何とかせねば。

 

とりあえず evdev のバージョンを戻しておく:

sudo pip uninstall evdev

sudo pip install evdev

 

以下の手順だと、ペアリングできて接続状態になる。ただし、ほんの数秒で接続が切れてしまう:

bluetoothctl

scan on  コントローラーのアドレスを確認

scan off

pair xx:xx...  上のアドレスを入力してペアリング

ついでに、自動接続するように設定:

trust xx:xx...

 

やはり、先のドライバーのエラーが解消されない限り、うまくいかないか?

初心に帰り、ds4drv のサイトで確認。

ds4drv/README.rst at master · chrippa/ds4drv · GitHub

 

下記の情報を得る:

Failed to create input device: "/dev/uinput" cannot be opened for writing

This could be because the uinput kernel module is not running on your computer. Doing lsmod | grep uinput should show if the module is loaded. If it is blank, run sudo modprobe uinput to load it.

 

これをもとに、sudo modprobe uinput を実行したが、今度は下記のエラー:

modprobe: ERROR: ../libkmod/libkmod.c:557 kmod_search_moddep() could not open moddep file '/lib/modules/4.4.26-v7+/modules.dep.bin'

 

ググっても解決法が分からなかったので、下記のように力技。強引に口説き落としにかかる:

pi@raspberrypi:/lib/modules $ ls
4.4.22+  4.4.22-v7+  4.4.32+  4.4.32-v7+
pi@raspberrypi:/lib/modules $ sudo cp -r 4.4.32-v7+ 4.4.26-v7+
pi@raspberrypi:/lib/modules $ ls
4.4.22+  4.4.22-v7+  4.4.26-v7+  4.4.32+  4.4.32-v7+

 

以上、晴れて、bluetoothctl での接続が落ちないようにはなった。振りほどかれていた一方的な恋が、何とかすがりつくことに成功。

 

そして、sudo ds4drv での接続もOKに。こちらの方法だと、コンソールがコマンドを受け付けなくなるが、Ctrl + C で再度受け付けてくれるようになるもよう。

 

なお、PS ボタン長押しでコントローラーはオフに。

 

あと、とりあえず edev のバージョンは下げておいた。これについては後ほど再検証。