IEEE1888 GateWay sample that handles multiple sensors.

Dependencies:   EthernetInterface Fiap HTTPClientForFIAP NTPClient mbed-rtos mbed spxml

Fork of IEEE1888_TEMP_NODE by Satoru Yoshida

This program sends data to FIAP storage with IEEE1888 format.

Note: You should locate storage.txt into mbed memory at least before using this program. The storage.txt contains storage url, see example at main.h

You can launch an AMI ( Amazon Machine Image ) on Amazon Web Service ( http://aws.amazon.com/ ) as the FIAP storage. The AMI is named as "IEEE1888 FiapStorage2 Sample", registered at Tokyo region (ap-northeast-1) .

If You need more information about the AMI, see http://d.hatena.ne.jp/satoruyoshida/20130611/1370961807 .

/media/uploads/strysd/fiap_ami.jpg

This image shows sample data of IEEE1888 format.

Note: this image is shown if FIAP_DEBUG_MODE is set to true.

/media/uploads/strysd/fiap_protocol.jpg

You can define COUNT_OF_POINTS constant as number of analog sensors and digital inputs. In this program, I use P19 and P20 as analog inputs from 2 sensors. So I define the COUNT_OF_POINTS as 2.

/media/uploads/strysd/fiap_gw.jpg

P19 is connected to illuminance sensor, S9648 (HAMAMATSU PHOTONICS K.K.). And P20 is connected to temperature sensor, LM35 (National Semiconductor Corporation) .

You can also use another analog sensors and digital inputs, for example LM61BIZ instead of LM35.

/media/uploads/strysd/server_room.png

/media/uploads/strysd/mymbed_multi_censor_initial.png

from here, in Japanese. このプログラムは IEEE1888 形式で FIAP Storage にデータ送信する例です。 このプログラムを使用する前に、少なくとも FIAP Storage の url を記載した sotrage.txt をメモリに格納しておく必要があります。 url の例は、 main.h ファイルにあります。

Amazon Web Service に用意した AMI を利用して FIAP Storage を起動することができます。IEEE1888 FiapStorage2 Sample という名前の公開 AMI です。

この AMI について詳しくは、http://d.hatena.ne.jp/satoruyoshida/20130611/1370961807 をご覧ください。

なお、main.h にはほかにも定数があります。例えば、IEEE1888 (FIAP) の通信内容をコンソールで確認したい場合は、FIAP_DEBUG_MODE を true にします。 また、アナログ・センサーやデジタル入力の個数に沿って、COUNT_OF_POINTS を定義します。

このプログラム例では、P19 および P20 をセンサーからのアナログ入力として使用しています。そのため、COUNT_OF_POINTS を 2 と定義しています。 P19 には浜松ホトニクス社製の照度センサー S9648、P20 にはナショナル・セミコンダクターの温度センサー LM35 を接続しています。 参考までに LM35 をより安価な LM61BIZ に置き換えた場合の設定値もコメントアウト状態で入れてあります

(ここから日本語文のみの内容) トランジスタ技術 2012年 2月号 の P189 - P195 に、Arduino、Ethernet シールド、温度センサー(LM35)、照度センサー(S9648-100)、DIP スイッチおよびトグルスイッチを用いたネットワーク温度&照度計の記事が掲載されています(落合 秀也 様/井上 博之 様)。 このプログラムでは、照度センサーは S9648-100 ではなく、より安価な S9648 で代用し、スイッチ 2 種類は省略していますのでご注意ください。 S9648 の負荷抵抗 1KΩ に並列に入れたコンデンサーは、手元に余っていた 0.1μF です。この容量が妥当かどうかは未検証です。

LM35 の出力をアンプで6倍に増幅してみたときのメモがここにあります。

https://mbed.org/users/strysd/notebook/memo_analog_input_from_lm35dz_via_nju7032d/

照度センサーを S9648-100 に変えて、抵抗値も検討したときのメモはこちら。

https://mbed.org/users/strysd/notebook/difference_s9648_and_s9648_100/

Files at this revision

API Documentation at this revision

Comitter:
strysd
Date:
Mon May 06 11:30:04 2013 +0000
Parent:
25:929a72bcd8d2
Child:
27:06ddfd444a87
Commit message:
add difinition of precision and examples.h for several sensors.

Changed in this revision

examples.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
main.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples.h	Mon May 06 11:30:04 2013 +0000
@@ -0,0 +1,63 @@
+//illuminance sensors
+
+//S9648-100
+// X * 1269.2 + 0 = X * (3300 mV / 1000 ohm) / 0.26 mA * 100.0 lux
+//#define Pxx_CONSTANT 0
+//#define Pxx_COEFFICIENT 1270.0
+//#define Pxx_PREC "%.0f"
+
+//if you divide output voltage from S9648-100 by 680 ohm and 330 ohm
+// X * 1866.5 + 0 = X * (3300 mV / 680 ohm) / 0.26 mA * 100.0 lux
+//#define Pxx_CONSTANT 0
+//#define Pxx_COEFFICIENT 1870.0
+//#define Pxx_PREC "%.0f"
+
+//if you use S9648 instead of S9648-100
+// X * 2231.2 + 0 = X * (3300 mV / 510 ohm) / 0.29 mA * 100.0 lux
+//#define Pxx_CONSTANT 0
+//#define Pxx_COEFFICIENT 2230.0
+//#define Pxx_PREC "%.0f"
+
+//if you divide output voltage from S9648 by 330 ohm and 180 ohm
+// X * 3448.3 + 0 = X * (3300 mV / 330 ohm) / 0.29 mA * 100.0 lux
+//#define Pxx_CONSTANT 0
+//#define Pxx_COEFFICIENT 3450.0
+//#define Pxx_PREC "%.0f"
+
+//temperature sensors
+
+//LM35DZ
+// X * 330.0 + 0  = X * 3300 mv / 10 mv * 1 degree Celsius
+//#define Pxx_CONSTANT 0
+//#define Pxx_COEFFICIENT 330.0
+//#define Pxx_PREC "%.1f"
+
+// if amplification factor is 6 times, using LM35 :
+// X * 55.0 + 0  = X * 3300 mv / 60 mv * 1 degree Celsius
+//#define Pxx_CONSTANT 0
+//#define Pxx_COEFFICIENT 55.0
+//#define Pxx_PREC "%.2f"
+
+//if you use LM335 instead of LM35
+// X * 330.0 - 273.15 = (X * 3300 mv / 10 mv * 1 kelvin) - 273.15 degree Celsius
+//#define Pxx_CONSTANT -273.2
+//#define Pxx_COEFFICIENT 330.0
+//#define Pxx_PREC "%.1f"
+
+//if you use LM61BIZ or LM61CIZ instead of LM35
+// X * 330.0 - 60 = ( X * 3300 mv - 600 mv ) / 10 mv * 1 degree Celsius
+//#define Pxx_CONSTANT -60
+//#define Pxx_COEFFICIENT 330.0
+//#define Pxx_PREC "%.1f"
+
+//if you use MCP9700
+// X * 330.0 - 50 = ( X * 3300 mv - 500 mv ) / 10 mv * 1 degree Celsius
+//#define Pxx_CONSTANT -50
+//#define Pxx_COEFFICIENT 330.0
+//#define Pxx_PREC "%.1f"
+
+//if you use MCP9701
+// X * 169.2 - 20.5 = ( X * 3300 mv - 400 mv ) / 19.5 mv * 1 degree Celsius
+//#define Pxx_CONSTANT -20.5
+//#define Pxx_COEFFICIENT 170.0
+//#define Pxx_PREC "%.1f"
--- a/main.cpp	Tue Apr 30 00:45:19 2013 +0000
+++ b/main.cpp	Mon May 06 11:30:04 2013 +0000
@@ -54,32 +54,32 @@
 struct tm t;
 
 #ifdef P15_POINT_ID
-char val_p15[6];
+char val_p15[8];
 float float_p15_wrk;
 float float_p15;
 #endif
 #ifdef P16_POINT_ID
-char val_p16[6];
+char val_p16[8];
 float float_p16_wrk;
 float float_p16;
 #endif
 #ifdef P17_POINT_ID
-char val_p17[6];
+char val_p17[8];
 float float_p17_wrk;
 float float_p17;
 #endif
 #ifdef P18_POINT_ID
-char val_p18[6];
+char val_p18[8];
 float float_p18_wrk;
 float float_p18;
 #endif
 #ifdef P19_POINT_ID
-char val_p19[6];
+char val_p19[8];
 float float_p19_wrk;
 float float_p19;
 #endif
 #ifdef P20_POINT_ID
-char val_p20[6];
+char val_p20[8];
 float float_p20_wrk;
 float float_p20;
 #endif
@@ -155,26 +155,22 @@
     #endif
 
     #ifdef P15_POINT_ID
-    sprintf(val_p15,"%2.2f",float_p15);
+    sprintf(val_p15, P15_PREC, float_p15);
     #endif
     #ifdef P16_POINT_ID
-    sprintf(val_p16,"%2.2f",float_p16);
+    sprintf(val_p16, P16_PREC, float_p16);
     #endif
     #ifdef P17_POINT_ID
-    sprintf(val_p17,"%2.2f",float_p17);
+    sprintf(val_p17, P17_PREC, float_p17);
     #endif
     #ifdef P18_POINT_ID
-    sprintf(val_p18,"%2.2f",float_p18);
+    sprintf(val_p18, P18_PREC, float_p18);
     #endif
     #ifdef P19_POINT_ID
-    if(float_p19 > 100.0){
-        sprintf(val_p19,"%4.0f",float_p19);
-    } else {
-        sprintf(val_p19,"%2.1f",float_p19);
-    }
+    sprintf(val_p19, P19_PREC, float_p19);
     #endif
     #ifdef P20_POINT_ID
-    sprintf(val_p20,"%2.2f",float_p20);
+    sprintf(val_p20, P20_PREC, float_p20);
     #endif
 
     this_year = t.tm_year + 1900;
--- a/main.h	Tue Apr 30 00:45:19 2013 +0000
+++ b/main.h	Mon May 06 11:30:04 2013 +0000
@@ -15,37 +15,15 @@
 #define RETRY_TIMES_ON_ERROR 5
 #define WAIT_NEXT_SEND       30 //interval time will be it +0 or +1 second as a result.
 
-//P19 : illuminance sensor, S9648
 #define P19_POINT_ID "http://ramat.ram.ne.jp/illuminance"
-// X * 1137.9 + 0 = X * (3300 mV / 1000 ohm) / 0.29 mA * 100.0 lux
-//#define P19_CONSTANT 0
-//#define P19_COEFFICIENT 1140.0
-
-// X * 3448.3 + 0 = X * (3300 mV /  330 ohm) / 0.29 mA * 100.0 lux
-//#define P19_CONSTANT 0
-//#define P19_COEFFICIENT 3450.0
-
-//if you use S9648-100 instead of S9648
-// X * 1269.2 + 0 = X * (3300 mV / 1000 ohm) / 0.26 mA * 100.0 lux
-//#define P19_CONSTANT 0
-//#define P19_COEFFICIENT 1270.0
-
-// X * 1866.5 + 0 = X * (3300 mV /  680 ohm) / 0.26 mA * 100.0 lux
+//if you divide output voltage from S9648-100 by 680 ohm and 330 ohm
+// X * 1866.5 + 0 = X * (3300 mV / 680 ohm) / 0.26 mA * 100.0 lux
 #define P19_CONSTANT 0
 #define P19_COEFFICIENT 1870.0
+#define P19_PREC "%.0f"
 
-//P20 : temperature sensor, LM35
 #define P20_POINT_ID "http://ramat.ram.ne.jp/temperature"
-// X * 330.0 + 0  = X * (3300 mv / 10 mv) * 1 degree Celsius
-//#define P20_CONSTANT 0
-//#define P20_COEFFICIENT 330.0
-
-// if amplification factor is 6 times :
-// X * 55.0 + 0  = X * (3300 mv / 60 mv) * 1 degree Celsius
+// X * 55.0 + 0  = X * 3300 mv / 60 mv * 1 degree Celsius
 #define P20_CONSTANT 0
 #define P20_COEFFICIENT 55.0
-
-//if you use LM61BIZ or LM61CIZ instead of LM35
-// X * 330.0 - 60 = ( X * 3300 mv - 600 mv ) / 10 mv * 1 degree Celsius
-//#define P20_CONSTANT -60
-//#define P20_COEFFICIENT 330.0
+#define P20_PREC "%.2f"