20: Intel Edison上でセンサーから取得した値をログ出力してみる【upm編】

よく訓練されたアップル信者、都元です。昨日のエントリーはこちらです。昨日はmraaライブラリを使ってセンサの値を取得しましたが、取れる値がプリミティブでした。要するにread()で取れる値というのは、AREF(特に繋いでいないので5V)を1024として何Vの電圧がピンに掛かっていたのかを取り出しただけです。

これを温度に変換するためによくわからない計算をしましたが、「温度センサーなんだからそもそも摂氏で値が取れればいいじゃん」という、より高水準なAPIも提供されています。

upm

このようなライブラリがupmです。upmは下記のように *1様々なセンサーをサポートしています。

upm_supported

それぞれ、センサーのチップ名で呼ばれているようで、何だか分かりにくいですが、ググればそれぞれ出てきます。ここでは前回も利用した構成でupm::GroveTempupm::GroveLightを使ってみましょう。ちなみに、残念ながら、音センサーについてはサポートリストに有りませんでしたので、上手く動かし切ることができませんでした。一応require('jsupm_mic’)で何かできるようですが、ドキュメントが無く…。

さて。今回はmraaではなくjsupm_groveをインポートします。そしてこのようにピンにアクセスするオブジェクトを手に入れます。

var groveSensor = require('jsupm_grove'); 
var tempPin = new groveSensor.GroveTemp(0);
var lightPin = new groveSensor.GroveLight(1);

var mic = require('jsupm_mic');
var mp = new mic.Microphone(2);

そして繰り返しの関数内で、以下のように値を取得します。

setInterval(function () {
    var date = new Date();
    console.log("==== " + date + " ====");
    var temp = tempPin.value();
    var light = lightPin.value();
    
    console.log(tempPin.name() + ": " + temp);
    console.log(lightPin.name() + ": " + light);

以下、結果です。前者が通常状態、後者がセンサーを手で覆った時の値です。温度は上がり、明るさは下がってますね。

==== Sat Dec 20 2014 01:10:05 GMT+0000 (UTC) ====
Temperature Sensor: 23
Light Sensor: 59
==== Sat Dec 20 2014 01:10:10 GMT+0000 (UTC) ====
Temperature Sensor: 28
Light Sensor: 5

温度センサーから取れる値は、摂氏(°C)です。→ 参照

光センサーから取れる値は、ルクス(lx)です。→ 参照

まとめ

実際に個別のセンサーから値を取る際は、mraaで電圧を読むような低水準な方法ではなく、そのセンサー実装に対応した高水準の読み取りロジックを使うのが良さそうです。

明日のエントリーはこちらです。

脚注

  1. ここに挙げたのは一部です。詳細はプロジェクトページを見て下さい。