AT SAMの部屋(3) XiaoでもGo! TinyGoでXiaoの吉例Lチカ

Joseph Halfmoon

Go言語の処理系TinyGoを使用すると、Go言語で書いたソースをMCU向けにコンパイルしてFlashに書き込み、実行可能。別シリーズにてラズパイPicoでは成功。今回はSeeeduino Xiao(Microchip SAMD21マイコン搭載)を復活、吉例LチカをTinyGoで行ってみます。母艦はWindowsPC。

なんで今まで使ってみなかったかなと思うくらいTinyGo気に入りました。まだまだ発展途上だとは思うのですが、手持ちのボードの多くで対応です。今回は久しぶりで超小型マイコンボード(そしてお手頃価格)のSeeeduino Xiaoを復活させて、とりあえずGoで書いたLチカを動作させてみます。なお、XiaoボードのMCUは米Microchip社のAT SAMD21G18Aマイコン (Arm Coretex-M0+コア)搭載です。

ラズパイPico用にTinyGoするときはRaspberry Pi 4 model Bを母艦(ラズパイ4の拡張端子でSWDデバッグ用の配線が取り出せるため)でした。今回のXiaoでは、Windows10 PCを母艦といたしとうございます。

母艦への開発環境のインストール

以下のTinyGoの公式ページによると

Quick install > Windows

Scoopからの Go + TinyGo のインストールが「お勧め」だったです。Scoopは、UbuntuやRaspberry Pi OSにおける apt みたいなCUIベースのパッケージマネージャです。PowerShell開いて2行打ち込みでScoopのセットアップ完了、さらに数行打ち込めばGo言語本体+TinyGoのセットアップまで完了するようです。CUI好きの年寄りですが、WindowsPCでは「伝統的な」セットアップに拘っているので、Scoopのお誘いには乗りませんでした。すみません。まずはGoの公式

Go Downloads

へ行って最新版のGoのWindows用インストールパッケージをダウンロードしてきてインストールいたしました。続いて、TinyGoのQuick install Windowsのページの下の方の

Manual install

からTinyGoの処理系のインストール用のファイルをダウンロードしてきて全手動でインストールいたしました。Windowsの上は各種開発環境で込み合っていて幾つも準備済のコマンドプロンプト用の起動ファイル毎にPATHや環境変数が異なっているためです。

そしてVScode。別シリーズでのラズパイ4へのリモート接続時に、TinyGoおよびGoのプラグインは既にインストール済です。でも、ここでちょいとトラブリました。

VScodeは Tinygoのbinにパスが通った状態で起動しないといけない

ようです。そうしないとTinyGoのモジュール定義などを発見してくれないので困ります。

VScodeを起動後、これまた別シリーズで引っ掛かりましたが、

tinygo target

コマンドを発行して、ターゲットを選択しておかないとなりません。今回はXiaoがターゲットなので以下のように xiao を選びます。ビックリするくらい選択肢が多いです。でも今後数がもっと増えたらうざくないかいリストが長すぎて。TargetXIAO

起動後のVScode画面で、TinyGo用のソースを開いているところが以下に。

VScodeXIAO

Xiaoで走らせるLチカソース

TinyGoのexampleフォルダには多数のサンプルソースが格納されています。それをコピーさせていただいて、点滅させるLEDのところだけ書き換えました。冒頭のアイキャッチ画像のとおり、小さなXiaoボードの外側にLEDを2個接続してあるためです。今回はD2端子に接続してある赤色LEDを使用してみました。なお、ロウアクティブです。

package main

import (
    "machine"
    "time"
)

func main() {
    led := machine.D2
    led.Configure(machine.PinConfig{Mode: machine.PinOutput})
    for {
        led.Low()
        time.Sleep(time.Millisecond * 500)

        led.High()
        time.Sleep(time.Millisecond * 500)
    }
}

XiaoボードをPCのUSB端子に接続し、以下のコマンドを発行したところ、予定通りにLEDが点滅をはじめました。

$ tinygo flash -target=xiao xiao_blink.go

XiaoボードでもGoできますな。ううむ、もう一枚Xiaoボード買おうかしら。小さなXiaoボードにはデバッグIFは搭載されておらんのですが、Xiaoボード自体をプログラムしてデバッグIFにできるらしいです。するといろいろ使える?

AT SAMの部屋(2) SAMD21、GPIOのドライブ・ストレングス設定 に戻る

AT SAMの部屋(4) XiaoでもGo!Goroutineで並行処理、どこまでいけそう? へ進む