TinyGoを始めるのに苦労しました
windows10のWSLでTinyGoを使ってArduino UNOに書き込みをしようとしたらそれなりに嵌りました。
はじまり
とりあえず公式ドキュメントを確認 して必要なものをubuntuでダウンロードした。
LEDやら用意するのが面倒だったので、 チュートリアルをみつつ シリアル出力でhello worldを行おうとした。 書き込み時のオプションは 公式リファレンスで確認 して指定した。
使用したソースは以下の通り(チュートリアルのまま)
// embed/main.go
package main
import (
"time"
)
func main() {
count := 0
for {
println(count, ": Hello, World")
time.Sleep(time.Millisecond * 1000)
count++
}
}
書き込みコマンドは以下の通り。
tinygo flash -target arduino embed/main.go
実行すると以下のエラーが発生した。
error: unable to locate a serial port
sudoでも同様だった。
Arduino IDEをwindowsにインストールして書き込みをしてみるとこれは成功したのでwslでなにかあるのだろうという前提で調べ始めた。
検索
wslではwindows上のCOMポートを /dev/ttyS<n>
に繋げているらしいことは知っていたので、デバイスモニターでArduinoがつながっているポートを確認すると COM3
だったので wsl上では /dev/ttyS3
に繋がるんだろうと理解した。
とりあえずポートを明示してみたがダメ。
tinygo flash -target arduino -p /dev/ttyS3 embed/main.go
windowsとwslでなにかうまく繋がってないんだろうなと思っていたが、なかなかそんな感じの情報が出てこない。
ドライバーが入ってないとか、解決せずにクローズされたイシューばかり。
やっと求めてた情報が以下のページで見つけられた
https://qiita.com/KMNMKT/items/ae0e76a3e420b3ca16e6
どこみてもUSBをwslで認識させる手順を書いたページを見つけられなかったので、最初から繋がってるもんだと思っていたがどうやら自分で繋げないと行けなかったらしい。
作成時期が古かったのでコマンドは少し違ったがとにかくこれでwslからポートを確認できるようになった。
usbipd list # 4-1にArduinoが接続されていることを確認した
usbipd bind -b 4-1
usbipd attach --wsl --busid 4-1 # ここでwslのバージョンが古いと起こられたので `wsl --update` を実施した
usbipd attach
はwslを起動した状態で行う必要があるらしい。
上記を実施すると以下のデバイスが確認できた。
#INS ❯ ls /dev/ttyACM0
/dev/ttyACM0