赤外線信号を送信し、家電のコントロールを行うためのプログラム。 動作には、赤外線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>
main.cpp
- Committer:
- MrBearing
- Date:
- 2014-03-02
- Revision:
- 0:79a0104e2c51
File content as of revision 0:79a0104e2c51:
/** * 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(); } }