鳥なき里のマイコン屋(154) micro:bitでもGo!TinyGoで3機種目

Joseph Halfmoon

スマホ上でGo言語を始めてハマりました。スマホでGo、パソコンでGo、ラズパイ(Linux機)でGo。そしてTinyGo処理系を導入。マイコン相手にもコンパイルしてGoです。ラズパイPico、Seeeduino XiaoとGo、今回はBBC micro:bitであります。久しぶりのmicro:bitでLチカだあ。

※「鳥なき里のマイコン屋」投稿順Indexはこちら

TinyGoの凄いところは、実に幅広いマイコン相手にオブジェクトを生成できるところではないかと思います。それもパソコン上のGo言語と落差をあまり感じることなしにです(まあ、使い込んでいないので話半分で聞いてくだされ。)

現在までに動作確認したのは以下の2機種です。

    • Raspberry Pi Pico(RP2040搭載)関連記事はこちら
    • Seeeduino Xiao ( ATSAMD21A18搭載)関連記事はこちら

今回動作確認ということで吉例Lチカをいたしますのは、お馴染み、お子様の「教育用」に人気の BBC micro:bit であります。しかしてその実体は

Nordic nRF51822 搭載

Nordic社のnRFシリーズは「ブルートゥース」業界のほぼほぼ標準機じゃないかと思います。これ知らないとモグリ的なやつ。

参照ドキュメント

TINYGOの micro:bit のサポートについては以下にドキュメントがあります。このドキュメントには micro:bit V1.x系のみ書かれているみたいです。後でのべますが、V2.x系のサポートもある感じです。

BBC micro:bit

また、BBC micro:bit のハードウエアについては以下がお役立ちじゃないかと思います。今回使用のボードは V1.5ですが、以下のページの上の方にバージョン切り替えのボタンがあるので、押せば他のバージョンについても調べられます。

Hardware

開発用の母艦

現状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個といえども複数端子を操作しないとならないためです。

edit000

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系も選択可能に見えます。

targets

手元にV2.0があるので、後で確かめてみたいとおもいます。ただ、手元にはTinyGoできそうなボードがまだまだ多数あり「行列状態」なので、ちょいと先かな。なにせ、このところ「遊休」状態のボードが多いデス。TinyGoでカツを入れてやらないと(遊ばしていたのは自分ですが。)

鳥なき里のマイコン屋(153) ルネサスRX210マイコン、Lチカまでの手続きに心が折れる へ戻る

鳥なき里のマイコン屋(155) RISC-VでもGo!TinyGoで4機種目 MaixBit へ進む