Raspberry Pi でGolangを使えるようにする
Golang公式からlinuxのarm64をダウンロード
wget https://go.dev/dl/go1.23.1.linux-arm64.tar.gz
sudo tar -C /usr/local -xzf go1.23.1.linux-arm64.tar.gz
rm -rf go1.23.1.linux-arm64.tar.gz
# /usr/local/go/配下にgoがインストールされる
ls /usr/local/go/
# パスを通す
nano ~/.bashrc
export PATH=$PATH:/usr/local/go/bin
source ~/.bashrc
go version
# 適当なディレクトリで
go mod init go-sample
touch main.go
nano main.go
package main
import {
"fmt"
}
func main() {
fmt.Println("Hello")
}
実行
# go run で実行
go run main.go
go run .
# mainという実行ファイルを作成し、実行ファイルで実行
go build -o main
./main
Lチカ(LEDチカチカ)を行う
periph.io のすべてのコマンドラインツールとライブラリを最新のバージョンでインストール
go get -u periph.io/x/cmd/...
go mod tidy
0.5秒ごとにLEDを点滅させるプログラムをmain.goに記述
package main
import (
"log"
"os"
"os/signal"
"syscall"
"time"
"periph.io/x/conn/v3/gpio"
"periph.io/x/host/v3"
"periph.io/x/host/v3/rpi"
)
func main() {
// ハードウェアの初期化
if _, err := host.Init(); err != nil {
log.Fatal(err)
}
// GPIO4 (P1_7) のピンを取得
pin := rpi.P1_7
if pin == nil {
log.Fatal("GPIO ピンが見つかりません")
}
// 終了時に LED を消灯するためのチャネル
stop := make(chan os.Signal, 1)
signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM)
// 500ミリ秒ごとに LED を点滅させる
t := time.NewTicker(500 * time.Millisecond)
go func() {
for l := gpio.Low; ; l = !l {
if err := pin.Out(l); err != nil {
log.Fatal(err)
}
<-t.C
}
}()
// SIGINT または SIGTERM シグナルを受け取るまで待機
<-stop
// プログラム終了時に LED を消灯
log.Println("プログラムを終了します。LEDを消灯します...")
pin.Out(gpio.Low) // LED を消灯
t.Stop() // タイマーを停止
}
実行
go run main.go
終了は Ctrl + C