スマートコンセント(富士通 FX-5204PS)をIEEE1888 StorageにWRITEするサンプルプログラムです。

Dependencies:   EthernetInterface FiapV2 HTTPClientForSOAP NTPClient TextLCD mbed-rtos mbed spxml

Fork of BlueUSB_f by Yasushi TAUCHI

スマートコンセント(富士通 FX-5204PS)をIEEE1888 StorageにWRITEするサンプルプログラムです。
USB HUBを使用して2台利用した例です。
表示のみは http://mbed.org/users/yueee_yt/code/BlueUSB_f/で公開しています。

BlueUSBより派生していますが、BluetoothとMass Storage Classは利用できません。

2台まで確認していますが、プログラム的には10台まで接続できるようにしています。
(RTOSとの整合により難しいかもしれません)

Revision:
3:528f73ce625e
Parent:
2:32a2d06f4fe2
Child:
5:96a70a8cebb9
--- a/main.cpp	Thu Sep 27 13:04:36 2012 +0000
+++ b/main.cpp	Fri Sep 28 07:10:54 2012 +0000
@@ -20,11 +20,42 @@
 THE SOFTWARE.
 */
 
-#include "mbed.h"
 #include "USBHost.h"
 #include "Utils.h"
 #include "FATFileSystem.h"
 #include "TextLCD.h"
+#include "EthernetInterface.h"
+#include "NTPClient.h"
+#include "fiap.h"
+#include "mbed.h"
+
+//#define NTPServer "ntp.nict.jp"
+#define NTPServer "ntp.cc.yamaguchi-u.ac.jp"
+
+EthernetInterface eth;
+NTPClient ntp;
+Ticker timer1;
+time_t ctTime;
+char timezone[] = "+09:00";  // JST
+char atemp1[6],atemp2[6],avolt1[6],avolt2[6],afreq1[6],afreq2[6];
+char apower_a1[6],apower_a2[6],apower_b1[6],apower_b2[6],apower_c1[6],apower_c2[6],apower_d1[6],apower_d2[6];
+FIAP fiap("http://192.168.1.3/axis2/services/FIAPStorage");
+struct fiap_element element[]= {
+    {"http://www.gutp.jp/SmartTap1/temp",atemp1,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
+    {"http://www.gutp.jp/SmartTap1/volt",avolt1,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
+    {"http://www.gutp.jp/SmartTap1/freq",afreq1,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
+    {"http://www.gutp.jp/SmartTap1/watt_1",apower_a1,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
+    {"http://www.gutp.jp/SmartTap1/watt_2",apower_b1,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
+    {"http://www.gutp.jp/SmartTap1/watt_3",apower_c1,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
+    {"http://www.gutp.jp/SmartTap1/watt_4",apower_d1,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
+    {"http://www.gutp.jp/SmartTap2/temp",atemp2,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
+    {"http://www.gutp.jp/SmartTap2/volt",avolt2,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
+    {"http://www.gutp.jp/SmartTap2/freq",afreq2,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
+    {"http://www.gutp.jp/SmartTap2/watt_1",apower_a2,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
+    {"http://www.gutp.jp/SmartTap2/watt_2",apower_b2,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
+    {"http://www.gutp.jp/SmartTap2/watt_3",apower_c2,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
+    {"http://www.gutp.jp/SmartTap2/watt_4",apower_d2,NULL,NULL,NULL,NULL,NULL,NULL,timezone},
+};
 
 int MassStorage_ReadCapacity(int device, u32* blockCount, u32* blockSize);
 int MassStorage_Read(int device, u32 blockAddr, u32 blockCount, u8* dst, u32 blockSize);
@@ -111,18 +142,45 @@
 DigitalOut led4(LED4);
 Timer t;
 Timer t2;
+Timer t3;
 TextLCD lcd(p24, p26, p27, p28, p29, p30);
 extern float WattData1[],WattData2[],WattData3[],WattData4[];
 extern int SerialNo[];
+extern float TempData[];
+extern float VoltData[];
+extern float FreqData[];
 int main()
 {
+    int i;
+    lcd.cls();
+    lcd.printf("Watting....");
+
     pc.baud(460800);
+
+    eth.init(); //Use DHCP
+    eth.connect();
+    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;
+    }
+
     InitUSPS();
     USBInit();
     t.start();
     t2.start();
-    lcd.cls();
-    lcd.printf("Watting....");
+    t3.start();
     while(1) {
         USBLoop();
         if(t>0.1 ) {
@@ -130,15 +188,58 @@
             led4=!led4;
             USPS_Refresh();
         }
-        if(t2>1){
+        if(t2>1) { //Data to LCDText
             t2.start();
-            if(SerialNo[0]==0)led1=0;else led1=1;
-            if(SerialNo[1]==0)led2=0;else led2=1;
-            if(SerialNo[2]==0)led3=0;else led3=1;
+            if(SerialNo[0]==0)led1=0;
+            else led1=1;
+            if(SerialNo[1]==0)led2=0;
+            else led2=1;
+            if(SerialNo[2]==0)led3=0;
+            else led3=1;
             lcd.locate(0,0);
             lcd.printf("1:%4.0fW  2:%4.0fW",WattData1[0],WattData2[0]);
             lcd.locate(0,1);
             lcd.printf("3:%4.0fW  4:%4.0fW",WattData3[0],WattData4[0]);
         }
+        if(t3>60) { //Data to FiapStorage
+            t3.start();
+            char buffer[9];
+            ctTime = time(NULL);
+            strftime(buffer,9,"%X",localtime(&ctTime));
+            printf("Storage Store %s \r\n",buffer);
+// Save to FIAPStorage
+            struct tm t = *localtime(&ctTime);
+            for(i=0; i<14; i++) {
+                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;
+            }
+            for(i=0; i<2; i++) {
+                switch(SerialNo[i]) {
+                    case 0x1737:
+                        sprintf(atemp1,"%4.1f",TempData[i]);
+                        sprintf(avolt1,"%4.1f",VoltData[i]);
+                        sprintf(afreq1,"%4.1f",FreqData[i]);
+                        sprintf(apower_a1,"%4.0f",WattData1[i]);
+                        sprintf(apower_b1,"%4.0f",WattData2[i]);
+                        sprintf(apower_c1,"%4.0f",WattData3[i]);
+                        sprintf(apower_d1,"%4.0f",WattData4[i]);
+                        break;
+                    case 0x1871:
+                        sprintf(atemp2,"%4.1f",TempData[i]);
+                        sprintf(avolt2,"%4.1f",VoltData[i]);
+                        sprintf(afreq2,"%4.1f",FreqData[i]);
+                        sprintf(apower_a2,"%4.0f",WattData1[i]);
+                        sprintf(apower_b2,"%4.0f",WattData2[i]);
+                        sprintf(apower_c2,"%4.0f",WattData3[i]);
+                        sprintf(apower_d2,"%4.0f",WattData4[i]);
+                        break;
+                }
+            }
+            fiap.post(element,1);
+        }
     }
 }