The program uses RPC over http to open a garage door over the internet. On a htm page is a link that calls a RPC function
Dependencies: EthernetNetIf NTPClient_NetServices mbed HTTPServer
Diff: myGarageDoorOpenerHTTPServerExample.cpp
- Revision:
- 0:8c69f4c2bb0e
- Child:
- 1:71c0a02e6587
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/myGarageDoorOpenerHTTPServerExample.cpp Fri Jun 10 21:20:19 2011 +0000 @@ -0,0 +1,121 @@ +#include "mbed.h" +#include "EthernetNetIf.h" +#include "HTTPServer.h" +#include "RPCFunction.h" + +DigitalOut led1(LED1, "led1"); +DigitalOut led2(LED2, "led2"); +DigitalOut led3(LED3, "led3"); +DigitalOut led4(LED4, "led4"); +DigitalOut rfout(p22,"rfout"); + +LocalFileSystem fs("webfs");// Create the local filesystem under the name "local" + +EthernetNetIf eth( + IpAddr(192,168,1,100), //IP Address + IpAddr(255,255,255,0), //Network Mask + IpAddr(192,168,1,254), //Gateway + IpAddr(192,168,1,254) //DNS +); +HTTPServer svr; + +void sendbit(char a); +void open(char * input, char * output);//Open garage door +RPCFunction rpc_open(&open, "open"); + +int main() { + Base::add_rpc_class<AnalogIn>(); + Base::add_rpc_class<AnalogOut>(); + Base::add_rpc_class<DigitalIn>(); + Base::add_rpc_class<DigitalOut>(); + Base::add_rpc_class<DigitalInOut>(); + Base::add_rpc_class<PwmOut>(); + Base::add_rpc_class<Timer>(); + Base::add_rpc_class<BusOut>(); + Base::add_rpc_class<BusIn>(); + Base::add_rpc_class<BusInOut>(); + Base::add_rpc_class<Serial>(); + + printf("Setting up...\n"); + EthernetErr ethErr = eth.setup(); + if (ethErr) { + printf("Error %d in setup.\n", ethErr); + return -1; + } + printf("Setup OK\n"); + + FSHandler::mount("/webfs", "/files"); //Mount /webfs path on /files web path + FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path + + svr.addHandler<SimpleHandler>("/hello"); + svr.addHandler<RPCHandler>("/rpc"); + svr.addHandler<FSHandler>("/files"); + svr.addHandler<FSHandler>("/"); //Default handler + //Example : Access to mbed.htm : http://a.b.c.d/mbed.htm or http://a.b.c.d/files/mbed.htm + svr.bind(80); + printf("Listening...\n"); + + Timer tm; + tm.start(); + while (true) { + Net::poll(); + if (tm.read()>0.5) { + led1=!led1; //Show that we are alive + tm.start(); + } + }//end of while loop +}//end of main + +void sendbit(char a) { + if (a==0) { //pin low + rfout=1; + wait_us(2010); + rfout=0; + wait_us(270); + rfout=1; + wait_us(2010); + rfout=0; + wait_us(270); + } + if (a==1) { //pin high + rfout=1; + wait_us(270); + rfout=0; + wait_us(2010); + rfout=1; + wait_us(270); + rfout=0; + wait_us(2010); + } +} + + void open(char * input, char * output) { + led4=1; + for (char i = 0; i<20; i++) { + sendbit(1);//address A1 + sendbit(0);//address A2 + sendbit(0);//address A3 + sendbit(0);//address A4 + sendbit(1);//address A5 + sendbit(0);//address A6 /data D6 + sendbit(1);//address A7 /data D7 + sendbit(0);//address A8 /data D8 + sendbit(1);//address A9 /data D9 + wait_ms(14); + } + led4=0; + sprintf(output, "<html><head><meta http-equiv=refresh content='5; url=../../index.htm'></head><body BGCOLOR=#A1F9FF>Opening,wait...</body></html>"); + } + + + + + + + + + + + + +