gobotを使ってGo言語でIntel Edisonを動かす

hardware

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

弊社でのIntel Edison環境の開発はIntel XDK IoT Editionを使うことが多いですが、色々調べていたところgobotというものを存在を知りました。

gobotはGo言語で書かれたIoTやロボティクス用のフレームワークです。現時点で15種類のプラットフォームをサポートしています。

つまり、Intel Edisonでの開発にあたって、Arduino言語やIntel XDK+node.jsでは無く、Go言語で書けちゃうということですね。

やってみた

それではGetting Startedに従って、gobotでIntel Edisonの開発をやってみます。

Gobotをインストールする

一般的なGo言語の開発環境の設定は終わっている(Go言語がセットアップされ、GOROOTやGOPATHは設定済み)ものとします。ちなみに私の環境では以下のようになっています。

GOROOT=/usr/local/go
GOPATH=/Users/smokeymonkey/go

以下のコマンドを実行し、gobotをインストールします。

$ go get github.com/hybridgroup/gobot && go install github.com/hybridgroup/gobot/platforms/intel-iot/edison

Intel Edison用のクロスコンパイル設定を行います。

$ cd $GOROOT/src
$ sudo GOOS=linux GOARCH=386 ./make.bash --no-clean
Installed Go for linux/386 in /usr/local/go
Installed commands in /usr/local/go/bin

サンプルプログラムを実行してみる

gobotのディレクトリに移動し、サンプルプログラムをbuildしてみます。

$ cd /Users/smokeymonkey/go/src/github.com/hybridgroup/gobot
$ GOARCH=386 GOOS=linux go build examples/edison_blink.go
$ ls -alF edison_blink
-rwxr-xr-x  1 smokeymonkey  smokeymonkey  3129664  1 20 10:28 edison_blink*

buildで作成された実行バイナリファイルをscpでIntel Edisonに送り込みます。

$ scp edison_blink root@192.168.0.1:/home/root/

Intel Edisonにコンソールログインし、バイナリファイルを実行します。

~# cd /home/root
~# ls
edison_blink  otp.bin
~# ./edison_blink
2015/01/20 01:31:03 Initializing Robot blinkBot ...
2015/01/20 01:31:03 Initializing connections...
2015/01/20 01:31:03 Initializing connection edison ...
2015/01/20 01:31:03 Initializing devices...
2015/01/20 01:31:03 Initializing device led ...
2015/01/20 01:31:03 Starting Robot blinkBot ...
2015/01/20 01:31:03 Starting connections...
2015/01/20 01:31:03 Starting connection edison...
2015/01/20 01:31:03 Starting devices...
2015/01/20 01:31:03 Starting device led on pin 13...
2015/01/20 01:31:03 Starting work...

すると、Intel Edison Board for Aduinoの基盤上のLEDが光ります。

Gobotでアナログセンサーを使ってみる

これだけじゃつまらないので、目に見えて動くものを作ってみます。今回はGroveスターターキットに入っている光センサとLEDソケットを使って、光センサに合わせてLEDの光が増減する仕組みにしてみます。ちょっと分かりづらいと思いますが、光センサをGroveベースシールドのA0に、LEDソケットをD3に接続しています。

IMG_0400 3

作成したソースコードはこんな感じ。Analog Sensorのサンプルコードを参考にしています。

package main

import (
  "fmt"

  "github.com/hybridgroup/gobot"
  "github.com/hybridgroup/gobot/platforms/gpio"
  "github.com/hybridgroup/gobot/platforms/intel-iot/edison"
)

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

  e := edison.NewEdisonAdaptor("edison")
  sensor := gpio.NewAnalogSensorDriver(e, "sensor", "0")
  led := gpio.NewLedDriver(e, "led", "3")

  work := func() {
    gobot.On(sensor.Event("data"), func(data interface{}) {
      brightness := uint8(
        gobot.ToScale(gobot.FromScale(float64(data.(int)), 0, 4096), 0, 255),
      )
      fmt.Println("sensor", data)
      fmt.Println("brightness", brightness)
      led.Brightness(brightness)
    })
  }

  robot := gobot.NewRobot("sensorBot",
    []gobot.Connection{e},
    []gobot.Device{sensor, led},
    work,
  )

  gbot.AddRobot(robot)

  gbot.Start()
}

コンパイルし、実行ファイルをIntel EdisonにSCPで送り込みます。

$ GOARCH=386 GOOS=linux go build light_sensor.go
$ ls -alF light_sensor
-rwxr-xr-x  1 smokeymonkey  smokeymonkey  3181248  1 20 10:58 light_sensor*
$ scp light_sensor root@192.168.0.1:/home/root/

そしてIntel Edison上で実行します。

~# cd /home/root
~# ./light_sensor

すると、光センサに合わせてLEDの光が増減します!

gobotサンプル:光センサとLED

smokey monkeyさん(@smokeymonkey)が投稿した動画 -

さいごに

gobot、なかなか便利ではあるのですが、LCD用のドライバがまだ無かったりするので、もうちょっと対応デバイスが増えると良いなぁと思います。今後が楽しみです!