1.はじめに
日頃Windows版Arduino IDEを使っているのですが、ESP32のコンパイルの遅さにうんざりしていたところ、Windows上でLinux版Arduino IDEを使えば超高速になるという記事を見て私もやってみたところ、本当に高速でした。
YouTubeで手順を解説されている方の動画やその他色々なサイトを参考にインストールしたのですが、現時点(2024年1月)で変わっているところが多くあり、動くようになるまで色々つまづいたので手順を記録しておきます。
CUIには慣れていないので極力GUIを使っています。
2. 前準備(Windowsの機能の有効化)
- Windowsの「スタートボタン」→「Windowsシステムツール」→「コントロールパネル」→「プログラム」→「Windowsの機能の有効化または無効化」と進む。
- 「Windowsの機能の有効化または無効化」(以下)が表示される。「Linux用Windowsサブシステム(WSL)」と「仮想マシン プラットフォーム」にチェックを入れ「OK」をクリックする。
- 画面の指示に従って再起動する。
3. WSL(Windows Subsystem for Linux)のインストール
4. Ubuntuのインストール
- Microsoft Storeの検索窓にubuntuと入力して検索し、入手をクリックしてインストールする
- windowsスタートメニューからUbuntuを起動
- 初回はユーザー名、パスワードを設定します
任意のユーザー名を入力してENTER
※ユーザー名には、小文字(a-z)、数字(0-9)、ダッシュ(-)、アンダースコア(_)が使用でき、予約名は使用できず、最大長32文字に制限されます。
- 続いてパスワードを入力
※パスワードには、小文字(a-z)、数字(0-9)と記号が使用できます
※パスワードは入力しても画面には何も表示されません
確認の為もう一度パスワードを入力
- インストールが完了
- パッケージ情報を更新しておきます
Ubuntu
sudo apt update sudo apt upgrade
5. ファイルマネージャーのインストール
sudo apt install nautilus -y
インストールが完了したらUbuntuのターミナルから
nautilus
又はWindowsスタートメニューからFiles(Ubuntu)をクリック
ファイルマネージャーが開きます
※私のPCの場合初めてファイルマネージャーを開いた時に画面がひどく乱れて表示されました。
PCを再起動してもう一度開くと次からは上のように正常に表示されました。
6. Arduino IDEのインストール
-
Windowsのブラウザで https://www.arduino.cc/en/software を開く
-
Newsletter不要の場合はJUST DOWNLOADをクリック
(Newsletter購読の場合はメールアドレスを入力してSUBSCRIBE & DOWNLOADをクリック)
-
WindowsのエクスプローラーからペンギンアイコンのLinuxを開き、Ubuntu→home→自分が設定したユーザー名フォルダの中に先程ダウンロードした arduino-ide_2.2.1_Linux_64bit.AppImage をコピーします。
コピーすると arduino-ide_2.2.1_Linux_64bit.AppImage・Zone.Identifier というファイルが自動的に作られるのですが、不要なので削除します。
-
Ubuntuのファイルマネージャーを開き、arduino-ide_2.2.1_Linux_64bit.AppImageを右クリックしPropertiesをクリック
-
Permissionsタブをクリックし
OwnerのAccessを「Read and Write」
自分のGroupを「Read and Write」
Allow executing file as programにチェックを入れてPropertiesを閉じます。
-
Ubuntuのターミナルで以下を順にインストール
Ubuntusudo add-apt-repository universe sudo apt install libfuse2 sudo apt install libgbm-dev sudo apt install libasound2 sudo apt install nodejs sudo apt install npm
ここで私は色々つまづきました。(つまづきポイントその1)
https://docs.arduino.cc/software/ide-v2/tutorials/getting-started/ide-v2-downloading-and-installing/ のページを見るとsudo add-apt-repository universe
sudo apt install libfuse2これだけで良いようでしたが、それだけだとまず
/tmp/.mount_arduinlyVvC1/arduino-ide: error while loading shared libraries: libgbm.so.1: cannot open shared object file: No such file or directory
とエラーが出て、次にlibgbm-devをインストールすると
file: Error opening file /home/user001/.gtk-bookmarks: No such file or directory
/tmp/.mount_arduinZTK2CY/arduino-ide: error while loading shared libraries: libasound.so.2: cannot open shared object file: No such file or directoryとエラーが出て、次にlibasound2をインストールすると
Checking for frontend application configuration customizations. Module path: /tmp/.mount_arduinKBQZr7/resources/app/lib/backend/electron-main.js, destination 'package.json': /tmp/.mount_arduinKBQZr7/resources/app/package.json
とエラーが出て、次にnodejsとnpmをインストールしてようやく起動できるようになりました。
-
Ubuntuのファイルマネージャー画面で arduino-ide_2.2.1_Linux_64bit.AppImage をダブルクリック
またはUbuntuのターミナルで
Ubuntu./arduino-ide_2.2.1_Linux_64bit.AppImage
-
一旦Arduino IDEを閉じます
7. USBのインストール
-
USBIPD-WINをインストール
下記よりMSI形式のインストーラーをダウンロードしてインストール
https://github.com/dorssel/usbipd-win/releases
インストールが完了したら、一度Windowsを再起動。 -
UbuntuにUSBIP ツールとハードウェア データベースをインストール
Ubuntusudo apt install linux-tools-generic hwdata sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*-generic/usbip 20
-
arduinoをUSB接続
Windowsスタートアイコンを右クリック→デバイスマネージャーをクリック
ポートにデバイスが表れているか確認
-
Windows PowerShellを管理者として実行
arduinoボードの接続先BUSIDを確認し、その接続先をwindows以外のクライアントとシェアできるようにします。
("1-3" 部分は自分のBUSIDに置き換えてください)PowerShellusbipd list usbipd bind --busid 1-3
もう一度 usbipd list で確認すると状態が"Not shared"から"Shared"に変わっていることが分かります。
5. UbuntuにUSBデバイスを接続
※ Ubuntuのターミナルが開いた状態で行ってください
("1-3" 部分は自分のBUSIDに置き換えてください)
usbipd attach --busid 1-3 --wsl --auto-attach
上手くいった場合はWSL Attachedと表示されます。
このようなメッセージが出る場合はセキュリティソフトのFirewall設定を見直す必要があります。(つまづきポイントその2)
usbipd: warning: A third-party firewall may be blocking the connection; ensure TCP port 3240 is allowed.
lsusb
7. Arduino IDEを起動しボードを選択します
8. サンプルプログラムBlinkを開く
9. ボードにアップロードする
10. 無事にアップロードできれば、まずはArduinoボードが使える状態です
この時点で速さ実感できますよ!
8. 終了の手順
- Arduino IDEウィンドウを閉じる
- ファイルマネージャーから起動していた場合はファイルマネージャーウィンドウを閉じる
- PowerShellウィンドウでCtrl+cでusbipdを終了する
- Ubuntuウィンドウを
exit
(またはlogout
)で終了 - PowerShellウィンドウを
exit
で終了
9. インストール後の起動手順
- AruduinoボードをUSB接続
- Ubuntuを起動
- PowerShellを起動しUbuntuにUSBデバイスを接続
("1-3" 部分は自分のBUSIDに置き換えてください)
usbipd attach --busid 1-3 --wsl --auto-attach
- Ubuntuのファイルマネージャーを起動
- Arduino IDEを起動
10. ESP32のインストール
-
ESPボードをUSB接続
-
PowerShellを管理者として実行
-
ESP32ボードの接続先BUSIDを確認し、その接続先をbind
("1-3" 部分は自分のBUSIDに置き換えてください)
※先のArduinoボードと同じUSBポートを使用する場合でももう一度bindしてくださいPowerShellusbipd list usbipd bind --busid 1-3
-
Ubuntuを起動
-
UbuntuにESP32を接続
("1-3" 部分は自分のBUSIDに置き換えてください)PowerShellusbipd attach --busid 1-3 --wsl --auto-attach
-
Ubuntu側で接続を確認
Ubuntulsusb
-
Arduino IDEを起動
-
BOARDS MANAGERアイコンをクリックし、検索窓にesp32と入力し、esp32 by Espressif Systemsをインストール
-
ESP32ボードとポートの選択
ボードの検索窓から"Select other board and port"をクリックし、詳細設定画面に移り
検索窓にESP32と入力し、ボードの種類を選択
ポートも選択し、OKをクリック
-
これでOKと思いきや、試しにアップロードしてみると
ModuleNotFoundError: No module named 'serial'
というエラーが出ました。ESP32は何やらpythonを利用しているらしく、"pyserial"が無いと言っているようです。(つまづきポイントその3)
ここから先はエラーが出なければ関係ないですが... -
ArduinoIDEを一旦閉じて、Ubuntuターミナルで"pyserial"をインストールするのですが、その前にpythonパッケージ管理ツール"pip"をインストール
sudo apt install python3-pip
次に"pyserial"をインストール
python3 -m pip install pyserial
WARNING: The scripts pyserial-miniterm and pyserial-ports are installed in '/home/user001/.local/bin' which is not on PATH.
パスを通します
nano ~/.bashrc
.bashrcの最終行に下記を追記
(user001になっているところは自分のユーザー名に変更してください)
export PATH=$PATH:/home/user001/.local/bin
Ctrl+X を押し、その後 Y を押す
File Name to Write: /home/user001/.bashrc
と聞いてくるのでenterで終了
以下のコマンドを実行して、変更を反映
source ~/.bashrc
もう一度ArduinoIDEを起動してESP32に何かプログラムをアップロード
Windows版ArduinoIDEと比べ格段の速さで無事アップロードできました。
11. 最後に
Linuxに疎くおかしなことを書いているかもしれませんので、ご指摘いただけると幸いです。
まだ日本語が扱えないので、次は日本語が使える状態にしたいと思っています。
長文にお付き合いいただきありがとうございました。