1
0

Raspberry Pi 4 model B で Golangを使う

Last updated at Posted at 2024-09-12

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チカチカ)を行う

写真.png

01.png

名称未設定ファイル_drawio_-_draw_io.png


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

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