44
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Golang meets Arduino

Last updated at Posted at 2014-08-10

最近、Golang に興味があり、たまたま手もとに Arduino UNO R3 あったので、このふたつをインテグレーションできないかと思っていたら、GOBOT というフレームワークを見つけたのでちょっと試してみました記録です。

ゴール

フィジカル・コンピューティングにおける "Hello, world" であるところの LED をチカチカさせる。

機材と材料

今回、利用した機材と材料はつぎのとおりです。

  • MacBook Air / OS X 10.9.4 Darwin 13.3.0
  • USB ケーブル ABタイプ
  • Arduino UNO R3
  • ブレッドボード: 1個
  • LED (赤): 1個
  • 1kΩ 抵抗 (茶黒赤金): 1本
  • 柔らかいジャンパワイヤ: 2本

これらをコネクトした全体図。

141826.jpg

緑のジャンパワイヤを Arduino UNO の GND ピンに刺しています。黄色のジャンパワイヤを 9 ピンに刺しています。

141527.jpg

緑のジャンパワイヤをブレッドボードの j26 に、黄色のジャンパワイヤを i20 に刺しています。抵抗器は i22i26 に刺します。LED はマイナス側のカソード (足の短いほう) を h22 に、プラス側のアノード (足の長い方) を h20 に刺します。

20140810 141609.jpg

セットアップ

go を使えるようにします。

$ brew install go
$ vim ~/.bash_profile
export PATH=$PATH:/usr/local/opt/go/libexec/bin
export GOPATH=$HOME/.golang
export GOROOT=/usr/local/opt/go/libexec
$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/hoge/.golang"
GORACE=""
GOROOT="/usr/local/opt/go"
GOTOOLDIR="/usr/local/opt/go/pkg/tool/darwin_amd64"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"

gobot をインストールします。

$ go get -d -u github.com/hybridgroup/gobot/... && go install github.com/hybridgroup/gobot/platforms/firmata

プロジェクトのディレクトリを作成します。今回は、LED を点滅させるプロジェクトなので blink としました。

$ mkdir ~/gobot-projects/blink
$ cd ~/gobot-projects/blink
$ vim blink.go

gobot のリポジトリにサンプルが用意されているので、それをベースにコードを準備します。

blink.go
/* blink.go
 * This small program lets you turn on and off a LED every 1s.
 */

package main

import (
  "time"

  "github.com/hybridgroup/gobot"
  "github.com/hybridgroup/gobot/platforms/firmata"
  "github.com/hybridgroup/gobot/platforms/gpio"
)

func main() {
  gbot := gobot.NewGobot()

  firmataAdaptor := firmata.NewFirmataAdaptor("arduino", "/dev/ttyACM0")
  led := gpio.NewLedDriver(firmataAdaptor, "led", "13")

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

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

  gbot.AddRobot(robot)
  gbot.Start()
}

デヴァイスのポート (USB) を確認しておきます。

$ ls /dev/tty.usb*
/dev/tty.usbmodem1411

このままだとアダプタのデヴァイス /dev/ttyACM0 とピンの番号 13 がマッチしないので以下のように修正します。

blink.go
...

func main() {
  gbot := gobot.NewGobot()

  firmataAdaptor := firmata.NewFirmataAdaptor("arduino", "/dev/tty.usbmodem1411")
  led := gpio.NewLedDriver(firmataAdaptor, "led", "9")

  ...
}

実行

これで準備ができましたので、実行してみます。

$ go run blink.go
2015/11/15 20:46:47 Initializing Robot bot ...
2015/11/15 20:46:47 Initializing connections...
2015/11/15 20:46:47 Initializing connection arduino ...
2015/11/15 20:46:47 Initializing devices...
2015/11/15 20:46:47 Initializing device led ...
2015/11/15 20:46:47 Starting Robot bot ...
2015/11/15 20:46:47 Starting connections...
2015/11/15 20:46:47 Starting connection arduino on port /dev/tty.usbmodem1411...
2015/11/15 20:46:51 Starting devices...
2015/11/15 20:46:51 Starting device led on pin 9...
2015/11/15 20:46:51 Starting work...

LED が 1秒に 1回点滅するのが確認できたでしょうか(静止画でチカチカしてないけどイマジネーションで補完)

163059.jpg

おまけ

gobot の周辺には、gort という "RobotOps" のためのコマンドライン・ツールキットや、ロボティックデヴァイスを管理する robeaux という AngularJS べースのダッシュボードなどもあるようです。

ソース

http://gobot.io/
http://golang.org/
http://gort.io/
http://robotops.com/
GopherCon 2014 Gobot: Go Powered Robotics and Physical Computing by Ron Evans and Adrian Zankich
Arduinoをはじめよう 第2版 (Make:PROJECTS)

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?