📌

WSL2でArduinoが使えるようなので使ってみた

2022/02/04に公開
2

これは何?

最近、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

cat結果

通信できてそうです。

Discussion

zedzed

こんにちわ!
素晴らしい記事をありがとうございます。
おかげさまで 下記の環境で書き込みできました。

  • Windows 10 Pro 21H2 19044.1889
  • Ubuntu 20.04.4 LTS (5.10.102.1-microsoft-standard-WSL2)
  • Windows Subsystem for Linux Update - 5.10.102.1
  • usbipd-win 2.3.0
  • avrdude 6.3-20171130

余談かもですが、usbipd-win 2.3.0 では

usbipd wsl attach --busid 1-2 --auto-attach

とすると、切れても再接続しようとしてくれるようです。

あと、デタッチが

usbipd wsl deattach --busid 1-2

となっていますが、

usbipd wsl detach --busid 1-2

が正しいようです。Google翻訳
英語難しいです(´・ω・`)

axtaxt

お役に立ててうれしいです。

usbipd wsl attach --busid 1-2 --auto-attach

なんと、地味に便利になりましたね。

detach

修正しました^^;
ありがとうございます!