赤外線信号を送信し、家電のコントロールを行うためのプログラム。 動作には、赤外線LEDとコントロール用のHTMLが必要です。 注:今のところ安定して動作していません。 朝に電源を入れて、夕方にはサーバが死んでいる状況が続いています。 とりあえず、公開していますが原因究明している段階のモノです。

Dependencies:   EthernetNetIf HTTPServer RPCInterface RemoteIR mbed

注:今のところ安定して動作していません。 朝に電源を入れて、夕方にはサーバが死んでいる状況が続いています。 とりあえず、公開していますが原因究明している段階のモノです。

回路図(Circuit)

Ethernetのコネクタの周りが適当です。 自分はスイッチサイエンスさんのmbed用イーサネット接続キットを使用して回路を作りました。

HTML

このプログラムを使用する際に必要なHTMLです。 mbedにプログラムを書き込む際に同じフォルダ下に入れてください。

html

<html>
    <head>
        <script src="mbedRPC.js" language="javascript"></script>
        <script type="text/javascript">
            mbed = new HTTPRPC();
            light1 = new RPCFunction(mbed,"light1");
            light2 = new RPCFunction(mbed,"light2");			
			aircon = new RPCFunction(mbed,"aircon");
        </script>
    </head>
    <body>
         <br>
		<input type="button" name="Light1 ON" value="Light1 ON" onClick="buttonClicked()"><br>
		<input type="button" name="Light2 ON" value="Light2 ON" onClick="buttonClicked2()"><br>
		<input type="button" name="Air-Con ON" value="Air-Con ON" onClick="buttonClickedAir()"><br>
        <script language="javascript">
			function buttonClicked(){
				/*alert("送信")*/
				light1.run(" ");
			}
			
			function buttonClicked2(){
				/*alert("送信")*/
				light2.run(" ");
			}
			
			function buttonClickedAir(){
				/*alert("送信")*/
				aircon.run(" ");
			}
        </script>
    </body>
</html>

Files at this revision

API Documentation at this revision

Comitter:
MrBearing
Date:
Sun Mar 02 13:34:04 2014 +0000
Commit message:
First Commit this program

Changed in this revision

EthernetNetIf.lib Show annotated file Show diff for this revision Revisions of this file
HTTPServer.lib Show annotated file Show diff for this revision Revisions of this file
RPCInterface.lib Show annotated file Show diff for this revision Revisions of this file
RemoteIR.lib 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
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 79a0104e2c51 EthernetNetIf.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EthernetNetIf.lib	Sun Mar 02 13:34:04 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/donatien/code/EthernetNetIf/#bc7df6da7589
diff -r 000000000000 -r 79a0104e2c51 HTTPServer.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HTTPServer.lib	Sun Mar 02 13:34:04 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/donatien/code/HTTPServer/#d753966e4d97
diff -r 000000000000 -r 79a0104e2c51 RPCInterface.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RPCInterface.lib	Sun Mar 02 13:34:04 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/MichaelW/code/RPCInterface/#a9e2c45097c8
diff -r 000000000000 -r 79a0104e2c51 RemoteIR.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RemoteIR.lib	Sun Mar 02 13:34:04 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/shintamainjp/code/RemoteIR/#268cc2ab63bd
diff -r 000000000000 -r 79a0104e2c51 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Mar 02 13:34:04 2014 +0000
@@ -0,0 +1,152 @@
+/**
+ * RPC Remote
+ * 
+ * 赤外線信号の送信をRPCを介して送信するプログラム
+ * (2014年3月2日公開) 
+ * Takumi Okamoto 
+ * 注意:現在の所、安定した動作をしていません。
+ * 朝電源を入れて、夕方頃には動作をしていないことが多々あります。
+ */
+
+
+#include "mbed.h"
+#include "EthernetNetIf.h"
+#include "HTTPServer.h"
+#include "TransmitterIR.h"
+#include "RPCFunction.h"
+#include "RPCVariable.h"
+
+TransmitterIR ir_tx(p21);
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
+LocalFileSystem fs("webfs");
+
+
+/*
+EthernetNetIf   m_Ether(
+    IpAddr( 192,168,  0, 7 ), // IP Address
+    IpAddr( 255,255,255,  0 ), // Mask
+    IpAddr( 192,168,  0,  1 ), // Default Gateway
+    IpAddr( 192,168,  0,  1 )  // DNS
+);
+*/
+EthernetNetIf eth;
+
+HTTPServer svr;
+
+
+/**
+ * RPCに登録する関数野プロトタイプ宣言
+ * RPCに登録できる関数は
+ * void funtion(char * input, char * output)
+ * の形
+ */
+void irSend(char * input, char * output);
+void irSignalSend(char * input , char * output);
+void turnONLight1(char * input, char * output);
+void turnONLight2(char * input, char * output);
+void turnONAirConditioner(char* input,char* output);
+
+/**
+ * RPCへの関数の登録
+ * RPCFunction rpc_TurnONLight1(関数アドレス,"コールする際のテキスト");
+ * TODO sscanf等を使用して、汎用的な赤外線信号の送信関数を作る
+ */
+RPCFunction rpc_TurnONLight1(&turnONLight1,"light1");
+RPCFunction rpc_TurnONLight2(&turnONLight2,"light2");
+RPCFunction rpc_turnONAirConditioner(&turnONAirConditioner,"aircon");
+
+void turnONLight1(char * input, char * output){
+    
+    RemoteIR::Format format = RemoteIR::NEC;
+    uint8_t buf[] = { 0x82, 0xE8, 0x80, 0x7F };//結局ベタ書きしてます。
+    int bitcount = 32;
+    for(int i=0; i<3 ;i++){
+        if (ir_tx.getState() == TransmitterIR::Idle) {
+            bitcount = ir_tx.setData(format, buf, bitcount);
+        }
+    }
+    led4=1;
+    wait(0.5);
+    led4=0;
+    
+    printf("light1");
+}
+
+void turnONLight2(char * input, char * output){
+    RemoteIR::Format format = RemoteIR::NEC;
+    uint8_t buf[] = { 0x82, 0xE8, 0x81, 0x7E };//
+    int bitcount = 32;
+     for(int i=0; i<3 ;i++){
+        if (ir_tx.getState() == TransmitterIR::Idle) {
+            bitcount = ir_tx.setData(format, buf, bitcount);
+        }
+    }
+    led4=1;
+    wait(0.5);
+    led4=0;
+    
+    printf("light2");
+}
+
+void turnONAirConditioner(char* input,char* output){
+    RemoteIR::Format format = RemoteIR::AEHA;
+    uint8_t buf[] = {
+         0x23, 0xCB, 0x26, 0x01,
+         0x00, 0x20, 0x08,0x0A, 
+         0x30, 0x40, 0x00, 0x00, 
+         0x00, 0x00, 0x00, 0x00, 
+         0x00, 0xB7 };//
+    int bitcount = 144;
+    for(int i=0; i<3 ;i++){
+        if (ir_tx.getState() == TransmitterIR::Idle) {
+            bitcount = ir_tx.setData(format, buf, bitcount);
+        }
+    }
+    led4=1;
+    wait(0.5);
+    led4=0;
+    
+    printf("aircon");
+}
+
+/**
+ * メイン関数
+ * 
+ */
+int main()
+{
+    Base::add_rpc_class<DigitalOut>();
+    Base::add_rpc_class<AnalogIn>();
+    Base::add_rpc_class<PwmOut>();
+
+    printf("Setting up...\n");
+
+    EthernetErr ethErr = eth.setup();
+    if(ethErr) {
+        printf("Error %d in setup.\n", ethErr);
+        return -1;
+    }
+    printf("Setup OK\n");
+    IpAddr ip = eth.getIp() ;             //IP Address Read
+    printf(" [%d.%d.%d.%d]\r\n", ip[0], ip[1], ip[2], ip[3] ) ;
+
+    FSHandler::mount("/webfs", "/files"); //Mount /webfs path on /files web path
+    FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path
+
+    svr.addHandler<RPCHandler>("/rpc");// /rpcをRPCのパスとして設定
+    svr.addHandler<FSHandler>("/files");
+    svr.addHandler<FSHandler>("/"); //Default handler
+    svr.bind(80);//
+
+    printf("Listening...\n");
+
+    led1 = 0;
+    while(true) {
+        Net::poll();
+    }
+}
+
diff -r 000000000000 -r 79a0104e2c51 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sun Mar 02 13:34:04 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e