この記事では、Raspberry Pi 3 MODEL BとPS4コントローラ(以下では、「DS4」とします。)をBluetooth接続し、「Linux Input Subsystem」経由でキーイベントを取得する方法を紹介します。
取得したキーイベントを解析することで、押されたボタンの種類やボタンの状態(押された or 離された)を識別することができるため、以下のような方におススメの方法になります。
- DS4で操作可能なゲーム・ロボット製作に興味がある方
- 既存のパッケージを使用するのみで、PS4コントローラのキーイベントを取得できるようにしたい方
この記事では、Raspberry Piの購入後に実施する以下の2点について、書いています。 1. OS(Raspbian)インストール 2. 初期セットアップ この記事は以下のような方向けのものになります。 Raspberr[…]
1. 概要
Bluetooth接続したDS4のキーイベントを取得するには、「ds4drv」というpython実行環境で動作するドライバーを使用します。
「ds4drv」はOSSとしてGitHub上で公開されており、その概要は以下のREADMEで紹介されています。
2. 実行環境
- 開発マシン: Raspberry Pi 3 MODEL B
- OS: Raspbian Buster with desktop(Release date: 2019-09-26)
- 接続機器: DS4(DUALSHOCK 4 CUH-ZCT2J)
- プロトコル(Bluetooth接続): bluez
- 設定ツール(Bluetooth接続): bluetoothctl
3. 事前準備
3-1. Bluetooth接続
この章では、Bluetooth機能を有効化し、DS4とペアリング、接続する手順を記載します。
3-1-1. Bluetooth機能の有効化
- ターミナル上で「bluetoothctl」と入力し、設定ツールを起動する
- 設定ツールへのコマンド入力が求められたら、「power on」と入力する
- 「Changing power on succeeded」と出力されることを確認する
※この手順以降は、全て設定ツールに対するコマンド入力となります。
3-1-2. ペアリング
- 「scan on」と入力する
- DS4のペアリングモードで起動する(ライトバーが白く点滅し始めるまで、「PS」ボタンと「SHARE」ボタンを同時に長押しする)
- 「Device {MACアドレス} Wireless Controller」と出力されることを確認する
- 「pair {③で確認したMACアドレス}」と入力する
- 「Pairing successful」と出力されることを確認する
(DS4のペアリングモード時のライトバー)
3-1-3. 信頼できる機器として登録
- 「trust {手順3-1-2の③で確認したMACアドレス}」と入力する
- 「Changing {手順3-1-2の③で確認したMACアドレス} trust succeeded」と出力されることを確認する
3-1-4. 接続テスト
- DS4の電源を入れる
- 「Device {手順3-1-2の③で確認したMACアドレス} connected: yes」と出力されることを確認する
(DS4の接続時のライトバー)
3-2. ds4drv実行環境セットアップ
この章では、ds4drv実行環境のセットアップについて、説明します。
前述のとおり、ds4drvはpython実行環境で動作するドライバーのため、pythonインタプリタをインストールする必要があります。
その際に、pipも合わせてインストールしますが、これはds4drvがpipで取得可能なパッケージであるためです。
さらに、この章ではds4drvの動作確認用にjoystickパッケージをapt-getでインストールします。
3-2-1. 前準備(パッケージ情報の更新)
ターミナル上で以下のコマンドを実行します。
3-2-2. パッケージのインストール
ターミナル上で以下のコマンドを実行します。
(python3, pip)
(ds4drv)
(joystick)
4. Bluetooth接続 ~ キーイベント取得方法
4-1. Bluetooth接続
手順3-1と同じ手順で、Raspberry PiとDS4をBluetoth接続します。
4-2. ds4drv実行
手順4-1とは別のターミナルを起動し、以下のコマンドを実行します。
4-3. キーイベント取得(確認)
「Linux Input Subsystem」経由で取得されたキーイベントは、「/dev/input/js[0-9]+」に書き込まれます。
取得したキーイベントは、以下のコマンドで確認することができます。
(DS4以外の入力デバイスを接続していない場合 -> js0)
(出力例 -> 8 axes + 13 bottons)
5. 参考記事
pythonライブラリ「Pygame」でDS4のキーインベントを解析する方法を、以下の記事で紹介しています。
この記事では、「Raspberry Pi 3 MODEL B」とpythonライブラリ「PyGame」を使用して作成した、PS4コントローラ(以下、「DS4」とします)のボタン入力を解釈するアプリケーションを紹介します。 [outli[…]
以下の記事では赤外線リモコンの信号を受信し、押されたボタンを識別する方法を紹介しています。DS4のコントローラの代替とすることも可能ですので、興味のある方はこちらもご覧ください。
「Raspberry Pi」はLinuxOS相当のOS上でブラウザ操作やプログラミングが直接可能でありながら、汎用入出力(GPIO)ピンを標準搭載しているため「センサー系」「駆動系」との接続、制御が容易に可能なコンピュータです。 こち[…]