Raspberry pi2で,電子工作が試してみたいと思います.
まずは、基本に忠実に、LEDを点灯させるところあたりから、チャレンジしたいと思います.
なお、golangでハードウェア制御が可能になるgobotというフレームワークに注目してみました.
◾️ Raspberry pi2のGPIO制御の動作確認から
Raspberry pi2でLEDを発光させる基本動作を確認します.
こちらの記事を参考にさせて頂きました.
https://tool-lab.com/2013/12/raspi-gpio-controlling-breadboard-2/
LEDとの結線ですが、物理ピン番号12(“GPIO 18″ピン)に接続しました。
実際にGPIO18ピンに接続したLEDを点灯してみます.
pi@raspberrypi:~ $ sudo echo 18 > /sys/class/gpio/export
pi@raspberrypi:~ $ sudo echo out > /sys/class/gpio/gpio18/direction
pi@raspberrypi:~ $ sudo echo 1 > /sys/class/gpio/gpio18/value
うまく点灯できたので、LEDを消灯して、元の状態に戻しておきます.
pi@raspberrypi:~ $ sudo echo 0 > /sys/class/gpio/gpio18/value
pi@raspberrypi:~ $ sudo echo 18 > /sys/class/gpio/unexport
◾️ golang環境準備
gobotを動作させるためには、go 1.4以上のgolang環境が必要なようです.
Special note for Raspian Wheezy users
The go vesion installed from the default package repositories is very old and will not compile gobot. You can install go 1.4 as follows:
ちなみに、apt-get inatallでgolangをインストールすると古いバージョンがインストールされてしまいます.
pi@raspberrypi:~/golang $ apt show golang
Package: golang
Version: 2:1.3.3-1
Installed-Size: 91.1 kB
Maintainer: Go Compiler Team <pkg-golang-devel@lists.alioth.debian.org>
Replaces: golang-weekly
Provides: golang-weekly
Depends: golang-go (>= 2:1.3.3-1), golang-src (>= 2:1.3.3-1), golang-doc (>= 2:1.3.3-1)
Conflicts: golang-weekly
Download-Size: 25.0 kB
Homepage: http://golang.org/
Section: devel
Priority: optional
APT-Sources: http://mirrordirector.raspbian.org/raspbian/ jessie/main armhf Packages
Description: Go programming language compiler - metapackage
The Go programming language is an open source project to make
programmers more productive. Go is expressive, concise, clean, and
efficient. Its concurrency mechanisms make it easy to write programs
that get the most out of multicore and networked machines, while its
novel type system enables flexible and modular program construction.
Go compiles quickly to machine code yet has the convenience of
garbage collection and the power of run-time reflection. It's a
fast, statically typed, compiled language that feels like a
dynamically typed, interpreted language.
.
This package is a metapackage that, when installed, guarantees
that (most of) a full Go development environment is installed.
よって、gobotのホームページの記述どおりの手順で環境整備します.
pi@raspberrypi:~ $ wget -O - http://dave.cheney.net/paste/go1.4.linux-arm~multiarch-armv6-1.tar.gz|sudo tar -xzC /usr/local -f -
pi@raspberrypi:~ $ echo '# Setup for golang' |sudo tee /etc/profile.d/golang.sh
pi@raspberrypi:~ $ echo 'PATH=$PATH:/usr/local/go/bin'|sudo tee -a /etc/profile.d/golang.sh
gobotを動作させるには、root権限が必要なようです.
よって、以降は、rootユーザで作業を進めます.
pi@raspberrypi:~ $ sudo -i
root@raspberrypi:~#
.profile
ファイルに以下の3行を追加しておきます.
export GOBIN=$HOME/golang/bin
export GOPATH=$HOME/golang
export PATH=$PATH:$GOPATH/bin:/usr/local/go/bin
作業用ディレクトリを作成しておきます.
root@raspberrypi:~# mkdir golang
root@raspberrypi:~# source .profile
root@raspberrypi:~# mkdir $GOPATH/bin
go環境のバージョンを確認してみます.
root@raspberrypi:~# go version
go version go1.4 linux/arm
さらに、試しに、goサンプルコードを動かしてみます.
package main
import "fmt"
func main() {
fmt.Println("Hello world!")
}
"Hello world!"が表示されましたので、golangは正しく動作しているようです.
root@raspberrypi:~# go run hello.go
Hello world!
◾️ gobotでLEDを発光させる
いよいよ、gobotの環境整備です.
root@raspberrypi:~# go get -d -u github.com/hybridgroup/gobot/... && go install github.com/hybridgroup/gobot/platforms/raspi
実際に、LEDを点灯させるサンプルコードです.
LEDとの結線ですが、物理ピン番号12(“GPIO 18″ピン)に接続しておりますので、一部修正しております。
package main
import (
"time"
"github.com/hybridgroup/gobot"
"github.com/hybridgroup/gobot/platforms/gpio"
"github.com/hybridgroup/gobot/platforms/raspi"
)
func main() {
gbot := gobot.NewGobot()
r := raspi.NewRaspiAdaptor("raspi")
led := gpio.NewLedDriver(r, "led", "12")
work := func() {
gobot.Every(1*time.Second, func() {
led.Toggle()
})
}
robot := gobot.NewRobot("blinkBot",
[]gobot.Connection{r},
[]gobot.Device{led},
work,
)
gbot.AddRobot(robot)
gbot.Start()
}
それでは、gobotで、サンプルコードを実行して、LEDを点灯させてみます.
root@raspberrypi:~# go run raspi_blink.go
2016/01/03 09:40:12 Initializing Robot blinkBot ...
2016/01/03 09:40:12 Initializing connections...
2016/01/03 09:40:12 Initializing connection raspi ...
2016/01/03 09:40:12 Initializing devices...
2016/01/03 09:40:12 Initializing device led ...
2016/01/03 09:40:12 Starting Robot blinkBot ...
2016/01/03 09:40:12 Starting connections...
2016/01/03 09:40:12 Starting connection raspi...
2016/01/03 09:40:12 Starting devices...
2016/01/03 09:40:12 Starting device led on pin 12...
2016/01/03 09:40:12 Starting work...
LEDは、点灯ではなくて、点滅でしたが、結果オーライでしょう.
LEDの点滅が確認できたので、最後にビルドしておきます。
root@raspberrypi:~# go install raspi_blink.go
以降は、ビルド済みのバイナリを起動することにします.
root@raspberrypi:~# raspi_blink
2016/01/03 14:09:54 Initializing Robot blinkBot ...
2016/01/03 14:09:54 Initializing connections...
2016/01/03 14:09:54 Initializing connection raspi ...
2016/01/03 14:09:54 Initializing devices...
2016/01/03 14:09:54 Initializing device led ...
2016/01/03 14:09:54 Starting Robot blinkBot ...
2016/01/03 14:09:54 Starting connections...
2016/01/03 14:09:54 Starting connection raspi...
2016/01/03 14:09:54 Starting devices...
2016/01/03 14:09:54 Starting device led on pin 12...
2016/01/03 14:09:54 Starting work...
gobotは、IoTエンジニアリング分野において、有望なフレームワークだと思います.
これからも、いろいろなIoTデバイスを動作させてみたいと思います.