Go言語で書かれたフレームワークGobotを触ってみる

担当のプロダクトでGo言語を使う機会が増えてきたため、チーム内で定期的に勉強会を開催しています。
今回はその勉強会で発表した内容を抜粋してまとめたのですが、Gobotという Go言語で書かれたフィジカルコンピューティングなどのためのフレームワークを見てみました。

Gobotとは

下記のようなサイトでなんだかワクワクしてしまいました。

f:id:yamamaijp:20160126195741p:plain

gobot.io

作ったもの

スイッチを押したらLEDが光る

使ったもの

  • MacOSX(Goインストール済)
  • Arduino Uno
  • スイッチ
  • LED
  • 抵抗

手順

1.Gobotインストール

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

2.パーツ組み立て
スイッチとLEDをArduinoのGPIOと接続します。
3.プログラミング
4.ビルド&実行

$ go build main.go
$ ./main

完成系は下記のようになります。


GobotでLチカ

ソースコード

今回もぼぼサンプルそのままで動かせました。
NewFirmataAdaptorの第2引数はシリアルポートに接続するためのポートで今回はUSBを指定しています。

package main

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

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

    firmataAdaptor := firmata.NewFirmataAdaptor("myFirmata", "/dev/tty.usbmodem1421")


    button := gpio.NewButtonDriver(firmataAdaptor, "myButton", "2")
    led := gpio.NewLedDriver(firmataAdaptor, "myLed", "13")

    work := func() {
        gobot.On(button.Event("push"), func(data interface{}) {
            led.On()
        })
        gobot.On(button.Event("release"), func(data interface{}) {
            led.Off()
        })
    }


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

    gbot.AddRobot(robot)

    gbot.Start()
}

gbot.Start()実行のところだけもう少し詳しく見てみる

1) robotのStart()

2) button_driverのStart()

3) led_driverのStart()

4) Driver interface
https://godoc.org/github.com/hybridgroup/gobot#Driver

Driver interfaceを実装した各種ドライバーで各デバイスを表現しているのがわかりました。

まとめ

  • マイコンを制御する部分や各デバイスを制御する部分が実装されているので簡単にパーツを動かす事ができる。
  • インターフェースの使い方など異なる仕様のものをまとめて処理する実装の参考になる。

おまけ

他の言語の姉妹プロジェクトもあります。

Ruby http://artoo.io/

Javascript http://cylonjs.com/