mbed
IoT
fastsensing

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

More than 1 year has passed since last update.

今回やりたいこと

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

データの流れ

 今回取得するデータの流れは、以下の図の通り。センサーで取得したデータをmbedで温度に直す。その後、Fast Sensingにデータをアップロードすることで可視化できる。
Qiita-Fastsensing-data.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

接続対応表

 下の表が接続対応表です。左の列が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にサインインしたあと、ビューを選択しグラフを見たいチャンネルの名前をクリックすることで、見ることができます。
スクリーンショット 2017-07-12 19.29.45.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/