スマホ上でGo言語を始めてハマりました。スマホでGo、パソコンでGo、ラズパイ(Linux機)でGo。そしてTinyGo処理系を導入。マイコン相手にもコンパイルしてGoです。ラズパイPico、Seeeduino XiaoとGo、今回はBBC micro:bitであります。久しぶりのmicro:bitでLチカだあ。
※「鳥なき里のマイコン屋」投稿順Indexはこちら
TinyGoの凄いところは、実に幅広いマイコン相手にオブジェクトを生成できるところではないかと思います。それもパソコン上のGo言語と落差をあまり感じることなしにです(まあ、使い込んでいないので話半分で聞いてくだされ。)
現在までに動作確認したのは以下の2機種です。
今回動作確認ということで吉例Lチカをいたしますのは、お馴染み、お子様の「教育用」に人気の BBC micro:bit であります。しかしてその実体は
Nordic nRF51822 搭載
Nordic社のnRFシリーズは「ブルートゥース」業界のほぼほぼ標準機じゃないかと思います。これ知らないとモグリ的なやつ。
参照ドキュメント
TINYGOの micro:bit のサポートについては以下にドキュメントがあります。このドキュメントには micro:bit V1.x系のみ書かれているみたいです。後でのべますが、V2.x系のサポートもある感じです。
また、BBC micro:bit のハードウエアについては以下がお役立ちじゃないかと思います。今回使用のボードは V1.5ですが、以下のページの上の方にバージョン切り替えのボタンがあるので、押せば他のバージョンについても調べられます。
開発用の母艦
現状TinyGoの「クロスコンパイル?」に使えるマシンは Raspberry Pi 4 model BとWindows10 PCの2機種あります。Picoはラズパイ4、XiaoはWindowsPCで開発です。今回のBBC micro:bit はWindowsPCといたしました(micro:bitの開発は以前PCだったので。)Xiaoの回でインストール済のVScode上のTinyGoプラグインでターゲットを
microbit
と変更すればOKであります。micro:bit 用のLチカプログラムを編集しているところが以下に。なにやらちょいとメンドい設定をしていますが、micro:bit は5x5のLEDアレイを搭載しているため、左上隅のLED1個といえども複数端子を操作しないとならないためです。
BBC micro:bit 用左上隅Lチカのソース
LEDマトリックスの結線、V1.x系とV2.x系で異なります。以下はV1.x系で大丈夫な「筈」の設定(確認はV1.5機だけであります。)
package main import ( "machine" "time" ) func main() { ledCOL1 := machine.LED_COL_1 ledROW1 := machine.LED_ROW_1 ledROW2 := machine.LED_ROW_2 ledROW3 := machine.LED_ROW_3 ledCOL1.Configure(machine.PinConfig{Mode: machine.PinOutput}) ledROW1.Configure(machine.PinConfig{Mode: machine.PinOutput}) ledROW2.Configure(machine.PinConfig{Mode: machine.PinOutput}) ledROW3.Configure(machine.PinConfig{Mode: machine.PinOutput}) ledROW1.High() ledROW2.Low() ledROW3.Low() for { ledCOL1.Low() time.Sleep(time.Millisecond * 100) ledCOL1.High() time.Sleep(time.Millisecond * 100) } }
上記ソース microbit_blink.go をビルドしてUSBポートに接続したmicro:bit に書き込むコマンドが以下に。何てお楽な。
$ tinygo flash -target=microbit ./microbit_blink.go
これにて冒頭のアイキャッチ画像同様のLチカとなりまする。
V2.xもイケるのか?
ご存じのとおり、BBC micro:bitにはV2.x系というバージョンが存在します。メモリ量キツキツのV1.xに比べて余裕の大容量。容量だけでなくCPU性能も大幅向上であります。表面の上部の「顔」部分に色が塗られているのがV1.x系、「顔」が金色なのがV2.x系(タッチセンスの端子になっている)です。裏返すとV2.x系は右下にV2の表示があるはず。
さきほどのTinyGoのWebページにはV1.x系の記述しかなかったですが、tinygo targetコマンドでは以下のように V2系も選択可能に見えます。
手元にV2.0があるので、後で確かめてみたいとおもいます。ただ、手元にはTinyGoできそうなボードがまだまだ多数あり「行列状態」なので、ちょいと先かな。なにせ、このところ「遊休」状態のボードが多いデス。TinyGoでカツを入れてやらないと(遊ばしていたのは自分ですが。)