今回やりたいこと
mbedと温度センサーを使って取得したデータを、cloudに上げてモニタリングを行う。上げたデータはFast Sensing( https://fastsensing.com/ja/services/ )を使うことでブラウザでグラフにしてくれるので、今回はグラフを可視化するためのところまで行う。
データの流れ
今回取得するデータの流れは、以下の図の通り。センサーで取得したデータをmbedで温度に直す。その後、Fast Sensingにデータをアップロードすることで可視化できる。
ハードウェア
パーツリスト
今回使用するパーツは以下の通り。
パーツ名 | 個数 | 購入先 |
---|---|---|
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との接続を合わせれば、あとのピンは合うと思います。
接続対応表
下の表が接続対応表です。左の列が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/
/**
* このプログラムは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にサインインしたあと、ビューを選択しグラフを見たいチャンネルの名前をクリックすることで、見ることができます。
お問い合わせ
ご質問などはコメントにお願い致します。ソースコードの不具合に関しては、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/