概要
Mac の CLI 環境で pico2 用のプログラムを TinyGo で記述しコンパイルし pico2 を動作させる
(VSCode とか使わなくてもできるんだよの記事)
TinyGo の導入
公式のHPにあるよう導入する
https://tinygo.org/getting-started/install/macos/
cmd
.shell
brew tap tinygo-org/tools
brew install tinygo
mac じゃなくても大体同じ
確認
> tinygo version
tinygo version 0.37.0 darwin/arm64 (using go version go1.23.5 and LLVM version 19.1.2)
Lチカコード
main.go
package main
import (
"machine"
"time"
"fmt"
"math"
)
var (
pin = machine.LED
pwm = machine.PWM4
ch = uint8(0)
bootTime time.Time
)
func main() {
Init()
for { Loop() }
}
func Init() {
pin.Configure(machine.PinConfig{Mode: machine.PinOutput})
pwm.Configure(machine.PWMConfig{Period: uint64(1 * time.Millisecond),})
ch, _ = pwm.Channel(pin)
bootTime = time.Now()
}
func Loop() {
fmt.Printf("elapsedTime = %d\r\n", time.Since(bootTime).Milliseconds())
duty := calcDuty(time.Since(bootTime).Milliseconds(), 2000)
pwm.Set(ch, duty)
time.Sleep(50 * time.Millisecond)
}
func calcDuty(elpsms, tmax int64) uint32 {
fduty := math.Sin(2.0 * math.Pi * float64(elpsms%tmax) / float64(tmax))
fduty += 1; fduty /= 2.0
return uint32(float64(pwm.Top()) * fduty)
}
コンパイル
go mod
なんでもいいから go mod init
しておく
> go mod init hoge
go: creating new go.mod: module hoge
go: to add module requirements and sums:
go mod tidy
tinygo build
> tinygo build -target=pico2 -o a.uf2
-target
オプションで hw を指定する
もちろん -target=pico
で pico を指定することもできる
対応している hw 一覧は
> tinygo targets
で確認できる
pico2 への書き込み
マウント
BOOTSEL
を押しながら USB 接続を行いマウントする
おそらくデフォルトだと NO NAME
としてマウントされる
> df -h |grep NAME
/dev/disk4s1 128Mi 212Ki 128Mi 1% 0 0 - /Volumes/NO NAME
書き込み
cp
コマンドで書き込む(多分 mv
でもいい)
> cp a.uf2 /Volumes/NO\ NAME
確認
0.5Hz でLEDがじんわり点滅する
fmt.Printf
の出力は usb serial に行くので
> ls /dev/tty.usbmodem*
/dev/tty.usbmodem1201
でどこにシリアルがマップされているか確認し
> sudo screen /dev/tty.usbmodem1201 115200
で serial 接続をする
elapsedTime = 209367
elapsedTime = 209417
elapsedTime = 209467
elapsedTime = 209518
elapsedTime = 209568
elapsedTime = 209618
elapsedTime = 209668
elapsedTime = 209718
elapsedTime = 209768
といった表示を確認できる
(終了は control + a k)