実は去年のアドベントカレンダーに書こうと思っていた内容ですが、ようやくうまくいったのでまとめておこうと思います。
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
で十分という状況が出来上がってきた気がします。