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/