おおまかまとめ
- Switch-Fightstickすごい
- マイコンボードにポッ拳コントローラのフリをさせて1ドットずつ描画する
- スプラトゥーン2とPCを持っていれば、3,000円くらいで可能
- teensy++ 2.0を買う、teensy 3.xは未対応なので買ってもできない
- Arduino UNO R3やArduino microでも可能
- ソフトウェア開発・マイコンボードに対する知識があると良い
- Windows10ならWSLを利用すると、環境をあまり汚さなくてよい
必要なもの
- ハードウェア
- Nintendo Switch(本体)
- Splatoon2(ソフト)
- Windows10 PC(cmdがあるWindowsやLinux PCやMac PCでも可能、本稿では手順の違いを述べない)
-
teensy++ 2.0(マイコンボード)
- 3,000円くらい
- Switch-Fightstick公式によれば、Arduino UNO R3とArduino Microでも動作確認済みらしい
- teensy 3.xはarm cpuになっておりLUFAライブラリが非対応
うっかりteensy 3.2を買ってしまったよ…
- (追記:なくてもOK)USB-A to USB Type-C変換コネクタ(teensy++ 2.0についているUSB-A/USB-Micro-BのケーブルをNintendo Switchに接続する)
- Switchのクレードルを使えば、必要ない
- 500円くらい
- これが安かったし、動作もした
- ソフトウェア(少なくとも、個人利用ならどれも無料)
- GIMP(画像編集ソフト、白黒化とpngデータ吐き出しをする。手持ちのソフトでもOK)
- Switch-Fightstick(偉大なツール、LUFA同梱・非同梱のどちらかを使う)
- LUFA(AVRマイコン用USBライブラリ、上記ツールが使用する)
- teensy.exe(teensy公式のバイナリ書き込みソフト)
- WSL (Bash on Windows)
- python2.7(LL言語、WSLにすでに入っているはず)
- gcc-avr、avr-libc(avrコンパイラとライブラリ、WSLでのUbuntuパッケージ)
- git(バージョン管理ツール、Switch-Fightstickを落とすのに使う)
- WSLを準備する方法については、本稿では取り上げない
手順
下準備
GIMPのインストール
- GIMP公式からdirectlyダウンロードし、gimp-xxx-setup.exeを実行する
- xxxはバージョン、本稿執筆時は2.8.22が最新だった
- https://www.gimp.org/downloads
WSL上に必要なパッケージをインストール
WSL上で作業する
- git、avrコンパイラとライブラリをインストールする
- python2.7(パッケージ名python)がなければ入れておく
- たぶん元から入っている
-
png2c.py
を動かすのにPILライブラリが必要
sudo apt install git gcc-avr avr-libc python-pil
Switch-Fightstickをダウンロード
WSL上で作業する
LUFA同梱版で行う場合(簡単)
Switch-Fightstickの最新には追従しきれていないが、LUFAライブラリが同梱されている。
(追記)最近、高速化コミットを取り入れた。
- 同梱版Switch-Fightstickをクローンして、バージョン
1.0.0f1.1.0fを使う- リリースのzipをダウンロードして使ってもよい
- https://github.com/EsProgram/Switch-Fightstick/releases
git clone https://github.com/EsProgram/Switch-Fightstick.git
cd Switch-Fightstick
git checkout 1.1.0f
非同梱版でやる場合(ちょっと手間だけど最新版)
こちらはLUFAライブラリが同梱されていない。
そのため、自分でダウンロードし配置してから作業する。
本稿執筆時点では、GithubのPRにて高速化バージョンが提案され、マージされた。
- githubのLUFAプロジェクトからクローン
- または、LUFA公式ページの最後にあるzipをダウンロードして解凍する
- http://www.fourwalledcubicle.com/LUFA.php
- 解凍したLUFAライブラリをSwitch-Fightstickと同じディレクトリに配置する
- Switch-Fightstickをクローンしてくる
git clone https://github.com/abcminiuser/lufa.git
git clone https://github.com/shinyquagsire23/Switch-Fightstick.git
cd Switch-Fightstick
本作業
本節以降を繰り返せばいろいろなドット絵を扱える
元画像の準備
- 320x120サイズを良いする
- jpgでもpngでも、GIMPで開ければ良い
画像を白黒化
GIMPで作業する
もちろんGIMPを使わず、各自手元のIllustratorやPhotoshopやCOMIC STUDIOなどを使って320x120サイズの白黒画像を用意してもよい。(トーン使ってみたい)
-
画像を開く
- 画像をGIMPにドラッグアンドロップで開ける
-
白黒化
- [Image] -> [Mode] -> Grayscale]
- 2値化はSwitch-Fightstickツールがやってくれるため、やらなくてもよい
- [Image] -> [Mode] -> [Indexed]の「Use black and white (1-bit) paltette」を使い、自分で2値化してもよい
- 2値化の処理によって見え方がだいぶ変わるため、自分でやるほうが綺麗な画像をつくれる
- 拘るなら、明るさ、コントラスト、フィルター、2値化処理方法をいじる
- さらに拘るなら、生成されたpngのドットを微修正する
- さらにさらに、2値化前に、[Fileters] -> [Artistic] -> [Cartoon]で先に輪郭を強調しておくと、よりキレイにできる
- [Image] -> [Mode] -> Grayscale]
-
PNG画像で保存
- [File] -> [Export As...]
- [PNG image]を選択
- ファイル名は
.png
にしておく
画像をc言語ソースファイルに埋め込み
WSL上で作業する
git clone
したSwitch-Fightstickディレクトリ内で作業する
- python2.7と
png2c.py
でcソースファイルに埋め込むため、下記コマンドを打つ- ファイル名は自分が保存したパスと名前にする
- PNGが2値化してあるなしを認識し、良しなにしてくれる
- 用意した画像がraw data(.data)なら
bin2c.py
を使えばよい
python png2c.py [image.png]
うまく行けば、下記のメッセージが出る。
また、git status
でimage.c
が更新されているのを確認できる。
image.png converted with original colormap and saved to image.c
teensy++ 2.0用のバイナリファイルの作成
WSL上で作業する
git clone
したSwitch-Fightstickディレクトリ内で作業する
-
make
を叩きビルドする- 成功すると、
[INFO] : Finished building project "Joystick".
と出る - Makefile内のMCU項目を書き換えることで、Arduino UNO R3/Microへ対応できる(らしい)
- 成功すると、
- 生成された
Joystick.hex
をWindows側Cドライブ内へコピーする。
make
...(ログ省略)
cp ./Joystick.hex /mnt/c/[いい感じのところ]
- LUFA非同梱版を使った場合は
make
コマンドでLUFAライブラリのパスを指定する- もしくは、自分で
makefile
内のLUFA_PATH
の項目を正しく書き換える
- もしくは、自分で
make LUFA_PATH=../lufa/LUFA
...(ログ省略)
cp ./Joystick.hex /mnt/c/[いい感じのところ]
teensy++ 2.0への書き込み
Windows10環境にて作業する。
先項で生成されたJoystick.hex
を、公式の書き込みツールでteensy++ 2.0へ書き込む
- teensy.exeを起動する
- tennsy++ 2.0をPCに接続する
- [File] -> [Open HEX File]
-
Joystick.hex
を指定する
-
- tennsy++ 2.0のスイッチを押す
- [Operation] -> [Program]
- [Operation] -> [Reboot]
Nintendo Switchで画像描画を実行
Nintendo Switchとスプラトゥーン2で作業する
- 投稿画像編集画面へ行く
- ペンを一番細いものにする
- (追記)開始点への移動、キャンバスのクリア、は勝手にやってくれる。
- Nintendo Switchにteensy++ 2.0を接続する
- 画像はUSB Type Cで接続している図
- (追記)SwitchのクレードルのUSB-A端子に接続してもできる
-
1時間30分ほど待つ高速版なら30分くらいかかる- (追記)LUFA同梱版も高速化された
参考文献
- Splatoon2で自動ドット打ちしてくれるやつ試した by @Es_Program さん
- http://esprog.hatenablog.com/entry/2017/08/19/001717
- 日本語で解説してくれている偉大なる先人様
- Switch-Fightstickツール
- https://github.com/shinyquagsire23/Switch-Fightstick
- さらにオリジナルがあるが、そちらは2ヶ月更新されていなかった
- LUFAライブラリ
- Tennsy++ 2.0公式
- @ES_Program さんによる、Switch-FightstickツールのLUFAライブラリの同梱版
- GIMP2
- 写真を漫画の一コマに変換する!無料ソフトGIMPで簡単レタッチ - 良いもんつたえ隊