組み込みProgrammerのチラシの裏

Arduino Unoをgoで制御

| Comments

gobotとは、次世代ロボット/IoT frameworkで25のプラットフォームをサポートしている。 ArduinoやRaspberry piなどあり、単体として使うというよりIoTとして相互接続するのに便利。 ホストPCから各マイコンを制御するためのプラットフォーム。 なお、ここで試したホストPCはFedora 23。

概要

  • firmata : ホストPCと接続するためのプロトコル、マイコン用ソフトウェア、および制御ライブラリ
  • gort : マイコンをスキャンしたりfirmwareをアップロードするコマンドラインツール
  • gobot : ホストPCで動作し、firmata経由でマイコンを制御するプラットフォーム

インストール

gobot.ioのGetting Startedにも書いてある。

1
$ go get -d -u gobot.io/x/gobot/... && go install gobot.io/x/gobot/platforms/firmata

gort.ioから取得して適当な場所にインストールする。

1
2
3
$ gort arduino install
Attempting to install avrdude with apt-get.
sudo: apt-get: コマンドが見つかりません

fedoraなのでapt-getなんて入ってない。 仕方ないので、GitHub > gortからソースコードを取得し、 commands/arduino.goを確認。

1
2
3
4
5
6
7
8
9
10
11
switch c.Args().First() {
    case "install":
        switch runtime.GOOS {
        case "linux":
            fmt.Println("Attempting to install avrdude with apt-get.")
            cmd := exec.Command("sudo", "apt-get", "-y", "install", "avrdude")
            cmd.Stdout = os.Stdout
            cmd.Stderr = os.Stderr
            if err := cmd.Run(); err != nil {
                log.Fatal(err)
            }

avrdudeをインストールすればいいことが分かるので、 コマンドをdnfに置き換えてインストールする。

1
$ sudo dnf install -y avrdude

Lチカ

firmataをArduino unoにuploadする。

1
$ gort arduino upload firmata /dev/ttyACM0

FedoraからArduino unoを制御するソースコードは以下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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("arduino", "/dev/ttyACM0")
    led := gpio.NewLedDriver(firmataAdaptor, "9")

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

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

    robot.Start()
}

これを動かせば1秒ごとにLEDが点滅する。 シリアルのデバイスとGPIOのピンは環境ごとに変えたほうがいいかもしれない。

Comments