![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
test1
Dependencies: mbed HTTPServer EthernetNetIf FatFileSystemCpp
HTTPSer_USB.cpp
00001 /* 00002 RPC - リモートプロシージャコール 00003 RPC (Remote Procedure Call)とは、プログラムから別のアドレス空間(別のCPUだったり、ネットワーク越しのPCだったり)にあるプログラムを実行する技術。 00004 00005 mbedのRPCコマンドの形式は次のとおりです。 00006 /<Object Name>/<Method Name> 00007 00008 "/" だけ送ると、使用できるObject Nameを返します。 00009 00010 "/<Object Name>" だけ送ると、使用できるMethod Nameを返します。 00011 00012 RPC Over HTTP 00013 00014 ウェブブラウザからも RPC を使用して、 mbed のハードウェアをコントロールすることができます。 00015 グローバルIPアドレス(WAN)で使う場合はセキュリティ機能(認証など)を載せたほうがいいでしょう。 00016 Information 00017 00018 HTTP経由のRPCコマンドの形式は http://<url of mbed>/rpc/<Object name>/<Method name> <Arguments separated by spaces> 00019 00020 svr.addHandler<RPCHandler>("/rpc"); 00021 00022 Sample 00023 00024 http://192.168.0.123/rpc/DigitalIn/new p5 myport 00025 これはmbedのプログラムで 00026 DigitalIn myport(p5); 00027 を実行したのと同じです。 00028 成功すると myport と返ってきます。 00029 00030 http://192.168.0.123/rpc/myport/read 00031 これはmbedのプログラムで 00032 myport.read(); 00033 を実行したのと同じです。 00034 ポートの状態 0 または 1 が返ってきます。 00035 00036 ※ 192.168.0.123 はユーザーの環境に合わせてください。 00037 00038 また、上のプログラムは mbed のUSBストレージ(USBメモリ)にもアクセスできますので RPCを使ったhtmlファイルを入れておくといいでしょう。 00039 Sample 00040 00041 http://192.168.0.123/files/mbed.htm 00042 00043 webブラウザから 00044 http://192.168.0.123/rpc/led3/write 1 00045 とするとLED3 が点灯することを確認する。 00046 00047 http://192.168.0.123/rpc/led3/write 0 00048 とするとLED3 が消灯する。 00049 00050 */ 00051 00052 #include "mbed.h" 00053 #include "EthernetNetIf.h" 00054 #include "HTTPServer.h" 00055 #include "MSCFileSystem.h" 00056 00057 #define FSNAME "msc" 00058 MSCFileSystem msc(FSNAME); 00059 00060 //EthernetNetIf eth; 00061 00062 EthernetNetIf eth( 00063 IpAddr(172,16,3,150), //IP Address 172.16.3.130 to 172.16.3.150 00064 IpAddr(255,255,0,0), //Network Mask 00065 // IpAddr(172,16,0,254), //Gateway 00066 // IpAddr(172,168,3,10) //DNS 00067 IpAddr(172,16,3,150), //Gateway 00068 IpAddr(172,16,3,150) //DNS 00069 ); 00070 00071 HTTPServer svr; 00072 00073 Serial pc(USBTX,USBRX); 00074 00075 DigitalOut led1(LED1,"led1"); 00076 DigitalOut led2(LED2,"led2"); 00077 DigitalOut led3(LED3,"led3"); 00078 DigitalOut led4(LED4,"led4"); 00079 00080 int main() { 00081 00082 DIR *d; 00083 struct dirent *p; 00084 00085 pc.printf("Setting up...\n"); 00086 EthernetErr ethErr = eth.setup(); 00087 if(ethErr) 00088 { 00089 pc.printf("Error %d in setup.\n", ethErr); 00090 return -1; 00091 } 00092 pc.printf("Setup OK\n"); 00093 00094 FSHandler::mount("/" FSNAME "/web", "/web"); //Mount /usb path on web root path 00095 d = opendir("/" FSNAME "/web"); 00096 00097 pc.printf("\nList of files on the flash drive:\n"); 00098 if ( d != NULL ) 00099 { 00100 while ( (p = readdir(d)) != NULL ) 00101 { 00102 pc.printf(" - %s\n", p->d_name); 00103 } 00104 } 00105 else 00106 { 00107 pc.printf("Could not open directory!"); 00108 error("Could not open directory!"); 00109 } 00110 00111 00112 00113 Base::add_rpc_class<DigitalOut>(); 00114 //svr.addHandler<SimpleHandler>("/"); //Default handler 00115 svr.addHandler<FSHandler>("/web"); //Default handler 00116 //svr.addHandler<FSHandler>("/"); //Default handler 00117 svr.addHandler<RPCHandler>("/rpc"); 00118 svr.bind(80); 00119 printf("Listening... n"); 00120 00121 Timer tm; 00122 tm.start(); 00123 //Listen indefinitely 00124 while(true) 00125 { 00126 Net::poll(); 00127 } 00128 00129 return 0; 00130 }
Generated on Wed Aug 17 2022 21:52:02 by
![doxygen](doxygen.png)