Windows環境でArduino Unoを使ってSwitchをPCから操作する
概要
Arduino Unoをポッ拳コントローラに偽装することでPCからSwitchを操作する。
フォーク元はこれ
相違点は
であること
手順
winavrのインストール
https://sourceforge.net/projects/winavr/
git clone
$ git clone --recursive https://github.com/ebith/Switch-Fightstick.git
makefile修正
Arduino Uno R3を使うのでmakefileのMCUをatmega16u2に変更
- MCU = atmega32u4 + MCU = atmega16u2
このままmake
すると'clock_div_1' undeclared
みたいなエラーが出る。
おそらくwinavrのミスで
|| defined(__AVR_ATmega16U2__) \
を1289行目に追加してからmake
する。Joistick.hex
が実際に書き込むファイル。
arduinoへの書き込み
ATmega16U2に書き込むためにdfu-programmerを使うらしい、あんまり良くわかってない。
これをするとPC接続時にATmega16U2として認識される(Arduinoとして認識されなくなる)
詳細手順
ATmega16U2として認識されたら
$ ./dfu-programmer atmega16u2 erase $ ./dfu-programmer atmega16u2 Joistick.hex $ ./dfu-programmer atmega16u2 reset
をして書き込み完了
動作確認
[PC] - [シリアル変換アダプタ] - [Arduino] - [Switch]の状態になるように接続する。
このとき[Arduino] - [Switch]のSwitch側の接続はドックのUSB-Aでもいいし本体のUSB-Cでもいい。
[シリアル変換アダプタ] - [Arduino]間はRXとTXを間違えないこと。
接続したらデバイスマネージャでシリアルポートの番号(COM6等)を確認する。
接続が確認できなければUSBが充電専用のものな可能性あり。
python3系で
$ pip install pyserial $ python example/rapid-fire-a.py /dev/ttyS_
シリアルポートがwindowsのデバイスマネージャでCOM6
と認識されているならcygwinでは/dev/ttyS5
になる。
rapid-fire-a.py
によりA連打されていることをコマンドライン、Switch本体で確認する。
確認できなければRXとTXが逆かも。
あとポケモンがコントローラの1Pにしか対応していないためからだと思うが、ジョイコンをSwitch本体にガッチャンコしてArduinoを1Pにしないと反応してくれない。