LoginSignup
16

More than 5 years have passed since last update.

【IoTを実感しよう!】温度センサのデータをクラウドに保存する(node.js×Raspberr pi)

Last updated at Posted at 2015-09-21

前回までの記事でRasberry pi 上に構築したnode.jsで温度センサのデータを取得できるようになったので、これをクラウドに保存します。

使うクラウドはニフティクラウド mobile backend(以下mBaaS)という、データストア(DB)からプッシュ通知の配信基盤まで提供しているものを利用します。このサービスにはnode.jsにも対応しているJavaScript SDK Version 2もあるのでそれを利用します。今回は利用導入から解説をします。

mBaaSの利用登録を行う

利用登録は下記の要領で行います。

スクリーンショット 2015-09-21 19.41.44.png

スクリーンショット 2015-09-21 19.42.00.png

利用開始すると下記のような画面が出てきます。

スクリーンショット 2015-09-21 19.50.16.png

アプリとはアプリ用のサーバー環境と捉えてください、このアプリ名に「ncmb_temper」と入力して、新規作成をクリックしてください。
スクリーンショット 2015-09-21 19.51.18.png

正常に作成されると、上記の画面が出ます。
この「アプリケーションキー」と「クライアントキー」は後ほど利用します。
後述するSDKの初期化の部分で利用します。
利用登録は以上

mBaaSへ温度データを保存する

Raspbery pi に構築したnode.js上からmBaaSに温度データを保存するには、まずRaspbery pi にmBaaSのSDKをインストールする必要があります。npmインストールができるのでそれを行います。以下のnpmコマンドでインストールが行えます。

$ npm install -S ncmb

さて上記のコマンドまで行ったらコードを書きましょう。
温度センサのデータを取得し、クラウドに保存するコードは以下になります。

temper.js

var NCMB = require("YOURPATH/ncmb_js/lib/ncmb");

// 2. mobile backendアプリとの連携
var ncmb = new NCMB("YOUR_APPLICATIONKEY","YOUR_CLIENTKEY");

var BMP085 = require('./bmp180.js');

var sensor = BMP085({address: 0x77,
                     mode: 3,
                     units: 'metric'});

setInterval(function() {
  sensor.read(function (err, data) {
    console.log("pressure:" +data.pressure);
    console.log("temperature:" +data.temperature);

    var TemperatureClass = ncmb.DataStore("Temperature");
    var temperatureClass = new TemperatureClass();
    var today = new Date();
    temperatureClass.set("temperature",data.temperature);
    temperatureClass.set("date",today);
    temperatureClass.save()
     .then(function(){
      console.log("message is saved.");
     })
    .catch(function(err){
     console.log(err.text);
    });
  });
},60000);

これで1分ごとに温度センサを取得して、データを保存するするコードができました。
あとは下記のコマンドで実行するだけです。

node temper.js

すると、下記のようにデータが保存されます。

スクリーンショット 2015-09-21 20.30.54.png

mBaaSデータストア利用のポイント

上のようにただコードを記載しても、解説にならないのでmBaaSを利用する際のポイントを述べたいと思います。

まずはライブラリの読み込み

mBaaSのSDKを使うためにもまずはライブラリの読み込みを行います

temper.js
var NCMB = require("YOURPATH/ncmb_js/lib/ncmb");

次はSDKの初期化

次は自分が作った、サーバー環境に保存するための準備として、SDKの初期化を行います
それが下記になります。

temper.js
var ncmb = new NCMB("YOUR_APPLICATIONKEY","YOUR_CLIENTKEY");

上記の
YOUR_APPLICATIONKEY
YOUR_CLIENTKEY

の部分に
上記のアプリケーションキー、クライアントキーをそれぞれコピーアンドペーストします。

最後にデータストアにデータを保存します

まず、保存するクラスを定義します。

temper.js
var TemperatureClass = ncmb.DataStore("Temperature");
var temperatureClass = new TemperatureClass();

次に保存するカラムとデータを設定します。

temper.js
var today = new Date();
temperatureClass.set("temperature",data.temperature);
temperatureClass.set("date",today);

最後に、クラウドに保存します。

temper.js
temperatureClass.save()
                .then(function(){
                  console.log("message is saved.");
                })
                .catch(function(err){
                  console.log(err.text);
                });

mBaaSのデータストアはKey-Valueのようなデータベースとなっており、mysqlのようにあらかじめテーブルなどを定義する必要がありません。上記のようにクライアント側にコードを書けば、サーバー側にもそれが反映されます。。。便利ですね!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16