📌
WSL2でArduinoが使えるようなので使ってみた
これは何?
最近、Arduinoを触ったのですが、WSL2からも触れるらしいので環境構築してみた話です。
何が必要?
WSL2はまだUSBのシリアルを直接扱う機能は無いそうなのですが、Windowsを介してアクセスする方法が提供されています。
※microsoftのdevブログに詳しい話があります。
上記devブログにありますが下記が必要です
- Windows 11
- Linux Kernel version 5.10.60.1以降
- WSL 2
- usbipd-win(の最新版とあります)
↑microsoftのリリースノートでlinux-msft-wsl-5.10.60.1を確認すると、USB-IPとArduinoのconfigがenableになっている模様、他のデバイスの場合はKernelの再コンパイルが必要なのかも。
usbipd-winインストール
Winでこちらをインストール
手順は省略。
WSL2側で
sudo apt install linux-tools-5.4.0-77-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.4.0-77-generic/usbip 20
デバイスをWindows側でアタッチ
Arduinoをつないでコマンドを実行
> usbipd wsl list
BUSID DEVICE STATE
1-2 USB シリアル デバイス (COM3) Not attached
1-7 インテル(R) ワイヤレス Bluetooth(R) Not attached
1-8 Integrated Camera Not attached
↑私の環境の場合、1-2がBUSIDのようなので下記でアタッチできます。
usbipd wsl attach --busid 1-2
再度リストを確認すると
> usbipd wsl list
BUSID DEVICE STATE
1-2 USB シリアル デバイス (COM3) Attached - Ubuntu-20.04
1-7 インテル(R) ワイヤレス Bluetooth(R) Not attached
アタッチできた模様
デタッチは下記
usbipd wsl detach --busid 1-2
Arduinoのシリアルで確認
確認用にWindows側のArduinoIDEで下記のようなシリアルに対して出力するinoを書き込んでみます。
void setup(){
Serial.begin(9600);
}
void loop(){
int bytesSent = Serial.println("hello from Arduino");
delay(5000);
}
WSL2側で確認
さきほどのattachを実行後、
deviceは下記で探しました
❯ dmesg | grep tty
[ 0.082115] printk: console [tty0] enabled
[42894.917197] cdc_acm 1-1:1.0: ttyACM0: USB ACM device
/dev/ttyACM0の模様
下記で動作確認します
❯ sudo stty 9600 -F /dev/ttyACM0 raw -echo
❯ sudo cat /dev/ttyACM0
通信できてそうです。
Discussion
こんにちわ!
素晴らしい記事をありがとうございます。
おかげさまで 下記の環境で書き込みできました。
余談かもですが、usbipd-win 2.3.0 では
とすると、切れても再接続しようとしてくれるようです。
あと、デタッチが
となっていますが、
が正しいようです。Google翻訳。
英語難しいです(´・ω・`)
お役に立ててうれしいです。
なんと、地味に便利になりましたね。
修正しました^^;
ありがとうございます!