【Arduino自動化01】Arduino開発環境の導入
本記事では、
- 機材とソフトウェアの準備
- ArduinoIDE(開発環境)の導入
- サンプルプログラムを動かす(コンパイルと書き込み)
- ArduinoとNintendo Switchにつなぐ(動作確認)
を紹介します。
もくじは下記の通りです。
準備するもの(PC以外)
最低限、準備するものは「switch本体」「Arduino Leonardo」「ケーブル」の3つです。
ただ、自動化することを前提にする場合は、switchの給電をしながらArduinoをつなぎたい場面が多く、上記に加え「純正充電器(Switchについてるやつ)」「ホリのUSBハブスタンド(または純正のswitchドック)」があるとさらに捗ります。
ちなみに、ArduinoとSwitch本体をつなぐケーブルは、USBハブスタンドやドックを使う場合はUSB Aオス、直接つなぐ場合にはUSB Cオスでそれぞれケーブルの種類が変わるので注意しましょう。USBケーブルはデータ通信可能なものなら適当に変換アダプタを噛ませてもOKです。ただし、充電ACアダプターは任天堂純正のものを使いましょう。
なお、当然のことですが、PCを使ってArduinoにプログラムを書き込むので、PCとArduinoをつなぐUSBケーブルも必要に応じてご用意ください(PCのUSB端子をあらかじめ確認しておきましょう)。
2021年1月5日追記:Arduino Leonardoのみ、商品リンク貼っておきます。
2021年2月4日追記:その他筆者使用機材は下記記事にまとめました。
【Arduino自動化 番外編3】筆者の使用機材一覧【紹介記事】
準備するもの(PCソフトウェア)
ハードウェアは買えば終わりですが、ソフトウェアはダウンロードとインストールの作業が必要になります。PCに慣れている人なら20-30分ほどで終わるかと思います。
大まかには
になります。
筆者はWindows 10なので基本的にスクショも説明もこれに準じます。あしからず。
Arduino IDEのダウンロード
基本的に、PCはWindowsだろうがMacだろうがLinuxだろうが、Arduino公式がサポートしているものであればなんでもOKです。ちなみに筆者の使用PCはWindows 10です。
公式サイト(https://www.arduino.cc/en/software)から自身にあったバージョンのものをダウンロード・インストールしてください。
なお、Windows App版は色々と不具合があるようなのでおすすめしません。仕様を理解できる人以外は素直にインストーラー版のものをダウンロードしてください。
ダウンロードするのは、Legacy IDE (1.8.X)です*1。
ちなみに、ダウンロードの画面に進むと、寄付(Donation)を募られます。支援したい方やArduinoに協賛・共感できる人は是非とも、金額を選択または入力して「Contribute & Download」を押しましょう。無論、持ち合わせがない人や今回の寄付を見送る人は「Just Download」でも問題ありません。
ダウンロードしたら、そのままインストールしてください。Windowsインストーラー版の人は「arduino-x.x.x-windows.exe(x.x.xはバージョン)」をダブルクリックすると勝手にインストールされるはずです。
Arduino AVR boards 1.8.2のインストール
Arduino IDEをインストールしたら、まずはAVR boardsをインストールします。これは、Arduino Leonardoをちゃんと使えるようにするためのおまじないです。おそらく、ダウンロード時にデフォルトでインストールされているはずですが、もしなければインストールしてください。
ArduinoIDEを起動し、上部のメニューバーから「ツール」→「ボード」→「ボードマネージャ」を押し、出てきた画面で「Arduino Leonardo」と検索すると出てくるはずです。
なお、2020/11/7現在、AVR boardsの最新版は1.8.3ですが、1.8.2にしないと次にインストールする「ArudunoSTL」と競合してコンパイルができないという既知のバグ(同様の投稿)があるようなので、もし、1.8.3がすでにインストールされていたら1.8.2にダウングレードしてください。
(上級者向けインフォメーション:AVR boardsを1.8.3のまま進める場合は、次にインストールするArduinoSTLのバージョンを1.3.3にしてください)。
ArduinoSTLのインストール
次に、ArduinoSTLをインストールします。STLというのはStandard Template Libraryの略です。ライブラリというのは、よく使うプログラムの機能をひとまとめにしたパッケージのことです。
インストール方法は、公式WebからZIP形式でダウンロードして所定フォルダにインストールする方法と、ArduinoIDE上でライブラリマネージャを使う方法があります。本記事では、バージョン管理が楽でわかりやすい後者を採用します。
上部のメニューバーから「スケッチ」→「ライブラリをインクルード」→「ライブラリを管理」を押し、ライブラリマネージャを開きます。そこで、「Arduino STL」と検索し、インストールを押してください。
なお、2020/11/7現在のバージョンは1.1.0です*2。上記の手順でAVR boardsを1.8.2にダウングレードした人は必ず「1.1.0」を選択してインストールしてください。
インストールが終わったら、一度ArduinoIDEを閉じてください。
SwitchControlLibraryのダウンロード
本記事では、Arduino Leonardoで、Switchコントローラー機能をプログラムするにあたって、「SwitchControlLibrary」というライブラリを使います。「SwitchControlLibrary」はGithub(https://github.com/celclow/SwitchControlLibrary)からダウンロードできます。
【重要】2021年2月27日追記:今年の1月24日にこのライブラリのメジャーアップデート(ver 2.0.0)がありました。下方互換性が無いため、本記事を参考にする場合は「ver 1.0.0」をダウンロードしてください。
なお、本ライブラリはcelclow氏がMITライセンスにて無償で配布しているものとなります。ライブラリの詳細説明は他サイトや同梱のReadMeに譲りますが、そもそも無保証のものであるという前提と、有志による提供であることを念頭に使用しましょう。
ZIPをダウンロードしたら解凍し、Arduinoのライブラリフォルダにフォルダごと入れてください。なお、この作業はArduino IDEが終了している状態で行うことを推奨します。
ArduinoのライブラリフォルダはWindows版の場合、下記2種類あります。どちらでも同じように動くはずですが、個人的にはユーザドキュメント側のほうが良いと思います。
- ユーザドキュメント直下のArduinoフォルダ【おすすめ】
(例 C:\Users\<ユーザ名>\Documents\Arduino\libraries ) - 本体インストールフォルダ(Program files(x86))のArduinoフォルダ
(例 C:\Program Files (x86)\Arduino\libraries )
boards.txtの書き換え
実は、ここまでの作業で開発環境は完成しているのですが、NintendoSwitchの自動化にはあとひとつ、ステップを踏む必要があります。
この状態でプログラムを書いて、Arduino LeonardoをNintendo Switchにつないでも、Switch本体からコントローラーとして認識されず、自動化ができません。そこで、ArduinoをSwitchコントローラーとして騙すために、ボード情報を書き換えます。
この作業はArduinoIDEを終了している状態で行うことを強く推奨します。
Windows版の場合、ユーザの権限などによって参照される「boards.txt」の場所が違うらしく、下記フォルダに同じファイル構成で存在します。よくわからなければAppDataフォルダの方を更新してみて、様子を見てみましょう。Switchに挿して動かなければ、ここのboards.txtの書き換えが怪しいです。
なお、環境によって、boards.txtがどこにあるのか、あるいは複数あるのかなどが変わります。ともかく、下記フォルダを辿ってみてください*3。
※AppDataフォルダが見つからない場合、「隠しファイル」の表示をオンにしてください。
※Windows標準の「メモ帳」では正しく動かない報告があります。テキストエディタを利用してください。
- AppDataフォルダ内【原則こちらを書き換える】
C:\Users\<ユーザ名>\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.2 - Program filesフォルダ内【上記でうまく行かなければこちらも書き換える】
C:\Program Files (x86)\Arduino\hardware\arduino\avr
書き換える内容は下記4箇所です。デフォルトのboard.txtなら285行目・286行目・311行目・312行目が書き換え対象になると思います。
- leonardo.vid.1=0x2341 ⇒ leonardo.vid.1=0x0f0d
- leonardo.pid.1=0x8036 ⇒ leonardo.pid.1=0x0092
- leonardo.build.vid=0x2341 ⇒ leonardo.build.vid=0x0f0d
- leonardo.build.pid=0x8036 ⇒ leonardo.build.pid=0x0092
※280行目~320行目「Arduino Leonardo」の設定項目部分(書き換え済)
余談ですが、今回書き換えたvidとpidはそれぞれ、「ベンダー・アイディ」「プロダクト・アイディ」と呼ばれるもの。要するに、Switchがこの情報を参照してコントローラーの種類を把握しているので、ここを書き換えれば、Switchをだまくらかせる仕組みです。今回使う「SwitchControlLibrary」では、ホリの「ポッ拳DXプロパッド」に擬態させるので、上記の「board.txt」のleonardo.vid.1・leonardo.build.vidを「0x0f0d」に、leonardo.pid.1・leonardo.build.pidを「0x0092」にそれぞれ変更します。
なお、ネットで拾ってきた情報だと↓のような騙し方があるようです。
プログラミングやエンジニアリングに興味のある方は色々と調べてみると面白いかもしれません。
VID,PID → 対応するコントローラー
0x0f0d, 0x00c1 → HORI HORIPAD for Nintendo Switch
0x0f0d, 0x0092→ HORI Pokken Tournament DX Pro Pad(今回擬態したもの)
0x057e, 0x2009 → Nintendo Switch Pro Controller
0x057e, 0x2007 → Nintendo Switch Joy-Con (Right)
0x057e, 0x2006 → Nintendo Switch Joy-Con (Left)
サンプルスケッチのコンパイル
ここまでお疲れさまでした。以上で開発環境のインストールは完了です。
念の為、動くことを確認するために、ArduinoIDEを起動して、「ファイル」→「新規作成」を押して、下記スケッチをコピペしてください。
ちなみに、「スケッチ」というのはArduinoのプログラムという意味です。
※Aを連打するだけのスケッチ(プログラム)
コピペしたら、ArduinoIDEの検証ボタン(左上のチェックマーク)をクリックします。下側にステータスバー(コンソール)に「コンパイルが完了しました」と出れば正常にコンパイル(機械語に変換)ができています。なお、もし、「エラーが発生しました」などが出てくる場合は、その内容でGoogleやYahooで検索すると、似たような内容が出てくるので、それで対処してください。
そのままArduinoをPCとつないで、こんどは「マイコンボードに書き込み」をクリックします。この際、「ツール」→「ボード」→「Arduino Leonardo」にチェックが入っていることを確認してください。また、「ツール」→「シリアルポート」→Arduino Leonardoが刺さっているCOMポート番号になっていることを確認してください。
「ボードへの書き込みが完了しました」となれば正常終了です。
動作確認
ここまでできていれば、あとは実際に動作確認のみです。
スケッチを書き込んだArduino LeonardoをNintendoSwitchに差し込みます。
差し込んでからおおよそ3~5秒ほどでコントローラー(ポッ拳DXコントローラー)と認識して入力を受付始めます。
上記のサンプルプログラムはひらすらAを連打するプログラムですので、A連打で動作確認できる場所で動作確認します。
ポケモン剣盾なら、ワイルドエリアの「ハシノマはらっぱ」にいる穴掘り兄弟で試すとわかりやすいです。兄弟の前でArduino LeonardoをSwitchに差し込むと、ひたすら話しかけてくれます。これでワットがある限りいつまでも穴を掘り続けてくれますね。
以上、Arduino Leonardoを使ったポケモン剣盾の自動化にあたり、開発環境の構築と、サンプルスケッチの動作確認でした。
かなり大変だったかと思いますが、ここまでできてしまえば後はいろんなWebサイトからプログラムを拝借して使うもよし、自分でプログラムを書いて自動化するもよし、素敵な自動化ライフが待っていることでしょう。
このブログ記事が、その一助となれば幸いです。
ではでは。 c⌒っ.ω.)っ
【注意】ライブラリやボード、Arduino IDEのアップデートは慎重に
以下2024/1/7追記:(Switch自動化をこれからやろうと思っている人に向けて)
Switch自動化の環境構築を目的としてArduino IDEを導入した場合は、不用意にアップデートをしないようにしてください(無論、自己責任です。セキュリティ的な脆弱性などをはらむ可能性があるので)。
Arduino IDE側のおせっかい機能(正しい話なのですが…)により、アップデートを促す内容が出てくることがあります。よくわからない人は、下記画像のような「新しいバージョンが入手可能になりました」とか「ボードとライブラリにアップデートがあります」という文言が出てきても無視をしてください。
不用意にアップデートをすると、せっかく構築した環境が変わってしまい、例えば、ソースコードがコンパイルできなくなったり、コンパイルはできても、SwitchからArduinoが認識されなくなったりします。
具体的には、ボード(Arduino AVR)のバージョンが変わるとboards.txtが書き換えられてしまうため、SwitchがArduinoをコントローラーとして認識できなくなってしまいます。他にも、その他予期しない部分のバージョン競合が起こる可能性があります。
また、ライブラリのアップデートにおいても、ArduinoSTLのバージョンは、上記Arduino AVR(ボード)のバージョンと相互に干渉するため、これらのバージョンを正しく理解して更新せねばなりません。
このあたりは、他のツール類やソフトウェアにも当てはまります。アップデートをすることで、何が変化しどうなるのか、自身が正しく理解できるように努めてください。
(追記ここまで)
ではでは。c⌒っ.ω.)っ
次の記事:
【Arduino自動化02】雪中渓谷のワットショップの目玉商品を全自動回収【カンムリ雪原】
*1:本記事では、公開当初に動作確認ができた組み合わせでのバージョンを紹介しております。筆者は2022/9頃に2.0.0に更新をしてコンパイル不可に陥った経験があるためArduino Legacy IDEに戻す運用をしました。2024年現在は治っている可能性はあります。Arduino IDE 2.2.XでのSwitch自動化の動作確認の報告はあるようです。すでにArduino IDE 2.X.Xで動作している方はダウングレードは不要です
*2:2022/12/25追記:先の手順でArduino AVRを1.8.2にしたらSTLは必ず1.1.0にしてください。やむなくArduino AVRを1.8.3にする場合は、STLを1.3.3にしてください
*3:2023/1/7追記:コンパイルの際に使われているboards.txtの場所については、Arduino IDEの「環境設定」内部の「設定」タブにある「より詳細な情報を表示する」のチェックボックスを「コンパイル」側に入れて、任意のinoファイルをコンパイル(検証)することで、コンソール(ログ欄)の3行目あたりに「Using board 'leonardo' from platform in folder: <boards.txtの場所>」と表示されます。どうしても見つからない場合はこちらを確認してください