実は去年のアドベントカレンダーに書こうと思っていた内容ですが、ようやくうまくいったのでまとめておこうと思います。
Chromebookも最近は嘘みたいにお安くなっているので、Arduino IDEを使って電子工作をするといった要望もあるかなと思います。Visual Studio Codeも正式に動作が確認されたと言うこともありますし、かなり開発サイドの状況もこの一年で変わってきたと言えるでしょう。
今回の内容は、うまく行かなかったことも含めてまとめたものになりますので、実際に成功する方法に関しては末尾に「ArduinoIDEの正しい導入手順」として、まとめておきますので、そちらをご覧ください。
Chromebookでの、Arduino IDEに関しては情報はあまりありません。検索して自分のブログがヒットするのが1番辛いのですが、参考になるページがありますのでそちらの情報をぜひご覧ください。(少し古いですが、この情報がほとんどすべてかもしれません)
参考
https://www.stevencombs.com/arduino/2020/01/20/arduino-on-chromeos.html
試行錯誤編
事前準備
ChromebookではLinuxコンテナを使用する事ができるようになっています。詳細に関してはここでは省略しますが、この情報は豊富にネットにあります。ChromeOSの設定UIにも有効化スイッチがあるので、そちら操作するだけでOKです。
参考
このLinuxコンテナ(Crostini仮想マシン)を有効化がされていないとArduino IDEを実行できないので必ず有効化してください。
Chrome OSのLinuxコンテナのディストリビューションは、Debianになります。
続く設定はLinuxコンテナ上で行うことになります。有効化後にCLIのコンソールを開きます。
Arduino IDEのダウンロード(この部分が大きな失敗部分でした)
先程の通り、ChromeOSのコンテナのディストリビューションはDebianです。そのため、Arduino IDEもDebianと同様の使用する設定ことになります。
ただし、今回使用しているPCはASUS Chromebook Flip C101PAなので、OSはARM32bitベースの処理系です。そこでダウンロードするArduino IDEもARMベース(32bit)のものとなります。(←ここが大きな誤解)

以下のリンクから
https://www.arduino.cc/en/software

ARM32bit版をダウンロードすることにしました。OSと合わせています。(※これが失敗のもとでした)
Arduino IDEのファイル展開
ダウンロードしたバイナリを展開していくことになります。ファイルはarduino-1.8.13-linuxarm.tar.xzとtar.xz形式になっているので展開するためのパッケージのインストールも必要になります。以下のコマンドでインストールを行なっておきます。
$ sudo apt update $ sudo apt install xz-utils
インストールが終了したら、Arduino IDEのダウンロードファイルを展開していきます。先に参考にしたリンクの通りに/optディレクトリにインストールを行っていくようにしていきます。
$ sudo tar -C /opt -xf arduino-1.8.13-linuxarm.tar.xz

これで、/optディレクトリにArduino IDEが展開されます。
インストール作業
インストールは以下のようにコマンドを実行していきます。
$ cd /opt/arduino-1.8.13 $ sudo ./install.sh

install.shを実行すると以下の様なメッセージが表示されますが、そのまま進めていって大丈夫です。普通だと失敗しているようなメッセージではあるのですが…

続いて、以下のコマンドを実行します。先程と同じinstall.shを実行していますが、2回目はsudoなしでの実行となります。
$ ./install.sh
こちらも実行時にエラーっぽいメッセージが出ますが、気にせずにすすめていきます。実行が完了すると、ユーザのホームディレクトリ(~)にDesktopディレクトリが作成されます。~/Desktop/arduino-arduinoide.desktopファイルが出来上がっていれば処理完了です。

インストール後の実行確認
これでインストール作業は完了しているので、ファインダーからArduino IDEを実行してみます。検索ボックスにArduino IDEといれることでアイコン表示されるのでそれを使用します。

ただ、アイコンを実行しても起動がうまく行われません。タスクバーには表示されてくるので、起動しようとはしているようなのですが…スプラッシュスクリーンの表示も行われません。
起動しない原因を調べる(1)
失敗で終わらせてもいいのですが、もう少し調べてみることにしました。 まずはアイコンから起動するのではなく、CLIのコマンドラインから実行してみました。
すると、Javaが存在しないというエラーがでていました(画面のキャプチャがなくてすみません)。そういえば、Arduino IDEはJavaで動いているので、Javaがインストールされていないと実行できないので、エラーがでるのは当然といえば当然です。ただ、参考のリンクの情報ではそんなことは触れられていないのはちょっと気になります。とりあえず、Java(JRE)のインストールを行って状況が変化するか試してみます。
DebianなどでのJRE(OpenJDK系)のインストールは以下のように行います。
$ sudo apt install default-jre
これでJavaの実行環境が整いました。ここからCLIでArduino IDEの起動を行っていきます。起動すると、スプラッシュスクリーンまでは表示されたので、うまく行ったか!と思ったのですが、

今度は以下のようなエラーメッセージが表示されます。

内容は、ネイティブライブラリ(soファイル)のロードで失敗したとのことでした。あと一歩というところまではきているのですが、エラーメッセージから得られる情報はありませんでした。
実はエラーメッセージに今回のトラブルの原因の内容が書かれていますが、ここでは気が付きませんでした。
起動しない原因を調べる(2)
結構大きい感じの壁にぶつかってしまったので、やめても良かったのですが、1年間の悩みをなんとかしたいと思いもう少し調べてみることにしました。
今回はインストールされている環境を見直してみることに、Linuxコンテナのバージョンをunameコマンドで調べ、更に先程インストールを行ったOpenJDK(JRE)のバージョンも確認してみました。

すると。あれ?ChromeOSの処理系はARM32bitなのに、Linuxコンテナ、JREはARM64bit系だとわかりました。ちょっとしょうもない勘違いをしていたようです。
結論としていえば、Arduino IDEはLinuxコンテナ内で動作するので、パッケージもARM64系のものをダウンロードしなければならなかったということです。
ということで、先程ダウンロードしたものを64bit系に変更してダウンロードを行い同じ作業を行ってみることにしました。

ダウンロードはarduino-1.8.13-linuxaarch64.tar.xzのように、アーキテクチャ名がaarch64が含まれているものになっているか確認しておきましょう。
まずは/optディレクトリとホームディレクトリのDesktopディレクトリを削除しておき、以下を実行していきます。
Arduino IDEの正しい導入手順
以下のようにArduino IDE(ARM64bit版)をダウンロードした後に作業を行います。
$ sudo tar -C /opt -xf arduino-1.8.13-linuxaarch64.tar.xz $ cd /opt/arduino-1.8.13 $ sudo ./install.sh $ ./install.sh
そして、同様に実行してみると・・・

スプラッシュスクリーンも表示され、無事にIDEも実行されました。

ちなみにですが、アーキテクチャ名がaarch64のArduino IDEのファイルにはJavaのディレクトリが含まれています。そのため、別途Java(JRE)をインストールする必要はないようです。

ArduinoIDEからLチカのコードをアップロードする
IDEが動いたのであとは、Arduinoを接続しアップロードができるかを確認します。まずは手始めにArduino Unoを接続してテストを行います。
ASUS Chromebook Flip C101PAのUSB AコネクタのポートにUSBケーブル経由でArduino Unoと接続を行います。すると、以下の様にOSからArduino Unoが認識されたとトーストが表示されます。

設定は都度行う必要があるので、この表示が行われたら【Linuxに接続】をクリックして、OSの【USBデバイスを管理する】というダイアログが表示されるので、トグルを有効側に変更します。切断すると再度設定が必要になるので注意が必要です。

設定後にArduino IDEのボード設定をArduino Unoへ、シリアルポートを/dev/ttyACM0(ArduinoUno)に変更しておきます。これて事前設定はOKです。先程のUSBデバイスの設定を行っていない場合正しくシリアルポートの設定がおこなわれないので、表示されていない場合には再度接続を行って接続設定を行っておきましょう。


シリアルが正常に設定されていれば、ボード情報を取得も以下のように成功します。

設定が終わったら、exampleの中にあるBlinkのコードをアップロードしてみます。すると無事にuploadが行われてLチカが行われるようになります。

Arduino Uno以外のボードはどうか?
結論から言ってしまうと、Chromebook側からデバイス認識が行われません(シリアルポートが設定できない)。そのため、シリアルポート設定ができずアップロードは行われません。
ChromeOS側設定されたものだけが認識をされるということなのかもしれませんが、現状では自分が最も使用したかったSeeeduinoが使用できないのでちょっと残念な結果になってしまいました。
他のArduinoのボードは試せていませんが、ボードはかなり限られてしまうのかなと思います。
おわりに
昨年から悩んでいたChromebook(ASUS Chromebook Flip C101PA)でArduino IDEの起動・書き込みはとりあえず解決しました。言ってみれば単なる勘違いだったのかもしれませんが、割と特殊な環境だったのでこのような勘違いが起きたのかもしれません。最近のChromebookはそもそも64bit処理系(Intel系もARM系もともに)がほとんどだと思うので、自分のような引っ掛かりはないと思います。
先入観として、ホストOSとゲストOSはアーキテクチャーを揃えなければならないという認識は、もう過去のものになったのだと認識しました。今後の注意を込めて、こういうことがあるのだということで、メモとしておいておこうと思います。
使用できるボードに制限はありますが、Arduino IDEが使えるようになったことでChromebookの可能性は広がりました。自分の使用する趣味作業であれば開発機はChromebookで十分という状況が出来上がってきた気がします。