赤外線信号を送信し、家電のコントロールを行うためのプログラム。 動作には、赤外線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>
Committer:
MrBearing
Date:
Sun Mar 02 13:34:04 2014 +0000
Revision:
0:79a0104e2c51
First Commit this program

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MrBearing 0:79a0104e2c51 1 /**
MrBearing 0:79a0104e2c51 2 * RPC Remote
MrBearing 0:79a0104e2c51 3 *
MrBearing 0:79a0104e2c51 4 * 赤外線信号の送信をRPCを介して送信するプログラム
MrBearing 0:79a0104e2c51 5 * (2014年3月2日公開)
MrBearing 0:79a0104e2c51 6 * Takumi Okamoto
MrBearing 0:79a0104e2c51 7 * 注意:現在の所、安定した動作をしていません。
MrBearing 0:79a0104e2c51 8 * 朝電源を入れて、夕方頃には動作をしていないことが多々あります。
MrBearing 0:79a0104e2c51 9 */
MrBearing 0:79a0104e2c51 10
MrBearing 0:79a0104e2c51 11
MrBearing 0:79a0104e2c51 12 #include "mbed.h"
MrBearing 0:79a0104e2c51 13 #include "EthernetNetIf.h"
MrBearing 0:79a0104e2c51 14 #include "HTTPServer.h"
MrBearing 0:79a0104e2c51 15 #include "TransmitterIR.h"
MrBearing 0:79a0104e2c51 16 #include "RPCFunction.h"
MrBearing 0:79a0104e2c51 17 #include "RPCVariable.h"
MrBearing 0:79a0104e2c51 18
MrBearing 0:79a0104e2c51 19 TransmitterIR ir_tx(p21);
MrBearing 0:79a0104e2c51 20 DigitalOut led1(LED1);
MrBearing 0:79a0104e2c51 21 DigitalOut led2(LED2);
MrBearing 0:79a0104e2c51 22 DigitalOut led3(LED3);
MrBearing 0:79a0104e2c51 23 DigitalOut led4(LED4);
MrBearing 0:79a0104e2c51 24
MrBearing 0:79a0104e2c51 25 LocalFileSystem fs("webfs");
MrBearing 0:79a0104e2c51 26
MrBearing 0:79a0104e2c51 27
MrBearing 0:79a0104e2c51 28 /*
MrBearing 0:79a0104e2c51 29 EthernetNetIf m_Ether(
MrBearing 0:79a0104e2c51 30 IpAddr( 192,168, 0, 7 ), // IP Address
MrBearing 0:79a0104e2c51 31 IpAddr( 255,255,255, 0 ), // Mask
MrBearing 0:79a0104e2c51 32 IpAddr( 192,168, 0, 1 ), // Default Gateway
MrBearing 0:79a0104e2c51 33 IpAddr( 192,168, 0, 1 ) // DNS
MrBearing 0:79a0104e2c51 34 );
MrBearing 0:79a0104e2c51 35 */
MrBearing 0:79a0104e2c51 36 EthernetNetIf eth;
MrBearing 0:79a0104e2c51 37
MrBearing 0:79a0104e2c51 38 HTTPServer svr;
MrBearing 0:79a0104e2c51 39
MrBearing 0:79a0104e2c51 40
MrBearing 0:79a0104e2c51 41 /**
MrBearing 0:79a0104e2c51 42 * RPCに登録する関数野プロトタイプ宣言
MrBearing 0:79a0104e2c51 43 * RPCに登録できる関数は
MrBearing 0:79a0104e2c51 44 * void funtion(char * input, char * output)
MrBearing 0:79a0104e2c51 45 * の形
MrBearing 0:79a0104e2c51 46 */
MrBearing 0:79a0104e2c51 47 void irSend(char * input, char * output);
MrBearing 0:79a0104e2c51 48 void irSignalSend(char * input , char * output);
MrBearing 0:79a0104e2c51 49 void turnONLight1(char * input, char * output);
MrBearing 0:79a0104e2c51 50 void turnONLight2(char * input, char * output);
MrBearing 0:79a0104e2c51 51 void turnONAirConditioner(char* input,char* output);
MrBearing 0:79a0104e2c51 52
MrBearing 0:79a0104e2c51 53 /**
MrBearing 0:79a0104e2c51 54 * RPCへの関数の登録
MrBearing 0:79a0104e2c51 55 * RPCFunction rpc_TurnONLight1(関数アドレス,"コールする際のテキスト");
MrBearing 0:79a0104e2c51 56 * TODO sscanf等を使用して、汎用的な赤外線信号の送信関数を作る
MrBearing 0:79a0104e2c51 57 */
MrBearing 0:79a0104e2c51 58 RPCFunction rpc_TurnONLight1(&turnONLight1,"light1");
MrBearing 0:79a0104e2c51 59 RPCFunction rpc_TurnONLight2(&turnONLight2,"light2");
MrBearing 0:79a0104e2c51 60 RPCFunction rpc_turnONAirConditioner(&turnONAirConditioner,"aircon");
MrBearing 0:79a0104e2c51 61
MrBearing 0:79a0104e2c51 62 void turnONLight1(char * input, char * output){
MrBearing 0:79a0104e2c51 63
MrBearing 0:79a0104e2c51 64 RemoteIR::Format format = RemoteIR::NEC;
MrBearing 0:79a0104e2c51 65 uint8_t buf[] = { 0x82, 0xE8, 0x80, 0x7F };//結局ベタ書きしてます。
MrBearing 0:79a0104e2c51 66 int bitcount = 32;
MrBearing 0:79a0104e2c51 67 for(int i=0; i<3 ;i++){
MrBearing 0:79a0104e2c51 68 if (ir_tx.getState() == TransmitterIR::Idle) {
MrBearing 0:79a0104e2c51 69 bitcount = ir_tx.setData(format, buf, bitcount);
MrBearing 0:79a0104e2c51 70 }
MrBearing 0:79a0104e2c51 71 }
MrBearing 0:79a0104e2c51 72 led4=1;
MrBearing 0:79a0104e2c51 73 wait(0.5);
MrBearing 0:79a0104e2c51 74 led4=0;
MrBearing 0:79a0104e2c51 75
MrBearing 0:79a0104e2c51 76 printf("light1");
MrBearing 0:79a0104e2c51 77 }
MrBearing 0:79a0104e2c51 78
MrBearing 0:79a0104e2c51 79 void turnONLight2(char * input, char * output){
MrBearing 0:79a0104e2c51 80 RemoteIR::Format format = RemoteIR::NEC;
MrBearing 0:79a0104e2c51 81 uint8_t buf[] = { 0x82, 0xE8, 0x81, 0x7E };//
MrBearing 0:79a0104e2c51 82 int bitcount = 32;
MrBearing 0:79a0104e2c51 83 for(int i=0; i<3 ;i++){
MrBearing 0:79a0104e2c51 84 if (ir_tx.getState() == TransmitterIR::Idle) {
MrBearing 0:79a0104e2c51 85 bitcount = ir_tx.setData(format, buf, bitcount);
MrBearing 0:79a0104e2c51 86 }
MrBearing 0:79a0104e2c51 87 }
MrBearing 0:79a0104e2c51 88 led4=1;
MrBearing 0:79a0104e2c51 89 wait(0.5);
MrBearing 0:79a0104e2c51 90 led4=0;
MrBearing 0:79a0104e2c51 91
MrBearing 0:79a0104e2c51 92 printf("light2");
MrBearing 0:79a0104e2c51 93 }
MrBearing 0:79a0104e2c51 94
MrBearing 0:79a0104e2c51 95 void turnONAirConditioner(char* input,char* output){
MrBearing 0:79a0104e2c51 96 RemoteIR::Format format = RemoteIR::AEHA;
MrBearing 0:79a0104e2c51 97 uint8_t buf[] = {
MrBearing 0:79a0104e2c51 98 0x23, 0xCB, 0x26, 0x01,
MrBearing 0:79a0104e2c51 99 0x00, 0x20, 0x08,0x0A,
MrBearing 0:79a0104e2c51 100 0x30, 0x40, 0x00, 0x00,
MrBearing 0:79a0104e2c51 101 0x00, 0x00, 0x00, 0x00,
MrBearing 0:79a0104e2c51 102 0x00, 0xB7 };//
MrBearing 0:79a0104e2c51 103 int bitcount = 144;
MrBearing 0:79a0104e2c51 104 for(int i=0; i<3 ;i++){
MrBearing 0:79a0104e2c51 105 if (ir_tx.getState() == TransmitterIR::Idle) {
MrBearing 0:79a0104e2c51 106 bitcount = ir_tx.setData(format, buf, bitcount);
MrBearing 0:79a0104e2c51 107 }
MrBearing 0:79a0104e2c51 108 }
MrBearing 0:79a0104e2c51 109 led4=1;
MrBearing 0:79a0104e2c51 110 wait(0.5);
MrBearing 0:79a0104e2c51 111 led4=0;
MrBearing 0:79a0104e2c51 112
MrBearing 0:79a0104e2c51 113 printf("aircon");
MrBearing 0:79a0104e2c51 114 }
MrBearing 0:79a0104e2c51 115
MrBearing 0:79a0104e2c51 116 /**
MrBearing 0:79a0104e2c51 117 * メイン関数
MrBearing 0:79a0104e2c51 118 *
MrBearing 0:79a0104e2c51 119 */
MrBearing 0:79a0104e2c51 120 int main()
MrBearing 0:79a0104e2c51 121 {
MrBearing 0:79a0104e2c51 122 Base::add_rpc_class<DigitalOut>();
MrBearing 0:79a0104e2c51 123 Base::add_rpc_class<AnalogIn>();
MrBearing 0:79a0104e2c51 124 Base::add_rpc_class<PwmOut>();
MrBearing 0:79a0104e2c51 125
MrBearing 0:79a0104e2c51 126 printf("Setting up...\n");
MrBearing 0:79a0104e2c51 127
MrBearing 0:79a0104e2c51 128 EthernetErr ethErr = eth.setup();
MrBearing 0:79a0104e2c51 129 if(ethErr) {
MrBearing 0:79a0104e2c51 130 printf("Error %d in setup.\n", ethErr);
MrBearing 0:79a0104e2c51 131 return -1;
MrBearing 0:79a0104e2c51 132 }
MrBearing 0:79a0104e2c51 133 printf("Setup OK\n");
MrBearing 0:79a0104e2c51 134 IpAddr ip = eth.getIp() ; //IP Address Read
MrBearing 0:79a0104e2c51 135 printf(" [%d.%d.%d.%d]\r\n", ip[0], ip[1], ip[2], ip[3] ) ;
MrBearing 0:79a0104e2c51 136
MrBearing 0:79a0104e2c51 137 FSHandler::mount("/webfs", "/files"); //Mount /webfs path on /files web path
MrBearing 0:79a0104e2c51 138 FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path
MrBearing 0:79a0104e2c51 139
MrBearing 0:79a0104e2c51 140 svr.addHandler<RPCHandler>("/rpc");// /rpcをRPCのパスとして設定
MrBearing 0:79a0104e2c51 141 svr.addHandler<FSHandler>("/files");
MrBearing 0:79a0104e2c51 142 svr.addHandler<FSHandler>("/"); //Default handler
MrBearing 0:79a0104e2c51 143 svr.bind(80);//
MrBearing 0:79a0104e2c51 144
MrBearing 0:79a0104e2c51 145 printf("Listening...\n");
MrBearing 0:79a0104e2c51 146
MrBearing 0:79a0104e2c51 147 led1 = 0;
MrBearing 0:79a0104e2c51 148 while(true) {
MrBearing 0:79a0104e2c51 149 Net::poll();
MrBearing 0:79a0104e2c51 150 }
MrBearing 0:79a0104e2c51 151 }
MrBearing 0:79a0104e2c51 152