読者です 読者をやめる 読者になる 読者になる

taiyoh's memorandum

@ttaiyoh が、技術ネタで気づいたことを書き溜めておきます。

golangでBME280から情報を吸い出してよしなにする

相変わらず、goではなるべくニッチそうなlow layerなところを攻めております。
go用のI2C周りのライブラリはいくつかありますが、embdが割と素直な印象で、
実は先日BMP180というチップも買って、こちらであっさりと動かせるということを確認していました。

BMP180 気圧センサ(気温センサ付き)

BMP180 気圧センサ(気温センサ付き)

embd/bmp180.go at master · kidoman/embd · GitHub
↑このスクリプトをrpiで動かしてみたら修正なしで動いてしまい、かなりびっくりしました(とても優秀なサンプルでした)
ただ、僕の本命はBME280の方で、これは温度と気圧の他に湿度も計測出来る優れものです。
BME280搭載 温湿度・気圧センサモジュール

BME280搭載 温湿度・気圧センサモジュール

データシートを読んでると、BMP180と全然動かし方が違う。。。
http://trac.switch-science.com/wiki/BME280
当初はスイッチサイエンスさんが用意してくれたpythonスクリプトを元にgoに書き換えようとしましたが、
やっぱりスクリプト言語なので、よしなな型変換が多い。。。
一旦組み上がったので起動してみたら、温度が-84℃とか出てきたので、思わず笑ってしまいました。
github.com
↑動作確認のために上記のスクリプトを動かしてみたらちゃんとそれっぽい値は取れているので、恐らく結線は問題ないはず。
ということで、大元のチップメーカーであるBoschのドライバを参考にすることに。
GitHub - BoschSensortec/BME280_driver: Bosch Sensortec BME280 sensor driver
型や計算を上記のCのソースに沿う形に修正してみたところ、無事動きました!
f:id:sun-basix:20160208221724p:plain
最近、計測値の保存はAT&Tのm2xを使用しております。これも一応値に応じて何かをトリガーするとかできるっぽいです。やったことないけど。
rpiとチップはこんな感じで結線してます。
f:id:sun-basix:20160208212744j:plain

で、golangでBME280を動かすためのドライバは以下となります
github.com

gist7bdffe63dff403546c4e
動作サンプルはこんな感じ