M.C.P.C. (Mamesibori Creation Plus Communication)

印刷屋から五反田のWeb屋に転職したCLのブログです。

BOSCH社 温湿度・気圧センサBME280用node.jsパッケージnpmに出来

オシゴトでは10年前のロートルなWeb制作環境にぶっこまれてセッションも知らないとか言いだしたのでさすがに黙っていられずいろいろ口出していたら技術力底上げの担当みたいなのになって言わなきゃよかった的なことになっていて、このままじゃ全然自分の技術つかんのよなーとか思って「わたし何でもできます」だと東京だとほんとに転職できねえのなとか実感しつつしこしこ実家のほうで使うIoT機器でも作んべかなと思っていまして、

秋月電子で売っている温湿度・気圧センサっていうのが、¥1,080 なのに3種類のセンシングできて便利ってんで、買ってみたわけですよ。

秋月電子の。1,080円

akizukidenshi-ogp-injector.dtpwiki.jp

スイッチサイエンスの。1,620円

www.switch-science.com

このセンサ、ガリレオ7でもストロベリーリナックスでも売っていますね。

そんで、こんだけあちこちで売られているセンサーなんだから、node.js で動かす作例ぐらいあるだろうと思って探したがなかった。Pythonの作例ならいっぱいあるわけですが、いまさらPythonもないわけです。 require('child_process').execSync; とかすればPythonをチャイルドプロセスで動かせるんでしょうけれども嫌なのです。Adafruitのライブラリがそんな構成になっている(node-adafruit-bme280)。

そこで、npm を散々探したら、node-bmp-280 という温度と気圧の2種類をとれるセンサ用のモジュールがあったので、改造して、node-bme-280 という名前で npm にアップロードしておきました。なんだこれ、npm は簡単すぎて CPAN よりもカオスな感じがするぞ!

node-bme280

インストールするには、

$ npm i node-bme280 --save

でいけます。サンプルプログラムとして、

var BME280 = require('node-bme280');

var barometer = new BME280({address: 0x76});

barometer.begin(function(err) {
    if (err) {
        console.info('error initializing barometer', err);
        return;
    }

    console.info('barometer running');

    setInterval(function() {
        barometer.readPressureAndTemparature(function(err, pressure, temperature, humidity) {
            console.info(
                'temp:',
                temperature.toFixed(2),
                '℃  pressure:',
                (pressure / 100).toFixed(2),
                'hPa  hum:',
                humidity.toFixed(2),
                '%'
            );
        });
    }, 1000);
});

実行結果

pi@raspberrypi:~/testapp $ node bme280.js
barometer running
temp: 32.62 ℃  pressure: 1005.20 hPa  hum: 69.35 %
temp: 32.59 ℃  pressure: 1005.17 hPa  hum: 69.34 %
temp: 32.59 ℃  pressure: 1005.21 hPa  hum: 69.34 %
temp: 32.58 ℃  pressure: 1005.22 hPa  hum: 69.34 %
temp: 32.58 ℃  pressure: 1005.21 hPa  hum: 69.34 %
temp: 32.57 ℃  pressure: 1005.20 hPa  hum: 69.34 %
temp: 32.56 ℃  pressure: 1005.20 hPa  hum: 69.34 %
temp: 32.54 ℃  pressure: 1005.18 hPa  hum: 69.34 %
temp: 32.55 ℃  pressure: 1005.22 hPa  hum: 69.34 %
temp: 32.55 ℃  pressure: 1005.22 hPa  hum: 69.34 %
temp: 32.53 ℃  pressure: 1005.23 hPa  hum: 69.34 %
temp: 32.52 ℃  pressure: 1005.20 hPa  hum: 69.33 %

て感じです。我が家は熱いですね。

あと、この手のセンサのやつは、校正できないっつーのがつらいかも。Python版の出力値と近いところが出ているから可とした。

これがあると、こんなのを作れるぞ!

これバッテリー駆動でどこからでもGPSと温度・湿度・気圧を DynamoDB に送り続けるやつ。

Raspberry Piにログ記録しないから電源いきなり切ってもOKな気がする。

journald のログのやつは、どうすっかな、 /var/run/systemd/journal ってSDカードのボリューム上だな。確か OverlayFS 使えるからそれで tmpfs で作ったRAMディスクのボリュームを /var/run/systemd/journal に重ねてしまえばいいんじゃないかなーとか思っているんだけど、甘いかな?