golangでRaspberry Piに繋いだセンサーの値を取得する

流行りに乗ってgolangの勉強を始めたんですが、クロスコンパイルが簡単にできてarmでも動くというので、家で埃を被っていたRaspberry Piで遊んでみました。

センサー購入

Raspberry Piはアナログ入力が無いので、デジタル入力が可能なセンサーを探すとI2Cという規格があることが分かりました。適当にググるとRaspberry Pi + 温度センサーで部屋の温度を測る こちらのサイトを見つけたのでとりあえずスイッチサイエンスでポチります。

接続

つなぎ方もよく分からんので、またぐぐると図付きで説明がありました

Raspberry Piの設定

さきほどのサイトを参考にさせて頂きました。 ちなみにRaspberry PiにはRaspbianがインストールしてあります。

/etc/modulesの編集

i2c-bcm2708
i2c

必要なライブラリのインストール

$ sudo apt-get install python-smbus
$ sudo apt-get install i2c-tools

/etc/modprobe.d/raspi-blacklist.confの編集

#blacklist i2c-bcm2708

golangを書く(書いてない)

良さげなライブラリないかな〜と探しているとこれを発見 EMBD しかもサンプルコードを見るとbmp180.go?
結果的に1行も書かずに取得できました。

macでの作業 最初にRaspberry Pi用にコンパイルできるよう設定します

$ cd $GOROOT/src
$ GOOS=linux GOARCH=arm ./make.bash

サンプルコードをRaspberry Pi用にコンパイルします

$ cd $GOPATH/src
$ go get github.com/kidoman/embd
$ cd github.com/kidoman/embd/samples
$ GOOS=linux GOARCH=arm go build bmp180.go

wifiで繋がったRaspberry PiにSCPで転送します

$ scp bmp180 pi@raspberrypi.local:/home/pi

Raspberry Piにログインして実行します

$ ssh pi@raspberrypi.local
$ ./bmp180
Temp is ~~~
Pressure is ~~~
Altitude is ~~~

取れた!