test1
Dependencies: mbed HTTPServer EthernetNetIf FatFileSystemCpp
HTTPSer_USB.cpp
- Committer:
- solarca2
- Date:
- 2020-09-02
- Revision:
- 0:0ca3ad47fc8e
File content as of revision 0:0ca3ad47fc8e:
/* RPC - リモートプロシージャコール RPC (Remote Procedure Call)とは、プログラムから別のアドレス空間(別のCPUだったり、ネットワーク越しのPCだったり)にあるプログラムを実行する技術。 mbedのRPCコマンドの形式は次のとおりです。 /<Object Name>/<Method Name> "/" だけ送ると、使用できるObject Nameを返します。 "/<Object Name>" だけ送ると、使用できるMethod Nameを返します。 RPC Over HTTP ウェブブラウザからも RPC を使用して、 mbed のハードウェアをコントロールすることができます。 グローバルIPアドレス(WAN)で使う場合はセキュリティ機能(認証など)を載せたほうがいいでしょう。 Information HTTP経由のRPCコマンドの形式は http://<url of mbed>/rpc/<Object name>/<Method name> <Arguments separated by spaces> svr.addHandler<RPCHandler>("/rpc"); Sample http://192.168.0.123/rpc/DigitalIn/new p5 myport これはmbedのプログラムで DigitalIn myport(p5); を実行したのと同じです。 成功すると myport と返ってきます。 http://192.168.0.123/rpc/myport/read これはmbedのプログラムで myport.read(); を実行したのと同じです。 ポートの状態 0 または 1 が返ってきます。 ※ 192.168.0.123 はユーザーの環境に合わせてください。 また、上のプログラムは mbed のUSBストレージ(USBメモリ)にもアクセスできますので RPCを使ったhtmlファイルを入れておくといいでしょう。 Sample http://192.168.0.123/files/mbed.htm webブラウザから http://192.168.0.123/rpc/led3/write 1 とするとLED3 が点灯することを確認する。 http://192.168.0.123/rpc/led3/write 0 とするとLED3 が消灯する。 */ #include "mbed.h" #include "EthernetNetIf.h" #include "HTTPServer.h" #include "MSCFileSystem.h" #define FSNAME "msc" MSCFileSystem msc(FSNAME); //EthernetNetIf eth; EthernetNetIf eth( IpAddr(172,16,3,150), //IP Address 172.16.3.130 to 172.16.3.150 IpAddr(255,255,0,0), //Network Mask // IpAddr(172,16,0,254), //Gateway // IpAddr(172,168,3,10) //DNS IpAddr(172,16,3,150), //Gateway IpAddr(172,16,3,150) //DNS ); HTTPServer svr; Serial pc(USBTX,USBRX); DigitalOut led1(LED1,"led1"); DigitalOut led2(LED2,"led2"); DigitalOut led3(LED3,"led3"); DigitalOut led4(LED4,"led4"); int main() { DIR *d; struct dirent *p; pc.printf("Setting up...\n"); EthernetErr ethErr = eth.setup(); if(ethErr) { pc.printf("Error %d in setup.\n", ethErr); return -1; } pc.printf("Setup OK\n"); FSHandler::mount("/" FSNAME "/web", "/web"); //Mount /usb path on web root path d = opendir("/" FSNAME "/web"); pc.printf("\nList of files on the flash drive:\n"); if ( d != NULL ) { while ( (p = readdir(d)) != NULL ) { pc.printf(" - %s\n", p->d_name); } } else { pc.printf("Could not open directory!"); error("Could not open directory!"); } Base::add_rpc_class<DigitalOut>(); //svr.addHandler<SimpleHandler>("/"); //Default handler svr.addHandler<FSHandler>("/web"); //Default handler //svr.addHandler<FSHandler>("/"); //Default handler svr.addHandler<RPCHandler>("/rpc"); svr.bind(80); printf("Listening... n"); Timer tm; tm.start(); //Listen indefinitely while(true) { Net::poll(); } return 0; }