自作携帯ゲーム機を完成させるにあたり、Joy-Conを使えるようにする必要があり軽く調べた。
Joy-Con単体でもBluetoothコントローラとして使用可能だが、「2つのコントローラを組み合わせて1つのコントローラとして使う」にはRaspbian側でのドライバのインストールが必要。
国内外問わず、体系的に記述された記事が見当たらなかったので記事としてあげる。
※Go言語は初めて触るので、勝手がわからず導入が難しかった。
使用するもの
・Go言語 ver 1.8以上 (Raspbian用)
・riking/joy-con driver
作業前提
・Raspbian系ディストリビューションが起動し、bashが使える状態になっていること
・何らかの方法でインターネットに接続されていること
・Joy-Con(L)(R)2台とも、RaspbianにBluetooth接続されていること
(ペアリングの為に各Joy-Conの側面Syncボタンを長押しする以外は、通常のBT接続手順と変わらないため割愛)
作業
以下、piユーザーで作業する前提。
Go言語のRaspbian向けバイナリをダウンロード
wget https://storage.googleapis.com/golang/go1.8.linux-armv6l.tar.gz
sudo tar -C /usr/local -xzf go1.8.linux-armv6l.tar.gz
export PATH=$PATH:/usr/local/go/bin
PATHを追記
PATH=$PATH:/usr/local/go/bin
joy-con driverのインストール
ドライバをダウンロードしてインストール(コンパイル)する。
mkdir -p ~/go/src/github.com/riking
cd ~/go/src/github.com/riking
git clone https://github.com/riking/joycon.git
cd joycon/prog4
go get ./...
上記の作業で、 /home/pi/go/bin/jcdriver にJoy-Conのユーティリティ/ドライバがインストールされた。
接続テスト
予め2台のJoy-ConをRaspbianに接続しておく。
ユーティリティを起動する。
sudo /home/pi/go/bin/jcdriver
下図のように、[console]> という文字が表示された後に"Connected to ~"が2列続けば、正常に2台とも接続・認識されている。
この状態で、各Joy-ConのZL/ZR(トリガーボタン)を同時押しすると、それぞれのJoy-Conの接続インジケータが1プレイヤーの位置に固定され、OS上から一つのコントローラとして認識できるようになる。
ここで、誤ってL/Rを同時押しするとエラーになり強制終了されるので注意。
コントローラの設定
筆者はRetroPieで使用する前提だったため、RetroPieのController Configration上で割り当て設定をした。
割り当て自体は問題がなかったものの、実際にゲームを起動すると入力が二重にされる問題が発生。
単体のJoy-Conも個別のコントローラとして認識していたため、RetroArchの設定を変更して1P以外のコントローラの割り当てを解除した。
RetroArchについては筆者もあまりわからないため詳細説明は控える。
別のディストリビューションでも、似たような問題が発生する可能性があるだろう。
ユーティリティ自動起動設定
正常動作が確認できれば、OS起動時に自動実行されるよう、rc.localに追記する
/home/pi/go/bin/jcdriver &
強制終了された際のリスタートまで考えるのであればデーモン化が望ましい。
参考
・Install Golang 1.8 on Raspberry Pi
https://gist.github.com/marcelitocs/19bdfd22befecbe0d3eef3271260e528
・drew-wallace/switchberry: A guide to setting up the SwitchBerry
https://github.com/drew-wallace/switchberry
joy-conドライバインストールはSwitchBerryのものを参考にさせていただいた。
おきまりごと
・本ページの情報/データを参照/使用して発生したいかなる不利益/損害について責任を負いません。
・記事内容の無断転載は認めません。本ページへのリンクまたは作者名(クレウス)を含んでください。
・必要に応じて随時追加/修正を行います。