Chromebook(ASUS Chromebook Flip C101PA)でArduino IDEを起動させる

実は去年のアドベントカレンダーに書こうと思っていた内容ですが、ようやくうまくいったのでまとめておこうと思います。

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です。

参考

support.google.com

このLinuxコンテナ(Crostini仮想マシン)を有効化がされていないとArduino IDEを実行できないので必ず有効化してください。

Chrome OSLinuxコンテナディストリビューションは、Debianになります。 続く設定はLinuxコンテナ上で行うことになります。有効化後にCLIのコンソールを開きます。

Arduino IDEのダウンロード(この部分が大きな失敗部分でした)

先程の通り、ChromeOSのコンテナのディストリビューションDebianです。そのため、Arduino IDEDebianと同様の使用する設定ことになります。 ただし、今回使用しているPCはASUS Chromebook Flip C101PAなので、OSはARM32bitベースの処理系です。そこでダウンロードするArduino IDEもARMベース(32bit)のものとなります。(←ここが大きな誤解)

f:id:ueponx:20201229010349p:plain

以下のリンクから

https://www.arduino.cc/en/software

f:id:ueponx:20201229001005p:plain

ARM32bit版をダウンロードすることにしました。OSと合わせています。(※これが失敗のもとでした

Arduino IDEのファイル展開

ダウンロードしたバイナリを展開していくことになります。ファイルはarduino-1.8.13-linuxarm.tar.xztar.xz形式になっているので展開するためのパッケージのインストールも必要になります。以下のコマンドでインストールを行なっておきます。

$ sudo apt update
$ sudo apt install xz-utils

インストールが終了したら、Arduino IDEのダウンロードファイルを展開していきます。先に参考にしたリンクの通りに/optディレクトリにインストールを行っていくようにしていきます。

$ sudo tar -C /opt -xf arduino-1.8.13-linuxarm.tar.xz

f:id:ueponx:20201228231953p:plain

これで、/optディレクトリArduino IDEが展開されます。

インストール作業

インストールは以下のようにコマンドを実行していきます。

$ cd /opt/arduino-1.8.13
$ sudo ./install.sh

f:id:ueponx:20201228232031p:plain

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

f:id:ueponx:20201228232059p:plain

続いて、以下のコマンドを実行します。先程と同じinstall.shを実行していますが、2回目はsudoなしでの実行となります。

$ ./install.sh

こちらも実行時にエラーっぽいメッセージが出ますが、気にせずにすすめていきます。実行が完了すると、ユーザのホームディレクトリ(~)にDesktopディレクトリが作成されます。~/Desktop/arduino-arduinoide.desktopファイルが出来上がっていれば処理完了です。

f:id:ueponx:20201228232818p:plain

インストール後の実行確認

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

f:id:ueponx:20201228233904p:plain

ただ、アイコンを実行しても起動がうまく行われません。タスクバーには表示されてくるので、起動しようとはしているようなのですが…スプラッシュスクリーンの表示も行われません。

起動しない原因を調べる(1)

失敗で終わらせてもいいのですが、もう少し調べてみることにしました。 まずはアイコンから起動するのではなく、CLIコマンドラインから実行してみました。

すると、Javaが存在しないというエラーがでていました(画面のキャプチャがなくてすみません)。そういえば、Arduino IDEJavaで動いているので、Javaがインストールされていないと実行できないので、エラーがでるのは当然といえば当然です。ただ、参考のリンクの情報ではそんなことは触れられていないのはちょっと気になります。とりあえず、Java(JRE)のインストールを行って状況が変化するか試してみます。

DebianなどでのJRE(OpenJDK系)のインストールは以下のように行います。

$ sudo apt install default-jre

これでJavaの実行環境が整いました。ここからCLIArduino IDEの起動を行っていきます。起動すると、スプラッシュスクリーンまでは表示されたので、うまく行ったか!と思ったのですが、

f:id:ueponx:20201229000013p:plain

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

f:id:ueponx:20201228234302p:plain

内容は、ネイティブライブラリ(soファイル)のロードで失敗したとのことでした。あと一歩というところまではきているのですが、エラーメッセージから得られる情報はありませんでした。

実はエラーメッセージに今回のトラブルの原因の内容が書かれていますが、ここでは気が付きませんでした。

起動しない原因を調べる(2)

結構大きい感じの壁にぶつかってしまったので、やめても良かったのですが、1年間の悩みをなんとかしたいと思いもう少し調べてみることにしました。 今回はインストールされている環境を見直してみることに、Linuxコンテナのバージョンをunameコマンドで調べ、更に先程インストールを行ったOpenJDK(JRE)のバージョンも確認してみました。

f:id:ueponx:20201229000334p:plain

すると。あれ?ChromeOSの処理系はARM32bitなのに、LinuxコンテナJREARM64bit系だとわかりました。ちょっとしょうもない勘違いをしていたようです。 結論としていえば、Arduino IDELinuxコンテナ内で動作するので、パッケージもARM64系のものをダウンロードしなければならなかったということです。

ということで、先程ダウンロードしたものを64bit系に変更してダウンロードを行い同じ作業を行ってみることにしました。

f:id:ueponx:20201229001114p:plain

ダウンロードは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

そして、同様に実行してみると・・・

f:id:ueponx:20201229000013p:plain

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

f:id:ueponx:20201229001557p:plain

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

f:id:ueponx:20201229001844p:plain

ArduinoIDEからLチカのコードをアップロードする

IDEが動いたのであとは、Arduinoを接続しアップロードができるかを確認します。まずは手始めにArduino Unoを接続してテストを行います。

ASUS Chromebook Flip C101PAのUSB AコネクタのポートにUSBケーブル経由でArduino Unoと接続を行います。すると、以下の様にOSからArduino Unoが認識されたとトーストが表示されます。

f:id:ueponx:20201229002122p:plain

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

f:id:ueponx:20201229002334p:plain

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

f:id:ueponx:20201229002904p:plain

f:id:ueponx:20201229002909p:plain

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

f:id:ueponx:20201229003251p:plain

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

f:id:ueponx:20201229003210p:plain

Arduino Uno以外のボードはどうか?

結論から言ってしまうと、Chromebook側からデバイス認識が行われません(シリアルポートが設定できない)。そのため、シリアルポート設定ができずアップロードは行われません。 ChromeOS側設定されたものだけが認識をされるということなのかもしれませんが、現状では自分が最も使用したかったSeeeduinoが使用できないのでちょっと残念な結果になってしまいました。

他のArduinoのボードは試せていませんが、ボードはかなり限られてしまうのかなと思います。

おわりに

昨年から悩んでいたChromebookASUS Chromebook Flip C101PA)でArduino IDEの起動・書き込みはとりあえず解決しました。言ってみれば単なる勘違いだったのかもしれませんが、割と特殊な環境だったのでこのような勘違いが起きたのかもしれません。最近のChromebookはそもそも64bit処理系(Intel系もARM系もともに)がほとんどだと思うので、自分のような引っ掛かりはないと思います。

先入観として、ホストOSとゲストOSはアーキテクチャーを揃えなければならないという認識は、もう過去のものになったのだと認識しました。今後の注意を込めて、こういうことがあるのだということで、メモとしておいておこうと思います。

使用できるボードに制限はありますが、Arduino IDEが使えるようになったことでChromebookの可能性は広がりました。自分の使用する趣味作業であれば開発機はChromebookで十分という状況が出来上がってきた気がします。

/* -----codeの行番号----- */