BeagleBoneとBME280の接続
写真は別のセンサへの配線もあるために線の本数が多くなっています。
ブレッドボードの奥にある緑の基板がBME280が載っているものです。
BME280への電源供給はP9-3のVDD_3V3(右赤)とP9-45のDGND(黒)です。
P9-19をSCL(白)、P9-20をSDA(青)として使います。
SCLとSDAの信号線は10kΩの抵抗を使ってVDD_3V3へプルアップします。
BME280の近くでVDD_3V3とDGNDの間に1μFのバイパスコンデンサを入れます。
BME280のi2cアドレスは0x76となるようにします。
rootでインストール
後ほどnode-redでも使うためにグローバルにインストールすると良いでしょう。
$ sudo su -
# npm -g install lsd-bme280
テストプログラム
1秒毎に気温・気圧・湿度を表示します。
var sleep = require('sleep');
var async = require('async');
var BME280 = require('lsd-bme280');
var bme280 = new BME280(0x76, '/dev/i2c-2');
async.forever(
(callback) => {
bme280.async_get_data((err, res) => {
console.log(res);
sleep.msleep(1000);
callback(null);
});
}
);
実行(中断はCtrl-c)
# node test.js
結果
node-redで使えるようにする準備
/root/.node-red/settings.js を編集します。
functionGlobalContextの中に以下のように
bme280:require('lsd-bme280')を追加します。
functionGlobalContext: {
bme280:require('lsd-bme280')
// os:require('os'),
// octalbonescript:require('octalbonescript'),
// jfive:require("johnny-five"),
// j5board:require("johnny-five").Board({repl:false})
},
そしてリブートすればnode-redのfunctionでbme280が利用できるようになります。
# reboot
node-redで使う
次のようにノードを配置します。
functionの名前はbme280とし中身は以下のように記述します。
var bme280 = context.get('bme280');
if (!bme280) {
var BME280 = global.get('bme280');
context.set(
'bme280',
new BME280(0x76, '/dev/i2c-2')
);
bme280 = context.get('bme280')
}
bme280.async_get_data((err, res) => {
var msg = {}
msg.payload = res;
node.send(msg);
})
return null;
この状態でデプロイしてtimestampの左側をクリックすると、その時の気温・湿度・気圧が次のようにデバッグ出力されます。
このようにjsonで出力されるので各値へは
気温:msg.payload.temp
湿度:msg.payload.humi
気圧:msg.payload.pres
で参照できます。
ダッシュボードを使って他のセンサやマイコンからの情報を表示してみたイメージ。
左縦の青色がBeagleBoneBlackでのBME280からの情報です。
参考
npm:https://www.npmjs.com/package/lsd-bme280
github:https://github.com/koki-ogura/lsd-bme280