この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
弊社でのIntel Edison環境の開発はIntel XDK IoT Editionを使うことが多いですが、色々調べていたところgobotというものを存在を知りました。
gobotはGo言語で書かれたIoTやロボティクス用のフレームワークです。現時点で15種類のプラットフォームをサポートしています。
- ARDrone
- Arduino
- Beaglebone Black
- Digispark
- Intel Edison
- Joystick
- Leap Motion
- Mavlink
- MQTT
- Neurosky
- OpenCV
- Pebble
- Raspberry Pi
- Spark
- Sphero
つまり、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に接続しています。
作成したソースコードはこんな感じ。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、なかなか便利ではあるのですが、LCD用のドライバがまだ無かったりするので、もうちょっと対応デバイスが増えると良いなぁと思います。今後が楽しみです!