1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【TinyGo】Golang で Raspberry Pi pico2 を Lチカする

Posted at

概要

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)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?