Fast Sensingとmbedを使って温度のモニタリングをしてみる

# 今回やりたいこと
　mbedと温度センサーを使って取得したデータを、cloudに上げてモニタリングを行う。上げたデータはFast Sensing( https://fastsensing.com/ja/services/ )を使うことでブラウザでグラフにしてくれるので、今回はグラフを可視化するためのところまで行う。

# データの流れ
　今回取得するデータの流れは、以下の図の通り。センサーで取得したデータをmbedで温度に直す。その後、Fast Sensingにデータをアップロードすることで可視化できる。
![Qiita-Fastsensing-data.png](https://qiita-image-store.s3.amazonaws.com/0/81253/d753f7e7-0c76-9516-2cd9-145a52ec9eae.png)


# ハードウェア
## パーツリスト
　今回使用するパーツは以下の通り。

|パーツ名|個数|購入先|
|:------------:|:------------:|:-------------:|
|LPC1768(mbed)| 1 |http://akizukidenshi.com/catalog/g/gM-03596/|
|LM60(温度センサー)|1|http://akizukidenshi.com/catalog/g/gI-02490/|
|mbed LPC1768用イーサネット接続キット| 1 |https://www.switch-science.com/catalog/555/|
|ジャンプワイヤー|必要数(3本ぐらい)|http://akizukidenshi.com/catalog/g/gC-05371/|
|USBケーブル| 1 |mbed購入時に付属|
|LANケーブル|1|http://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4XMX#|

## 配線イラスト
　配線イラストは図の通り。特にLM60の配線は間違えると発火することがあるので、要注意。mbed LPC1768用イーサネット接続キットとの接続については、イラストにずれがあるので接続対応表を参考に接続してください。RD-またはp29との接続を合わせれば、あとのピンは合うと思います。
![Qiita-Fastsensing-Ether.001.jpeg](https://qiita-image-store.s3.amazonaws.com/0/81253/74e98c89-b930-2dcb-7e39-f2d0fce40ff3.jpeg)



## 接続対応表
　下の表が接続対応表です。左の列がmbedのピン番号（LPC1768の基板上に書いてある文字）、右の列が各パーツのピン名でカッコの中はパーツの種類を表します。

|ピン名(mbed)|ピン名(パーツ名)|
|:------------:|:------------:|
|VOUT|+Vs(LM60)|
|GND|GND(LM60)|　
|RD-|RD-(mbed LPC1768用イーサネット接続キット)|
|RD+|RD+(mbed LPC1768用イーサネット接続キット)|
|TD-|TD-(mbed LPC1768用イーサネット接続キット)|
|TD+|TD+(mbed LPC1768用イーサネット接続キット)|
|D-|D-(mbed LPC1768用イーサネット接続キット)|
|D+|D+(mbed LPC1768用イーサネット接続キット)|
|p30|30(mbed LPC1768用イーサネット接続キット)|
|p29|29(mbed LPC1768用イーサネット接続キット)|
|p20|Vo(LM60)|

# ソフトウェア
　書くコードはmbedのコードだけで大丈夫です。mbedのコードを書く前に、Fast SensingにデータをアップロードするためにFast Sensingのユーザ登録を行い、Device TokenとChannel Tokenを取得する必要があります。
## Fast Sensingの準備
　開発に必要なアカウント作成やデバイス登録などは、以下のページをご覧ください。
　https://fastsensing.com/ja/developer/

## ソースコード
　コードは以下になります。このコードにはFast Sensing Inc.が提供するライブラリを使用しています。以下のサイトから、いまお使いのcompilerにImportすることができます。
　https://os.mbed.com/teams/Fastsensing/code/SCP1000_Fastsensing/　

```main.cpp
/**
* このプログラムはlm60（気温センサ）を使用したサンプルコードです。
* 
*/

#include "mbed.h"
#include "Fastsensing.h"    //fastsensingライブラリをインポート

DigitalOut led[] = {LED1, LED2, LED3, LED4};      //モニタ用のLEDを定義
AnalogIn lm60(p20);         //温度センサを使うピン番号を定義
DigitalIn button(p18);      //終了ボタンのピン

Fastsensing fast;           //Fastsensingのインスタンスを作成

//プロトタイプ宣言
void displayError();        //エラーモニタ
void displayEnd();          //終了モニタ

//main関数
int main() {
   char *deviceId = "hogehogehogehoge";                         //デバイスTokenを入力、16文字
   char *channelId[3] = {"hogehoge", "hogehoge", "hogehoge"};      //チャンネルTokenを入力、8文字×3
    float temp = 0.0;                                               //温度を記憶する変数
    int status = 0;                                                 //データのアップデートのステータスを記録
    while (true) {
        temp = (3.3 * lm60 - 0.424) / 0.00625;                      //電圧を温度に変換
        printf("temp is %f degree\n", temp);                        //温度を出力
        status = fast.updateData(deviceId, channelId[0], temp, 1);         //channelIdの0番目の要素にあるチャンネルを使用する。
        if(status != 0) displayError();                                  //エラーが返ってくると-1を返して終了する。
        if(button != 0) break;                                      //ボタンが押されると終了
        wait(5.0);  //5秒待機
    }
}

//エラーをモニタするための関数
void displayError(){
    led[0] = 1;
    led[1] = 0;
    led[2] = 0;
    led[3] = 1;
    while(true){
        led[0] = !led[0];
        led[1] = !led[1];
        led[2] = !led[2];
        led[3] = !led[3];
    }    
}

//終了をモニタするための関数
void displayEnd(){
    led[0] = 1;
    led[1] = 0;
    led[2] = 0;
    led[3] = 0;
    while(true){
        led[0] = led[3];
        led[1] = led[0];
        led[2] = led[1];
        led[3] = led[2];
    }    
}
```

# 実行結果
　Ethernetの差込口にLANケーブルを接続し、電源をいれリセットボタンを押すと動き出します。このサンプルプログラムは、Tera Termなどを使うことで、動作をモニタリングすることができます。モニタリング結果は以下のようになります。Fast Sensingにサインインしたあと、ビューを選択しグラフを見たいチャンネルの名前をクリックすることで、見ることができます。
<img width="1438" alt="スクリーンショット 2017-07-12 19.29.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/81253/4aa2458a-850d-6070-5f76-bb8a36c9a0e0.png">


# お問い合わせ
　ご質問などはコメントにお願い致します。ソースコードの不具合に関しては、mbedのページでissueを発行してください。
　https://os.mbed.com/teams/Fastsensing/code/SCP1000_Fastsensing/issues/

# 参考URL
[Fast Sensing]  https://fastsensing.com/ja/
[LM60データシート]  http://www.tij.co.jp/jp/lit/ds/symlink/lm60.pdf
[mbed LPC1768用イーサネット接続キット] https://www.switch-science.com/catalog/555/
[mbed サンプルプログラム] https://developer.mbed.org/users/AkiraK/code/fastsensing_temp_sample/
[mbed Fast Sensing Library] https://developer.mbed.org/teams/Fastsensing/code/Fastsensing/