Raspberry PiにBluetoothコントローラー(PS3のジョイコン)を接続してみましたので、その時の備忘録になります。
基本的には先人の方々と同じ方法なのですが、一部うまくいかず悪戦苦闘した所がありますので、そのあたりを踏まえて、簡潔にまとめようかと思います。
参考にさせていただいたサイトは、下記のサイトになります。↓
ラズパイでラジコン(2):PS3コントローラとBluetooth接続
試した環境については、
Raspberry Pi3と4にPS3のジョイコンをBluetooth接続、
になります。
Raspberry Pi ZERRO W は只今確認中ですので、結果が分かり次第ここに追加記載しておきます。
※この接続方法にはコントローラーとラズパイを有線(USB)で接続する工程があります。
専用ドライバのインストール
初めに、Raspberrypiにbluetooth関連のドライバとツールをインストールします。
1 |
sudo apt install bluez bluez-hcidump libbluetooth-dev libusb-dev joystick libjack-jackd2-dev |
続いて、bluetoothサービスを自動起動するように設定します。
1 |
sudo systemctl enable bluetooth.service |
再起動。
1 |
sudo reboot |
再起動後、PS3コントローラー専用のドライバをインストールします。まず、ペアリングに必要な「sixpair」をダウンロードし、コンパイルします。
1 2 |
wget "https://help.ubuntu.com/community/Sixaxis?action=AttachFile&do=get&target=sixpair.c" -O sixpair.c gcc -o sixpair sixpair.c -lusb |
ここで一旦USBケーブルでラズパイとコントローラーを有線接続し、PSボタンを押してペアリングを開始させます。PS3のコントローラーが表示されていれば、認識している事になります。
1 |
lsusb |
さきほどコンパイルした 「sixpair」 を実行します。
1 |
sudo ./sixpair |
続いてコントローラーとやりとりするドライバとなるデーモンのソースをgithubからダウンロードします。
1 |
git clone https://github.com/falkTX/qtsixa.git |
Bluetooth設定
一旦ここでBluetoothの設定を変更しておきます。先ほどBluetoothの自動起動をONにしましたが、それだけではダメな場合もあります。ONにするには下記のコマンドで、設定を確認します。
3行目辺りに「Down」の表記があれば、Bluetoothが立ち上がりません。
1 |
sudo hciconfig hci0 |
Down表記になっていれば、次のコマンドでBluetoothを有効にします。実行後、もう一度sudo hciconfig hci0で確認し、「UP RUNNING PSCAN ISCAN」になっていればOKです。
※UPだけではNGです。スキャンされません。
1 |
sudo hciconfig hci0 up piscan |
上記コマンドの際に、「rf killエラー」が発生すれば、とりあえず下記コマンドで無線状況を確認します。BluetoothがSoft blocked: yesなら、ロックが掛かっている状態になるので、変更が必要です。
1 |
rfkill list |
Soft blocked: yesなら 、下記コマンドでロックを解除します。その後、上記コマンドで再度無線状態を確認します。noになっていればOK。
1 |
sudo rfkill unblock bluetooth |
ドライバの実行
先ほどgitからDLしたソースをビルドします。
1 2 3 |
cd qtsixa make sudo make install |
この時、エラーが発生すれば、以下のプログラムをインストールしし、再度上記のコマンドを実行してください。
1 |
apt-get install pyqt4-dev-tools |
コントローラーをUSBから外しておきます。sixadを起動すれば、コントローラーがbluetoothでペアリング出来る状態になりますので、下記コマンドを実行します。実行後、コントローラーのPSボタンを押下すると、しばらくしてコントローラーが震え、**Connected Sony …**と出力されれば成功です。
LEDが点滅しっぱなしの場合は、コントローラーのリセットボタンで改善する場合があります。また、スキャンできていない場合があるので、前途したsudo hciconfig hci0で 「UP RUNNING PSCAN ISCAN」 になっているか確認します。
1 |
sudo sixad -start & |
コントローラーの入力情報は、dev/input/js0 に格納されているので、コマンドで確かめてみます。入力後、適当にコントローラーを操作し、入力値が変われば反応しています。
1 |
sudo cat /dev/input/js0 |
再起動後の自動接続について
ここまでで、一応ラズパイとコントローラーのペアリングは出来ましたが、このままでは再起動後にペアリングが切れてしまい、途中からですが、また同じ手順を踏まなければなりません。
再起動後の自動接続については、下記の手順で可能です。
まず、再起動後に 先ほど起動したsixadを停止します。
1 |
/usr/bin/sixad --stop |
bluetoothctlを実行し、その後にコントローラーのpsボタンを押下すると、コントローラーの情報(macアドレス等)が反映されます。※出てこない場合は前途した「sudo hciconfig hci0」で「 UP RUNNING PSCAN ISCAN 」になっているか確認してください。なっていなければ、再度「sudo hciconfig hci0 up piscan」で変更をかけて下さい。
1 |
bluetoothctl |
コントローラーのペアリング試行が切断される前に(赤点滅が消える前)、以下の2つのコマンドを入力します。
1 2 3 |
connect xx:xx:xx:xx:xx:xx(MACアドレス) trust xx:xx:xx:xx:xx:xx(MACアドレス) |
trust succeeded の表示が出れば、 再起動後の自動接続が出来ています。
以上でRaspberry PiとPS3のコントローラーのBluetooth接続は終わりです。
次回は、このコントローラーを使ってRaspberry Piを制御し、ロボットを操作してみたいと思います。