takashiskiのブログ

覚書の殴り書き

splatoon2用ドット打ち機(atmega32u4)

あらまし

splatoon2(以下イカ)の「投稿」でドット絵描くの面倒だからコントローラ作って自動的に打ち込ませようぜ!って動きがあるようで、試してみた。

先行記事で存在を知ったのだが、先行記事では「オリジナルリポジトリを勘違いしている」「必要な依存関係に関して記載がない」など、情報の間違いや抜けが見られる。何より非常に高価な上に入手がしにくいteensy++2.0を選択している。 ArduinoUNOは入手性がよいが、3000-3500円程度で安価ではない。また、廉価品ではCH340が搭載されていることが多いため、動作するかがわからない。

手元のpro microで行けそうだったので動作確認し、どうせ自分用にまとめるつもりだったからまとめた。

今回の動作OSはWindows10で、bash on windowsを使う。 マイコンボードはatmega32u4を積んだpro microを使う。

先行記事にあるteensy++2.0やArduinoUNOは使わないので注意されたい。 特にArduinoUNOは下記手順では動かない。 teensy++2.0はもしかしたら動くかもしれないが、金銭的余裕がないので検証する予定はない。

先行記事

esprog.hatenablog.com

qiita.com

qiita.com

必要なハードウェア・予算

以下のものが必要である。

  • AVRマイコンボード
  • マイコンボードのコネクタに対応したUSBケーブル(mini, microなど)
  • [オプション] USB typeA メス - USB typeC オスの変換アダプタ
  • [オプション] ブザー

AVRマイコンボード

発案者のリポジトリのREADME.mdには以下の三つのマイコンボードが書かれていて、このプログラムはいずれもが使える。

  • teensy++2.0(at90usb1286)
  • Arduino UNO(atmega16u2)
  • Arduino micro(atmega32u4)

teensy++2.0とArduino UNOに関しては先行記事で紹介されている。

この記事では、atmega32u4を積んだ、「pro micro」というマイコンボードを使う。 これはArduino microやArduino Leonardoと同等の機能を備えたマイコンボードである pro microは国内入手の安値はおそらくaitendoである。しかし、秋葉原が近所にない場合は入手コストが大きい。

www.aitendo.com

amazonが最速で届いてかつぼちぼちの価格であるので購入先として適当である。 amazonから購入するときに気を付ける点は、いくら安くともprimeマークがついていないものは中国から発送されて受け取るまでにおおよそ2週間以上かかるということだ。 以下はprimeのうち最安値で出品されていたものである(9/12調べ)。

余談だが、独自ブランドとして出品されていても、写真で明らかな違いがないものはシルク程度の独自要素すらあった試しがないので安いものを買えばよいと思う。

USBケーブル

大体mini USBかmicro USBなので、マイコンボードの端子を確認して、持っていなかったら買おう。

iBUFFALO USB2.0ケーブル (A to miniB) スリムタイプ ブラック 1m BSUAMNSM210BK

iBUFFALO USB2.0ケーブル (A to miniB) スリムタイプ ブラック 1m BSUAMNSM210BK

基板上に実装されている micro USBコネクタは、抜き差し方向以外に力を加えると簡単にもげてしまうので、特に抜き差しするときはしっかりコネクタを抑えて抜き差ししてほしい。 以下のような先端がとれて磁気とくっつくようなケーブルを使うと、コネクタに負担がかからなくてよいかもしれない。ただし、たまにUSBデバイスの認識を失敗する。

[オプション] USB typeA メス-USB typeC オスの変換アダプタ

先行記事では何故か「本体のUSBポートに刺すので必須!」と書かれている。 しかし、switchのドックのUSBポートに刺せば認識される。 家でしか使わないならば、買わなくても問題ないのではないかと思う。

[オプション] ブザー

マイコンボードに接続することで、終わったら音で教えてくれるらしい(未確認)。

ダウンロード/インストールしておくもの

Switch-Fightstick(のイカ特化のforkプロジェクト)

shinyquagsire23 氏による Switch-Fightsticksplatoon-2-printer ブランチをベースとしてイカのドット打ち専用に改造されたリポジトリ。 master ブランチはWiiU向けコントローラをSwitchで使うためのプロジェクトである。 フォーク元はWiiU向けの「Pokken Tournament Pro Pad」をSwitchで使うためのプログラムのようである。 完全に特化用途の別物なのに名前変えてないので非常に紛らわしい。

github.com

追記・修正[9/13]

EsProgram氏による先行記事の参照先を勘違いしていたので修正。

progmem 氏の リポジトリに splatoon-2-printer branchが存在したのでそちらをフォーク・修正していたよう。 ただし、フォーク元は更新が一月程度されていなく、また先行記事の通り参照先が滅茶苦茶になっている恐れがある。 一方 shinyquagsire23 によるリポジトリではマイコン名を変更する程度で動かすことができ、かつ描画速度の2倍の高速化がなされている。

以下はフォーク元リポジトリの splatoon-2-printer ブランチへの参照である。

github.com

LUFA

The Lightweight USB Framework for AVRs。 名前のまま、AVR向けの軽量USBフレームワーク。Switch-Fightstickが依存してる。 プロジェクト内の LUFAフォルダ を参照するので適当な場所に配置すること。Switch-Fightstickmakefile からはデフォルトで ../LUFA/LUFA/ を参照している。 このパスは、 Switch-Fightstick と同じ場所で git clone するか、解凍することで満たされる。

github.com

Arduino IDE

これがなんであるかの説明は、流石に不要かと思う。bash on windowsはシリアルポートを認識しないので、Powershellからマイコンへのプログラム書き込みをするために使用する。

Arduino - Software

bash on windows

powershell開いてbashって打って実行できたらOK。 だめだったらググってなんとかしていれて。

qiita.com

bash on windows上で入れるもの

AVRCのコンパイルのためにavr-gccが必要である。

画像のソースコード変換のためにpython2.Xおよびpillowが必要である。ただし、後述の一部行を変更することでpython3.Xでも動いた。

bash on windows上で以下のコマンド実行することで追加可能である。上記以外のパッケージは、上記パッケージの依存先である。 末尾のechoは全部終わった後にbeep音鳴らすコマンドなので必要に応じて削除していただきたい。

sudo apt-get install -y python-minimal
sudo apt-get install -y python-pip
sudo apt-get install -y zlib1g-dev
sudo apt-get install -y gcc-avr
sudo apt-get install -y avr-libc
pip install --upgrade pip
pip install pillow
echo -e '\a'

大まかな手順

  1. 320x120のpngまたはraw画像を用意する(mspaint, GIMPなど)
  2. 画像をソースコードに埋め込むためのツールを使って変換する(python2.X, bash on windows)
  3. makeコマンドでコンパイル・hexファイルを生成する(avr-gcc, bash on windows)
  4. avrdudeコマンドでマイコンへ書き込む(Arduino IDE, powershell)
  5. Switchに接続する

1. 画像の用意

320x120の画像を適当に用意すること。一応Switch-Fightstickにテストパターンが用意されている。

2. 画像をソースコードに変換する(bash on windows上)

bash on windows上で実行する。 raw画像の場合は bin2c.py , png画像の場合は png2c.py の引数に画像のパスを入れて実行する。

python bin2c.py your_raw_path
python png2c.py your_png_path

なお、python2.Xと指定されているが、python3.Xでも、以下の個所でエラーがでるだけなので、定数に置き換えれば動いた。

#変更前
for i in range(0, 320*120) / 8):
#変更後
for i in range(0, 4800):

3. makeコマンドでhexファイルを生成する(bash on windows上)

bash on windows上で実行する。 makeコマンドを叩く前に、makefile内に変更が必要なパラメータがいくつかあるので修正すること。

#MCU = at90usb1286 コメントアウトする
MCU = atmega32u4 #追加する

以下はLUFAをmakefileの場所に対して ../LUFA/LUFA 以外に置いた場合に変更する

#LUFA_PATH = ../LUFA/LUFA コメントアウトする
LUFA_PATH = your_LUFA_path #追加する

以上の2か所を変更した上で make をたたけば、 Joystick.hex が生成される。

4. 書き込む(powershell上)

Powershell上で実行するのでbash on windowsからは抜ける。 pro microは、リセットをかけると書き込みモードに切り替わる。 まず最初にデバイスマネージャを開き、pro microにはリセットボタンがついていないので、ボタンを接続するか、スルーホール/ピンに直接金属を触らせるなどしてresetとGNDを短絡させる。 次にデバイスマネージャーの「ポート(COMとLPT)」から「Arduino micro bootloader」の番号を調べる(COMX,Xは整数)。

確認出来たら、Joystick.hexがあるフォルダで、以下のコマンドを実行する。 コマンド中の -PCOMX のXをポート番号に置き換えること。

avrdude -c avrdude.conf -v -patmega32u4 -cavr109 -PCOMX -Uflash:w:Joystick.hex:i

書き込みモードに切り替わっていないと、COMポートが開けなかったとエラーがでる。 デフォルトのブートローダでは数秒で通常モードに切り替わってしまうようなので、リセットをかけてからコマンドを実行する必要がある。

一度avrdudeコマンドで書き換えたあとは、リセットをかけないとWindowsからは認識されなくなる。

5. Switchに接続する

まずイカを起動し、ポストから投稿の準備画面へ移動する。 ペンサイズは最小にする。

次に、PCからUSBケーブルを引き抜く。引き抜いたケーブルはドックのUSBポートに刺すか、USB type Cへの変換コネクタをつかって本体に接続する。

あとは自動的にSwitchコンとして認識・接続され、全消去、原点遷移を行った後にドット打ちが行われる。

注意点は、自動操作をさせているだけなので、本体の画面やボタンに触れないこと。ペンサイズが変わったり、座標がずれてもそのまま続行されるので、時間を無駄にする。

最後に

ちゃんと動くように、かつ可能な限り正確な情報を書くの、いろんなこと調べないといけないからめんどくさくてもうまとめたくないなっておもった。 てきとーに最低限の再現性を用意できるだけの記事を書けるようになりたい人生だった。

www.amazon.co.jp

bash on windows/Windows Subsystem for Linuxをまっさらにする

とあることをするための記事を書こうと思った際に、bash on windowsにいろいろ入れ過ぎてどの動作が必要だったかわからなくなってしまったので、初期化したくなったので調べた。

参照したのは以下のページ。 www.atmarkit.co.jp

  1. アンインストールする
  2. インストールする

の2ステップ。

lxrun /uninstall /y
lxrun /install

アンインストール時にはいちいち聞かれるのが面倒なので /y オプションを付けている。 インストール時にも /y オプションを付けることができるが、その場合はユーザ名やパスワードの入力が求められず、ログインユーザがrootになる(らしい)。

アンインストール時は、 /full オプションを付けることで、通常は残ってしまう C:\Users\[ユーザ名]\AppData\Local\lxss\homeの中身も消せるそう。

/fullなくてもまっさらになったような気がするのでとりあえずこれでいいや。

www.atmarkit.co.jp

得体のしれないキーボードのキーアサインを調べる

Ergodoneを買って、とりあえずデフォルトで使おうとしたものの、一部不明なキーがあって困ったため調べました。

 

1. IntelliTypeProのインストール

以下から可能です。

Download Microsoft IntelliType Pro 8.2 Keyboard Software for Windows - 64 bit from Official Microsoft Download Center

 

2. ファイル名を指定して実行->mskey

以上です。

 

公式であったので非常に楽でした。

 

参考ページ

 

https://support.microsoft.com/ja-jp/help/919618

C92で気になってるとこまとめ

気になったツイート貼っていくだけの記事。

 

 

 

 

 

 

 

 

 

 

 

 

平日に #VRZONE いってきた

平日にたまたま友人が動ける日があったので、連行してきた。

覚書兼ねて、現在のVRZONEの状況に関して書く。

混雑度合い

入場券

平日日中は当日券ばっちり。先についた人が人数分買わないと待ってる間に売り切れてしまう、なんてことはないっぽい。 逆に、説明事項があるから、ということで入場者が揃ってから買ってくれといわれた。 夕方の時間帯、特に19時以降は仕事帰りの人が集中するのか予約で売り切れ。 土日は若干数当日券でることがあるようだけれど、どの時間があるか読めないし、そもそもない場合があるので予約したほうがよい。

アトラクション

人気のとこはぼちぼち並んでるけれども、波が激しい。土日並に並ぶ瞬間もあれば、誰もいない瞬間もある。 誰もいなかったのでラッキーと釣りやって、HMD外したら10人位並んでいたのにはびっくりした。

追加チケット

追加チケットの販売あり。 一枚1200円で、購入は一度に一名一枚。追加チケットで体験終わったあとまた新しいの買いに来てね、という体。 購入場所はインフォメーション。入り口のチケット売り場の裏で入り口ゲート入って右。ちなみに左は出口。 エヴァ、マリオカート、ハネチャリ、釣りは追加チケットなし。入場の4チケットで人気がかたよる4種である。 休日も追加チケットはあるっぽい。

パックマンムースショコラ

一日10とか20の限定らしくて、3時位にいったらもうなかった…

アトラクション

好きな版権物があればまずそれに行けば良いと思う。マリカもエヴァもガンダムもボトムズも最高。ドラゴンボールはかめはめはも気弾も全然当たらない… 特に行きたい版権物がない場合は、まず高所恐怖SHOW(一階階段横)と釣りVR gijiestaが良いと思う。

釣りは回転の関係で列の見た目以上に並ぶので注意。空いてる時にさっと入りたい。 釣りの楽しいところだけ凝縮した感じなので退屈しない。 私はこれまで2回体験して、8匹と5匹だった。

高所恐怖SHOWは、非常に単純だけれどもわかりやすくおもしろい体験。 撮影スペースが用意されているので、ぜひ友人と一緒にいって醜態を記録に残してほしい。 私は記録に残された。

非VRコンテンツだと、体力があるならインタラクティブなボルダリングのトラップクライミング、体力ないなら自由落下気味のナイアガラドロップが楽しいかもしれない。トラップクライミングやって背筋痛い。

あとは好みでどれも楽しいと思うので金が許す限りいろいろ回ってみると良いと思う。 踊り食いされるコンテンツが2つもあった。

その他

なんだかんだ5時間滞在していた。4チケット+追加チケット3枚+非VRチケット1枚+食事で1万強の出費。 これだけ滞在出来た理由の一つとしては、休憩する空間が多いところだと思う。 アトラクション前には必ずベンチがあって一休みできるし、一階に行けば机椅子もある。 休む空間がなかったら疲れが前に出てきて楽しむのが辛かったのではないだろうか。

滞在時間に制限がないのも、休みながら回れるので良かった。 お台場から引き継ぎのコンテンツはほとんど待ち時間がない状態であるが、新宿から追加の、特に人気のコンテンツを回る場合は、待ち時間含めて2-3時間見ておかないと、時間に追われて楽しめないと思う。

以上。

C92 メカざざむしの頒布予定

すっかり忘れてましたけど、C92出します。

webcatalog-free.circle.ms

予定内容

新刊ダメでした

ぺらいコピー本500円予定。

  1. 【おうちハック】照明で生活時間を管理する
  2. 【おうちハック(?)】室温をなるべく正確に測定して好みの温湿度を知る
  3. 【雑記】ergodox組み立てた
  4. 【雑記】CO2レーザーのコントローラ変えた

本以外

一人月シャツ用意しました。 一枚3000円でサイズがS,M,L,XLの四種類あります。

展示

  • テンキー型キースイッチテスター1(Cherry, Gateron, Kailh)
  • キースイッチテスター2(Zealio)
  • キースイッチテスター3(Cherry)
  • Ergodone白軸

他のESP32ボードに手を出した

前回のCO2測定に引き続きESP32を使って部屋の環境測定(のはずだった)。Arduino IDE使ってます。

忙しい人のための要点

  • Arduino IDEでやってます。
  • Wemos D1 R32なる怪しい基板使ってます。
  • UploadSpeedを256,000か115,200にしないと書き込めませんでした。
  • I2CピンはSCL=22, SDA=21でした。
  • UARTは問題なし。

takashiski.hatenablog.com

mBaaSにデータあげるのを先にやろうと思ったのだけど、NiftyCloudMobileBackendのデータを上げる際にHMACの計算が必要で、それがArduino向けはあるけどスタンドアローンなpure Cライブラリがなかったので諦めてしばらくはローカルでやります。

前回前々回と、ESP32にOLEDが載った謎基板を使っていましたが、ArduinoUNO配置に拡張されたものを見つけたので購入してみました。Groveシールドとかそういう類のもの使えればちょっと楽だなーという理由による判断です。

なおググるとこんなURLが…

Index of /images/WeMos-fake/D1-R32

トラブル

書き込めなかった

とりあえず動確用に、setup()でシリアル開いてloop()で一秒に一回適当な文字列を吐き続けるコードを書きました。コンパイルして書き込みます。書き込めないです。 色々確認した結果、UploadSpeedを下げれば何故か書き込めることがわかりました。それも、ただ下げるのではなく、特定の2速度のみ。

  • 115200
  • 256000

230400はダメでした。256000より速いのもダメでした。この二つにした場合のみ書き込めました。よくわからないですけど書き込めて、とりあえず動きました。

I2Cピン出してあるけど何番?

ピン配置が、Arduino UNO R3準拠(?)なので、デジタルピン側にSDAピン、SCLピンが出ています。この2ピンがないと、Arduino UNO用GroveシールドのI2Cコネクタが使えません。以前Seeeduino megaで嵌りました。(Seeduino megaは、アナログピンの横に[VCC,GND,SCL,SDA]のよくある順でI2C用ピンが引き出してあるので、これはこれで便利でした。)

前回のOLED付きボードでもそうでしたが、ボードによって割り当てがまちまちです。 とりあえず動けばいいやなのでテスター当ててみてみます。その結果以下のようになりました。

  • SCLピン=22
  • SDAピン=21

これはESP32 Arduino core最下部のdev boardのpin mapと同じですね。

UART(問題なし)

UART自体では特に問題なかったけど処理を雑に書いてたら配列領域外参照してることに気づかず、CPU haltして悩みました。

まとめ

  • とりあえず当初の目的のGroveシールド(でI2CとUART)を使うということは達成。
  • 端々怪しいけどなんとか使えてるよ。