##libusb
% sudo apt install libusb-dev
##sixpair
sixpairをダウンロードして、コンパイルする。
% mkdir Sixaxis
% cd Sixaxis
% wget "https://help.ubuntu.com/community/Sixaxis?action=AttachFile&do=get&target=sixpair.c" -O sixpair.c
% gcc -o sixpair sixpair.c -lusb
##必要なライブラリのインストール
--- pyuic4 ---
% sudo apt install python-qt4 pyqt4-dev-tools qt4-designer
--- jack.h ---
% sudo apt install libjack-jackd2-dev
--- bluetooth.h ---
% sudo apt install libbluetooth-dev
##qtsixaのインストール
% git clone https://github.com/falkTX/qtsixa.git
% cd qtsixa
% make
% sudo make install
##PS3コントローラーの接続
% sudo sixad -start &
この後にPS3コントローラーをラズパイにUSBケーブルで接続し"PS"ボタンを押すと接続できる。
うまくPS3コントローラーを認識出来るようになった。
本当はこのままUSBケーブルを抜くとRaspberryPiとPS3コントローラーの間がBlueToothで繋がって使えるようになるらしいが、家ではUSBケーブルを抜くとPS3本体の電源が入ってコントローラーがそっちと繋がってしまった。
PS3コントローラーのリセットボタンを押すと対応できるらしいが試してない。
PS3コントローラーが繋がったので、ラズパイ起動時にデーモンが動くようにしておく。
% sudo systemctld enable sixad
ラズパイを再起動する
% sudo reboot
##PS3コントローラー情報の取得
こんな感じでPS3のボタンの情報を取得できるgithubのソースはこちら
import struct
device_path = "/dev/input/js0"
EVENT_FORMAT = "LhBB"
EVENT_SIZE = struct.calcsize(EVENT_FORMAT)
with open(device_path, "rb") as device :
event = device.read(EVENT_SIZE)
while event :
(ds3_time, ds3_val, ds3_type, ds3_num) = struct.unpack(EVENT_FORMAT, event)
print("{0}, {1}, {2}, {3}".format(ds3_time, ds3_val, ds3_type, ds3_num))
event = device.read(EVENT_SIZE)
実行する
% python3 js_watch.py
各ボタンを押して調べた結果がこれgithubにも置いてある
type=1 だとボタンがデジタル値で 0か1の2値
type=2 だとボタンはアナログ値で -32767〜32767 の値
で取得できる。
up : num=13, type=1, val=1 or 0
down : num=14, type=1, val=1 or 0
left : num=15, type=1, val=1 or 0
right : num=16, type=1, val=1 or 0
x : num=0, type=1, val=1 or 0
circle : num=1, type=1, val=1 or 0
triangle : num=2, type=1, val=1 or 0
squre : num=3, type=1, val=1 or 0
L1 : num=4, type=1, val=1 or 0
L2 : num=2, type=2, val=-32767:32767
num=6, type=1, val=1 or 0
R1 : num=5, type=1, val=1 or 0
R2 : num=5, type=2, val=-32767:32767
num=7, type=1, val=1 or 0
stop : num=8, type=1, val=1 or 0
start : num=9, type=1, val=1 or 0
left stick
left&right : num=0 , type=2, val=-32767:32767
up&down : num=1 , type=2, val=-32767:32767
push : num=11, type=1, val=1 or 0
right stick
left&right : num=3 , type=2, val=-32767:32767
up&down : num=4 , type=2, val=-32767:32767
push : num=12, type=1, val=1 or 0
##いつのまにかBlueToothが使えない
ラズパイを再起動してもBluetoothがうまく使えなくなっていた。
しばらく調べていると、デーモンファイルの実行権がなくなっていたことに気づいた。
実行権をつけることでうまく動くようになった。
% sudo chmod +x /usr/lib/bluetooth/bluetoothd
原因は不明だが、このsixadをインストールしたとにapt upgradeでシステムの更新をしたときに、
うまくアップデートできなくて実行権がなくなった? かもしれない。。。