7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GoAdvent Calendar 2024

Day 1

TinyGo のインストールから L チカまで

Last updated at Posted at 2024-12-01

この記事は

Go Advent Calendar 2024 の一日目の記事です。
TinyGo は Go 言語のサブセットで、組み込み用途や、WASM ビルドに用いられています。
この記事では、TinyGo をはじめて触る Gophers に TinyGo のインストールから、L チカまで紹介します。Go 言語の延長で組み込み開発ができるのは、めちゃ楽しいので、ぜひ TinyGo おすすめです。

本記事は sago さんへのトリビュート記事です
Wio Terminal で TinyGo プログラミングを始めよう -- @sago35

ところで TinyGo Keeb Tour とは

TinyGo Keeb Tour というイベントを各地で開催しています。前半で、自作キーボードのはんだ付けを行い、後半で作った自作キーボードを TinyGo で制御するハンズオンを行います。2024 年は、神戸、東京、仙台、福岡で開催しました!2025 年は、香川県高松市を皮切りに、全国を Tour しますー!

TinyGo Keeb Tour よみものたち

TinyGo とは

組み込みと Wasm 用途向けの Go 言語サブセットです。
Offisial site
TinyGo Repository

TinyGo がサポートしているマイコンたち

TinyGo Supported microcontroller board - Official site
TinyGo Keeb では RP2040-Zero ボードを使用しています。

TinyGo のインストール

すでに Go 1.23 以降がインストールされている前提です
TinyGo では Go の最新のバージョンと一つ前のバージョンがサポートされています

Windows

  1. TinyGo Relasesのページから Windows 向けの Zip をダウンロードします
  2. Zip を伸展します
    • 例えば C:\ 直下
  3. TinyGo のフォルダを環境変数 PATH へ設定します
    • スタート > 検索ボックスに "環境変数" と入力します
    • "システム環境変数の編集" が候補として表示されるので、クリックします
    • "環境変数(N)..." をクリックします
    • "Path" を選択し、"編集" をクリックします
    • "新規" をクリックし、C:\tinygo\bin を入力し "OK" をクリックします
  4. スタート > 検索ボックスに cmd と入力し、コマンドプロンプトを起動します
  5. $ tinygo version t入力し、バージョンが表示されればインストール完了です

macOS

  1. Homebrew でインストール可能です
$ brew tap tinygo-org/tools
$ brew install tinygo

Linux

x86_64, Ubuntu/Debian の場合を記載します

$ wget https://github.com/tinygo-org/tinygo/releases/download/v0.34.0/tinygo_0.34.0_amd64.deb
$ sudo dpkg -i tinygo_0.34.0_amd64.deb

また、tinygo flash, tinygo monitor などのコマンド実行には、デバイスファイルを動的に管理するデーモン udev のルールを作成する必要があります

RP2040を例にします。

echo "ATTRS{idVendor}=='2e8a', ATTRS{idProduct}=='[01]*', MODE:='0666', ENV{ID_MM_DEVICE_IGNORE}='1', ENV{ID_MM_PORT_IGNORE}='1'" | sudo tee /etc/udev/rules.d/99-rp2040-udev.rules

tinygo version の実行

各 OS でターミナルを開いて $ tinygo version を実行し、下記のような表示になればインストール完了です。

$ tinygo version
tinygo 0.35.0-dev-3b806217 linux/amd64 (using go version go1.23.2 and LLVM version 18.1.2)

サンプルファイルの在処

TinyGo にはサンプルファイルが同梱されています
いろいろあって楽しそうですね!

$ tinygo env TINYGOROOTtinygo を配置したファイルパスが取得できます!

# Windows
$ for /F "tokens=*" %x in ('tinygo env TINYGOROOT') do dir %x\src\examples    
# Ubuntu/Debian
$ ls $(tinygo env TINYGOROOT)/src/examples

今回は TinyGo Keeb Tour のリポジトリから

01_blinky1/main.go こちらを参考に進めます

Ubuntu/Debian を例にすすめますー

package main

import (
	"image/color"
	"machine"
	"time"

	pio "github.com/tinygo-org/pio/rp2-pio"
	"github.com/tinygo-org/pio/rp2-pio/piolib"
)

type WS2812B struct {
	Pin machine.Pin
	ws  *piolib.WS2812B
}

func NewWS2812B(pin machine.Pin) *WS2812B {
	s, _ := pio.PIO0.ClaimStateMachine()
	ws, _ := piolib.NewWS2812B(s, pin)
	return &WS2812B{
		ws: ws,
	}
}

func (ws *WS2812B) PutColor(c color.Color) {
	ws.ws.PutColor(c)
}

var (
	white = color.RGBA{R: 0x20, G: 0x20, B: 0x20, A: 0x00}
	black = color.RGBA{R: 0x00, G: 0x00, B: 0x00, A: 0x00}
)

func main() {
	ws := NewWS2812B(machine.GPIO16)
	ws.PutColor(white)

	for {
		time.Sleep(time.Millisecond * 500)
		ws.PutColor(black)
		time.Sleep(time.Millisecond * 500)
		ws.PutColor(white)
	}
}

この内容を作業ディレクトリにコピーして、RP2040-Zero ボードに書き込んでみます

  1. RP2040-Zero とPCをUSB Type-cケーブルで接続します
  2. RP2040-Zero の "Boot" と "Reset" ボタンを同時押しして、ブートローダにはいります
  3. USBマスストレージとして認識されていることを確認します
$ ls /media/$(whoami)
  1. 01_blinky1 というディレクトリを作成します
    • $ mkdir /path/to/your/working/directory/01_blinky1
  2. $ go mod init 01_blinky1 && go mod tidy を実行します
  3. 上記の内容の main.go ファイルを作成し内容をコピーします
    • $ touch /path/to/your/working/directory/01_blinky1/main.go
    • $ vim /path/to/your/working/directory/01_blinky1/main.go
  4. 以下のコマンドを実行します
$ tinygo flash --target waveshare-rp2040-zero --size short ./01_blinky1

実行結果は、こんな感じです。

(写真がのるよ)

おわりに

TinyGo で組み込み開発の入口を体験していただきました。
TinyGo Keeb Tour 2025 へのご参加もぜひご検討ください!

ex-twitter で #tinygo_keeb のハッシュタグで検索していただくと、いろいろな作例を見ていただけます。

各地での開催情報は、TinyGo Keeb Tour のページでご確認いただけますー!

どっとはらい

7
1
2

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
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?