ジャンクで買ったアケコンをRaspberryPi Picoで使えるようにしてみた

数年ぶりに格闘ゲームをやろうと思ったのですが、引っ越しのときにアーケードコントローラーを手放してしまいました。
普通に買うのもおもしろくないので、ジャンク品を買って家に余ってたRaspberryPi Picoを基盤にして使えるようにしてみました。
**特に安上がりというわけではなく、工具を持っていない場合既製品よりお金がかかるのであくまでも自己満足です。**

## 事前知識
今回使用するライブラリ

https://github.com/OpenStickCommunity/GP2040-CE

元のGP2040というライブラリの派生レポジトリに辺り、GP2040は更新が止まっている（完成したから？）ので更新が続いているCE版を使用しました。
CE版はOLEDでの状態監視機能などが追加されています。
今回使用したのは最新版の0.6.1です。

GP2040は遅延の部分で他基盤より一歩抜きん出ているらしく、検証している方たちのデータによると結構速いそうです。

https://t.co/oXyk1FUWqs

ドキュメントでもハードウェア的な遅延は最小限だということが強調されています。

https://gp2040-ce.info/#/?id=does-gp2040-ce-really-have-less-than-1-ms-of-input-latency![IMG_0819.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855584/8fb5b44e-db6e-4a52-adbd-658b8e268a10.jpeg)


対応プラットフォームはPC、PS3、PS4、SwitchでPS4はレガシーコントローラーに対応しているゲームでしか動作しないみたいなので注意です。
PS5とXbox oneについては認証を合法的に突破する方法がないみたいなので非対応だそうです。

## 使用した部品
電子部品なので当たり前ですがほとんど秋月電子さんと千石電商さんで揃います。

・RaspberryPi Pico

https://akizukidenshi.com/catalog/g/gM-16132/

・入れ物 
メルカリでQanba Evo Droneの箱のみが3000円で出品されていたのでこれにしました。
基盤は取り外されているものだと思っていたのですがついていました。。。
見なかったことにしてpicoに置き換えます。。。

<img width="600" alt="IMG_0804.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855584/17a502bd-11bb-0d20-bd00-60debd734130.jpeg">
<img width="600" alt="IMG_0805.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855584/34095d47-1c32-f3d4-b0c9-e008f200df7b.jpeg">

・ボタンとレバー
どちらも静音にしました。
これが一番高いです。
秋葉原の千石電商さんのジョイスティックコーナーがラジオデパートに移転していて少し迷いました。

https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-5F5R

https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-55BZ

・その他端子コード類
私は太い方が加工しやすいのでAWG24を使用しました。
スッキリさせたい場合はAWG28を使用するといいと思います。

https://akizukidenshi.com/catalog/g/gP-06756/

https://akizukidenshi.com/catalog/g/gC-14089/

https://akizukidenshi.com/catalog/g/gC-13181/


・工具

https://akizukidenshi.com/catalog/g/gT-12162/

https://akizukidenshi.com/catalog/g/gT-15131/

##  書き込み
[こちら](https://github.com/OpenStickCommunity/GP2040-CE/releases/tag/v0.6.1)のGP2040-CE_0.6.1_Pico.uf2
をpicoへ書き込みます。
picoのBOOTSELボタンを押しながらPCとUSB接続するとディスクとして認識されるのでそこにドラッグドロップします。
MacだとOSによってはドラッグドロップだと書き込めないのでコマンドでコピペします。

```shell
# なにか書き込んでいた場合はflash_nukeで初期化
cp -X flash_nuke.uf2 /Volumes/RPI-RP2/
cp -X GP2040-CE_0.6.1_Pico.uf2 /Volumes/RPI-RP2/
```

## はんだ付け
Picoに以下のようなピンをはんだ付けしてブレットボードに挿しておきます。
後々のメンテナンスも考えてユニバーサル基板は使わず、ブレットボード上で作業します。

https://akizukidenshi.com/catalog/g/gC-04398/

## 端子作成
ファストン端子、ピンコネクター、電子ワイヤーを圧着工具でカシメていきます。
ボタン用に8*8計16個の端子を作ります。

<img width="400" alt="IMG_0810.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855584/c7b5e655-7b73-0196-22d3-fcde9051bf6c.jpeg">
<br>

GND側はこのように数珠つなぎにすることで工作が楽になる＆配線がスッキリします。

<img width="400" alt="IMG_0809.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855584/2d424f3f-42fd-bbbb-3588-7a5180f686bf.jpeg">

## 配線
あとは箱にレバーとボタンをはめ込んで、ドキュメントにあるピン配置を見ながら作成したジャンパー線を挿していきます。

https://github.com/OpenStickCommunity/GP2040-CE/blob/main/configs/Pico/assets/PinMapping.png

<img width="600" alt="IMG_0817.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855584/4f7c7773-80d6-72d9-676d-c2d05bd8e23f.jpeg">

## 完成

上のPSボタンなどは接点が基盤直付けで再利用できなかったので飾りです。
格闘ゲームはだいたいR２とL2は必須ではないので、steamの設定でstart,selectに割り振って使っています。
<img width="600" alt="IMG_0819.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855584/d4897d9f-bde0-85b7-fccf-e122de3860b2.jpeg">

## 次やりたいこと
タッチパッドとstart,selectはやっぱり欲しいですね。
上の飾り部分を外して自分でタクトスイッチをつけて無理やり増やしたいと思います。
あとはOLEDもどこかにつけたいです。
一気に自作感が増してカッコよくなりそう。

## 参考
https://note.com/wabisuke94/n/n4f55edf4be5a

https://twitter.com/alirin222/status/1490271694904201218?s=20