MilkcocoaとArduino Unoで温度データを計測して可視化する方法

Milkcocoaアドベントカレンダー5日目。

よくIoT始めるなら何から始めると良いですか？と聞かれることがあるのですが、**Arduinoから始めることをオススメしています。**

理由としては
1. 安価
2. 手軽
3. サンプルが豊富

ですよ！

今回はMilkcocoaとArduinoUnoを使って、リアルタイムに部屋の温度を計測して可視化してみようと思います。


##[Milkcocoa](https://mlkcca.com/)とは
WebアプリケーションからIoTデバイスまで簡単に繋がるバックエンド。最近FreeBoard連携したので使ってみる。今回はArduino Unoを使って部屋の温度を測ります。


![スクリーンショット 2015-10-26 16.52.07.png](https://qiita-image-store.s3.amazonaws.com/0/10319/c0951ae8-f21a-c9fc-556a-df22dd5192f0.png)




##使ったもの

- Arduino Uno
- LM35DZ (http://akizukidenshi.com/catalog/g/gI-00116/)
- ブレッドボード
- ジャンパーワイヤー

合計4000円超えないくらいですかね。

**フレームワークはjohnny-fiveを使いました。**
http://johnny-five.io/

![スクリーンショット 2015-11-22 19.21.44.png](https://qiita-image-store.s3.amazonaws.com/0/10319/90d83b09-972d-792d-878f-a56b010bb437.png)



## Arduino IDEからStandardFirmataを書き込む
Arduino IDEからArduino Unoに`StandardFirmata`を書き込みましょう。まずはArduino IDEを起動させてください。



ツールからボードとポートの設定を行います。
ボードは`Arduino/Genunio Uno`をポートはArduinoをPCに接続すると`dev/tty.hogehoge`と表示されるはずです。そちらを選択してください。

![スクリーンショット 2015-11-08 10.56.30.png](https://qiita-image-store.s3.amazonaws.com/0/10319/3c6c5e26-b864-ec59-a063-bd51e36b2692.png)



次にファイルからスケッチの例からFirmataを選択し、`StandardFirmata`をクリックするとスケッチが出てきます。

![スクリーンショット 2015-11-08 11.00.40.png](https://qiita-image-store.s3.amazonaws.com/0/10319/89609a74-34e9-2752-5039-f5911bb0d1a7.png)


こちらをコンパイルしてArduino Unoに書き込みましょう。


## johnny-fiveとMilkcocoaをinstallする

johnny-fiveとMilkcocoaをinstallしましょう。

`npm install johnny-five`

`npm install milkcocoa`

また、Milkcocoaを利用するには管理画面からアプリケーションを作る必要があります。
後々アプリケーションのidを書く必要があるので、一緒に作成しておいてください。		

![スクリーンショット 2015-11-23 16.49.56.png](https://qiita-image-store.s3.amazonaws.com/0/10319/7bf63096-ef2c-abc6-f06e-6582d77637c8.png)


## ブレッドボードに挿す

画像の通り挿していきましょう。

![](https://raw.githubusercontent.com/rwaldron/johnny-five/master/docs/breadboard/temperature-lm35.png)

注意事項として、LM35DZにはちゃんと向きがあります。平べったい方と丸みのある方を前後逆に挿すと**とても熱くなります。**	注意してください。

## コードを書く

こちらのコードをコピペして先ほど作ったアプリケーションのidを`あなたのapp id`のところに書いて保存してください。

```lang:temperature-lm35.js

  var five = require("johnny-five");
  var MilkCocoa = require('milkcocoa');

  var milkcocoa = new MilkCocoa("あなたのapp id.mlkcca.com");

  five.Board().on("ready", function() {
    var temperature = new five.Temperature({
      controller: "LM35",
       pin: "A0",
      freq : 3000 //ここで速さを決めます。
  });


temperature.on("data", function() {
    console.log(this.celsius + "°C", this.fahrenheit + "°F");
    milkcocoa.dataStore('temp').push({'data':this.celsius});

   });
});


```


## temperature-lm35.jsを実行

それでは実行してみましょう。

`node temperature-lm35.js`

![スクリーンショット 2015-11-22 19.35.54.png](https://qiita-image-store.s3.amazonaws.com/0/10319/7870444e-89e1-a439-c4b9-933186180165.png)


できましたか？


## Milkcocoaの管理画面を見てみる

Milkcocoaの管理画面からデータストアを見てみるとtempというストレージが作成されています。

![スクリーンショット 2015-11-23 16.56.09.png](https://qiita-image-store.s3.amazonaws.com/0/10319/9c12a31a-c630-965b-31fa-1525df40b03c.png)

開いてみると値とTimestampが保存されています。

![スクリーンショット 2015-11-23 16.56.46.png](https://qiita-image-store.s3.amazonaws.com/0/10319/85c2ed5f-a572-7b8d-99ae-bc043d2b0363.png)


##FreeBoardで可視化

する予定だったのですが、**お家にセンサーを忘れちゃいました。**後で追記します。

簡単に可視化できるので試してみてください。
![スクリーンショット 2015-11-15 11.36.58.png](https://qiita-image-store.s3.amazonaws.com/0/10319/9edaaa64-58bc-bcd3-8982-bf1713263162.png)


## 一連の流れ


1. Arduino IDEからStandardFirmataを書き込む
2. johnny-fiveとMilkcocoaをnpm install 
3. Milkcocoaでアプリケーションを作成
4. ブレッドボードにジャンパーワイヤーとLM35DZを挿す
5. temperature-lm35.jsを実行する
6. FreeBoardで可視化する


##まとめ


いかがでしたでしょうか。Arduino IDEから書き込むときにボードとポートの指定さえ間違わずNode.jsで何か作ったことあるひとだったらつまらずやれちゃうのかなと思います。MilkcocoaでIoTどんどんやっていきましょー！