IEEE1888(FIAP)をmbedで使う
IEEE1888(FIAP)とは
IEEE1888は環境クラウドで使う通信プロトコルです。
IEEE1888の詳細はトランジスタ技術2012.1号 184ページ"国際規格準拠の無料ライブラリと手軽なマイコンボードで作るネットワーク温度計&照度計”を参照してください。
電力や気象情報など身の回りにあるデータをクラウド上のstorageに保存することができます。
Storageのプログラムや、VMWare上で動作する開発キット(Storageを含む)はGUTPのホームページhttp://www.gutp.jp/からダウンロードできます。
数多くのライブラリを使用しているのでサンプルプログラムを修正したほうが楽です。
HTTPClientはXML(SOAP)で使用できるようにライブラリを修正しています。
また、前のバージョンから構造体の形式を変更しています。(GUTPで配布しているArduino版と同じです)
Writeプロコトルの方のmbedはp15に温度センサーLM35を接続するようにしています。
http://akizukidenshi.com/catalog/g/gI-00116/
Write Method(測定側のプログラム)
Import programtemp_FIAP
IEEE1888(FIAP)を使ってデータを保存するプログラムです。 構造体の形式が変わりました。(Arduino版と同じになりました) オフィシャルライブラリ EthernetInterfaceを使用します。
#include "mbed.h"
#include "TextLCD.h"
#include "EthernetInterface.h"
#include "NTPClient.h"
#include "fiap.h"
#define NTPServer "ntp.nict.jp"
EthernetInterface eth;
NTPClient ntp;
Ticker timer1;
time_t ctTime;
TextLCD lcd(p24, p26, p27, p28, p29, p30);
AnalogIn ain(p15);
DigitalOut led(LED1);
char timezone[] = "+09:00"; // JST
char atemp[6];
FIAP fiap("http://192.168.1.3/axis2/services/FIAPStorage");
struct fiap_element element[]= {
{"http://csse-tech.jp/temp_tauchi",atemp,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
};
void tick(void )
{
float temp;
char buffer[9];
led=!led;
temp=ain*3.3*100.0;
ctTime = time(NULL);
strftime(buffer,9,"%X",localtime(&ctTime));
lcd.locate(0,1);
lcd.printf("%s %4.1fDeg",buffer,temp);
// Save to FIAPStorage
sprintf(atemp,"%4.1f",temp);
struct tm t = *localtime(&ctTime);
element[0].value=atemp;
element[0].year=t.tm_year+1900;
element[0].month=t.tm_mon+1;
element[0].day=t.tm_mday;
element[0].hour=t.tm_hour;
element[0].minute=t.tm_min;
element[0].second=t.tm_sec;
fiap.post(element,1);
}
int main()
{
//Ethernet Initialize
eth.init(); //Use DHCP
eth.connect();
lcd.cls();
lcd.locate(0,0);
lcd.printf("%s", eth.getIPAddress());
printf("Trying to update time...\r\n");
if (ntp.setTime(NTPServer) == 0) {
printf("Set time successfully\r\n");
time_t ctTime;
ctTime = time(NULL);
ctTime+=32400;
set_time(ctTime);
ctTime = time(NULL);
printf("Time is set to (JST): %s\r\n", ctime(&ctTime));
printf("finish \n");
} else {
lcd.locate(0,1);
lcd.printf("Error");
return -1;
}
//fiap.debug_mode=true;
//eth.disconnect();
while(true) {
tick();
wait(2);
}
}
Fetch Method(データ表示プログラム)
Import programtemp_FIAP_fetch
IEEE1888(FIAP)のFetchプログラム例です。
#include "mbed.h"
#include "TextLCD.h"
#include "EthernetInterface.h"
#include "fiap.h"
EthernetInterface eth;
TextLCD lcd(p24, p26, p27, p28, p29, p30);
DigitalOut led(LED1);
char timezone[] = "+09:00"; // JST
FIAP fiap("http://192.168.1.3/axis2/services/FIAPStorage");
char atemp[10];
struct fiap_element element[]= {
{"http://csse-tech.jp/temp_tauchi",atemp,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
};
void tick(void )
{
float temp;
led=!led;
fiap.fetch_last_data(element,1);
temp=atof(element[0].value);
lcd.locate(0,1);
lcd.printf("%2d:%2d:%2d %4.1fDeg",element[0].hour,element[0].minute,element[0].second,temp);
}
int main()
{
eth.init(); //Use DHCP
eth.connect();
lcd.cls();
lcd.locate(0,0);
lcd.printf("%s", eth.getIPAddress());
//fiap.debug_mode=true;
while(true) {
tick();
wait(2);
}
}
Fetchのプログラムを変更して東京電力の需要実績を表示するように変更したものです。
フタバ企画のデータを使用しています。 http://futaba-kikaku.jp/FUTABA_Service.html
Import programtepco_demand
東京電力の 需要実績を表示します。
#include "mbed.h"
#include "TextLCD.h"
#include "EthernetInterface.h"
#include "fiap.h"
EthernetInterface eth;
TextLCD lcd(p24, p26, p27, p28, p29, p30);
DigitalOut led(LED1);
char timezone[] = "+09:00"; // JST
FIAP fiap("http://www.futaba-kikaku.jp/services/jyukyu.php");
char ademand[7];
struct fiap_element element[]= {
{"http://futaba-kikaku.jp/epco/tepco/demand",ademand,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
};
void tick(void )
{
float demand;
led=!led;
fiap.fetch_last_data(element,1);
demand=atof(element[0].value);
lcd.locate(0,1);
lcd.printf("%02d:%02d:%02d %5.0f",element[0].hour,element[0].minute,element[0].second,demand);
}
int main()
{
eth.init(); //Use DHCP
eth.connect();
lcd.cls();
lcd.locate(0,0);
//lcd.printf("%s", eth.getIPAddress());
lcd.printf("tepco demand");
//fiap.debug_mode=true;
while(true) {
tick();
wait(60);
}
}
東京電力と関西電力の両方を出力するのはこんな感じになります。
#include "mbed.h"
#include "TextLCD.h"
#include "EthernetInterface.h"
#include "fiap.h"
EthernetInterface eth;
TextLCD lcd(p24, p26, p27, p28, p29, p30);
DigitalOut led(LED1);
char timezone[] = "+09:00"; // JST
FIAP fiap("http://www.futaba-kikaku.jp/services/jyukyu.php");
char ademand1[7],ademand2[7];
struct fiap_element element[]= {
{"http://futaba-kikaku.jp/epco/tepco/demand",ademand1,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
{"http://futaba-kikaku.jp/epco/kepco/demand",ademand2,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
};
void tick(void )
{
float demand1,demand2;
led=!led;
fiap.fetch_last_data(element,2);
demand1=atof(element[0].value);
demand2=atof(element[1].value);
lcd.locate(0,0);
lcd.printf("tepco %02d:%02d %4.0f",element[0].hour,element[0].minute,demand1);
lcd.locate(0,1);
lcd.printf("kepco %02d:%02d %4.0f",element[1].hour,element[1].minute,demand2);
}
int main()
{
eth.init(); //Use DHCP
eth.connect();
lcd.cls();
while(true) {
tick();
wait(60);
}
}
(以下は古いバージョンです。)
------------------
ライブラリ
EthernetNetIf、HTTPClientライブラリが一緒に必要です。
Import libraryFiap
IEEE1888(FIAP)のライブラリです まだWRITEプロトコルしかサポートしていません。 EthernetNetIf,HTTPClientライブラリが必要です。
Hello World
FIAPの実装方法の例です
Import programFIAPHelloWorld
FIAPライブラリの使用方法例
※Publishingが上手くいってないので、ライブラリの読み込みがへんになるかもしれません。 EthernetNetIF,HTTPClient,NTPClientの各ライブラリが必要です。
Please log in to post comments.
