Go言語の動作確認、Androidスマホで始め、Linux機、Windows機でOK。TinyGoを導入し、ラズパイPico、Seeeduino Xiao、BBC micro:bitと3機種でもOKです。今回はマイコン4機種目、64ビットRISC-V機、Kendryte K210搭載Sipeed MAiX Bit。
※「鳥なき里のマイコン屋」投稿順Indexはこちら
TinyGoの機種毎ドキュメント
TinyGoのマイクロコントローラの説明ページから、MAiX Bitのページが以下に。
MAiX Bit にもいくつか変種あるのですが、MCUそのものはKendryte K210で共通です。ボード間の差異については今のところ気にしておりませぬ(それほど深いところ使ってないし。)
今回の開発用母艦はラズパイ4
TinyGoで「クロスコンパイル」するホスト機は Raspberry Pi 4 model B 機(Raspberry Pi OS <32 bit buster>)としました。MAiX BitのFlash書き込みに必要な Kflashというソフトウエアツールをインストール済のため。
これでラズパイ4は、ラズパイPicoとMAiX BitのTinyGoホスト機、WindowsPCがXiaoとBBC micro:bitのTinyGoホスト機となりました。
しかしソースの編集はWindowsPC上のVScodeで行っているので見かけはいつも同じ。
今回使用の実験用ソースコード
毎度毎度代り映えのしない吉例Lチカを繰り返していますが、機種により「光らせ方」に微妙な差異がありです。前回の BBC micro:bit はマトリックスLEDであったためにたった1個光らせるのに複数端子の操作が必要でした。今回のMAiX BitのオンボードLEDは
3色LED
です。LED1パッケージに3色のLEDが入っているタイプがオンボードに搭載されています。折角なので点滅というより「色変」するようにいたしました。また fmt.Printの出力も確かめます(ラズパイPicoで使ったGoのソースのチョイ変です。)
すでにラズパイPicoでTinyGoをやったときにリモート接続のVSCode上にTinyGoのプラグインもセットアップ済です。Maix Bitをに切り替える際に必要なのは、tinygo target コマンドを発行して maixbit を選択することです。以下の画面キャプチャの最下行、青色のステータス行に TinyGo: maixbit と書かれているのが見えますか?
今回実験に使用したソース、Pico用のものとあまり代り映えしないですが全文載せておきます。
package main import ( "fmt" "machine" "time" ) func main() { led1 := machine.LED1 led2 := machine.LED2 led3 := machine.LED3 led1.Configure(machine.PinConfig{Mode: machine.PinOutput}) led2.Configure(machine.PinConfig{Mode: machine.PinOutput}) led3.Configure(machine.PinConfig{Mode: machine.PinOutput}) var idx int = 0 for { fmt.Print("Maix Bit: ") fmt.Print(idx) fmt.Print("\r\n") led1.High() led2.Low() led3.Low() time.Sleep(time.Millisecond * 1500) led1.Low() led2.High() led3.Low() time.Sleep(time.Millisecond * 1500) led1.Low() led2.Low() led3.High() time.Sleep(time.Millisecond * 1500) idx++ } }
Flash書き込み
TinyGoのホームページに書かれているコマンドラインそのままで書き込もうとすると手元のラズパイ4機では以下のようにエラーとなります。
これは、MAiX BitをラズパイのUSBポートに接続すると /dev/ttyUSB0 と /dev/ttyUSB1 の2つのシリアルデバイスに見えるためだと思われます。以下のコマンドラインのように /dev/ttyUSB0 の方を選択してやらないと書き込めません。
$ tinygo flash -port /dev/ttyUSB0 -target=maixbit ./hello.go
書き込み成功したところが以下に。
実行結果
冒頭のアイキャッチ画像は青色点灯時ですが、右下のユーザLED、ちゃんと色が変わりますぞ。また fmt.Printでの書き出しの確認は以下のようにして行いました。
$ minicom -b 115200 -o -D /dev/ttyUSB0
上記のコマンドラインで観察できた出力の一部が以下に。
いやあ、RISC-V機でも全然問題ないっす。TinyGo万々歳であります。Lチカばかりではツマラナイのでそろそろいろいろと周辺回路をいじりたいのですが、まだTinyGoの待ち行列に並んでいるマイコンボードがあり。そいつらをやっつけてからですな、深みにハマっていくのは。