メインコンテンツまでスキップ

· 約5分

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

sudo chmod 666 /dev/ttyACM0 で書き込み出来ようにした上で改めて tinygo flash -target arduino embed/main.go を実行するとめでたく書き込みが成功した。
tinygo monitor で期待通り動作もしていことが確認できた。

#CMD ❯ tinygo monitor -target arduino -baudrate=9600
Connected to /dev/ttyACM0. Press Ctrl-C to exit.
5 : : Hello, World
0 : Hello, World
1 : Hello, World
2 : Hello, World
3 : Hello, World
4 : Hello, World

残った課題として usbipd attach はどうもArduinoを挿すときに毎回しないといけないっぽいのでこれをどうにかしたい。

· 約3分

1次元のセル・オートマトンをある程度おなじインターフェースで扱えるようにするためのmoduleとして gitlab.com/yoko-chance/textile を作製した。
その具体的な実装は gitlab.com/yoko-chance/knit に分けた。

たぶん6,7年くらい前にpythonでセル・オートマトンの実装をはじめて、golangを覚えようとgolangで作り直してそこから具体的な実装以外をTextileに切り分けたのが2020年ぐらいらしい
その頃のバージョンはあんまりうまくできてなくて、あんまりうれしい感じじゃなかった気がする。
最近0から考え直して作り直したのがいまのバージョン。

最初のバージョンはウルフラムのセル・オートマトンから実装を始めたのもあって、だいぶそれに思考が寄ってたと思う。
1次元の反応拡散系のシミュレーションに使おうとしてかなり苦戦した記憶がある。

1次元の反応拡散系のシミュレーションはずっとやりたかったことで、今回の作り直しでとりあえずかたちにするところまで進められそうな気がしてきた。
これについてはまたそのうち書く。

KnitにはTextileを使った具体的な実装を追加していく予定。
サンプル saple/diffusion/main.go を動かすとこんな感じ。
まだ1ステップで広がるのが1マスとなりまでしか出来ていないので、その実装からやっていく。

#INS ❯ go run sample/diffusion/main.go
0000000000000000000000000000000000000000111111111111111111110000000000000000000000000000000000000000
0000000000000000000000000000000000000000111111111111111111110000000000000000000000000000000000000000
0000000000000000000000000000000000000000111111111111111111110000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000
0000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000

· 約1分

そんなに見せるものがあるわけではないですが、いろんなところのいろんな動きを見てると個人サイトのひとつもあったほうがよさそうだなと思ったので。

とりあえず辛うじてある見せるものをまとめていくところから始めます。