2025年4月18日金曜日

golang in raspi/gobot-firmata(led,lm35,servo)

go.mod は、Go言語(Golang)のモジュールに関する情報が記載されたファイルです。プロジェクトで使用されるモジュールの依存関係を管理するために用いられます。
【主な役割】
  • プロジェクトの基礎となるモジュールを作成する
  • プロジェクトがどのパッケージに依存しているのかをGoツールチェーンに伝える
  • モジュールの中に含まれる全てのパッケージインポート用のパスプレフィックスを記述する
  • goコマンドがダウンロードする場所を示す
【作成方法】
  • 新しいプロジェクトを始めるときに、go mod init <モジュールパス>を実行することで作成されます
  • たとえば、github.com/ユーザー名/GoProject という名前の新しいモジュールを作成するには、次のコマンドを実行します
ソースコード
【go.modと連携するgo.sumファイル】
  • go.mod を元に取得したモジュールが go.sum 生成時のものと一致しているかをチェックするためのファイルです
  • go.mod と同様にビルドする際に使用されます


 https://qiita.com/Noctiluca/items/eb8a6b879b988e5f3ed1 ラズパイにGoインスト

gopathも通した go-testの.profile参照 firbaseはうまくいかんかった

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

まずcmdでc:users/fseigになり,go mod init gobot-exで初期化して

https://gobot.io/documentation/platforms/arduino/を参考にgobotインスト

@@blink.go

package main

import (
        "time"

        "gobot.io/x/gobot"
        "gobot.io/x/gobot/drivers/gpio"
        "gobot.io/x/gobot/platforms/firmata"
)

func main() {
        firmataAdaptor := firmata.NewAdaptor("/dev/ttyACM0")
        led := gpio.NewLedDriver(firmataAdaptor, "13")

        work := func() {
                gobot.Every(1*time.Second, func() {
                        led.Toggle()
                })
        }

        robot := gobot.NewRobot("bot",
                []gobot.Connection{firmataAdaptor},
                []gobot.Device{led},
                work,
        )

        robot.Start()
}

@@lm35.go 

lm35はhttps://qiita.com/KemoKemo/items/10fb644f9d359c35646aを参照

package main

import (

"flag"

"log"

"os"

"time"

"gobot.io/x/gobot"

"gobot.io/x/gobot/drivers/aio"

"gobot.io/x/gobot/platforms/firmata"

)


const (

exitCodeOK int = iota

exitCodeFailed

)


var (

port = flag.String("port", "/dev/ttyACM0", "the port of the Arduino")

)


func init() {

flag.Parse()

}


func main() {

os.Exit(run(os.Args))

}


func run(args []string) int {

firmataAdaptor := firmata.NewAdaptor(*port)

sensor := aio.NewAnalogSensorDriver(firmataAdaptor, "0") //  0 is Ao!


work := func() {

gobot.Every(1*time.Second, func() {

val, err := sensor.Read()

if err != nil {

log.Println("Failed to read", err)

return

}

cel := (5.0 * float64(val) * 100.0) / 1024

log.Printf("Raw-value:%v Celsius:%.2f", val, cel)

})

}


robot := gobot.NewRobot("sensorBot",

[]gobot.Connection{firmataAdaptor},

[]gobot.Device{sensor},

work,

)


err := robot.Start()

if err != nil {

log.Println("Failed to start a robot", err)

return exitCodeFailed

}

return exitCodeOK

}

package main


import (

  "fmt"

  "time"

 "gobot.io/x/gobot"

  "gobot.io/x/gobot/drivers/gpio"

  "gobot.io/x/gobot/platforms/firmata"

)

--------------servo.go-------------------------------------

https://qiita.com/n0bisuke/items/6032739481fbf78ad015をだいぶ改変した

func main() {


  firmataAdaptor := firmata.NewAdaptor( "/dev/ttyACM0")

  servo := gpio.NewServoDriver(firmataAdaptor,  "3")


  work := func() {

    gobot.Every(1*time.Second, func() {

      i := uint8(gobot.Rand(180))

      fmt.Println("Turning", i)

      servo.Move(i)

    })

  }


  robot := gobot.NewRobot("servoBot",

    []gobot.Connection{firmataAdaptor},

    []gobot.Device{servo},

    work,

  )


  robot.Start()

}

~                              

0 件のコメント:

コメントを投稿