SimpleHandler

Dependencies:   EthernetInterface HttpServer mbed-rpc mbed-rtos mbed TextLCD

You are viewing an older revision! See the latest version

Homepage

新しいEthenetInterfaceで、なるべくいじらなくて過去(EthernetEth)と同様のことをします。

Thank You

新しいライブラリを作成するのにDonatien Garnier(@donatien )さん、Suga koubou(@okini3939 )さん、Norimasa Okamoto(@va009039 )さんのコードおよび記事を大変参考にさせて頂いています。

注意事項

まだ、すべてをチェックしているわけではありません。

環境

☆Board Orangeを使用する前提で書いています。
他のボードを使用する場合はTextLCDを代えたり、削除等すればご利用できると思います。
FSとしてLocalFileSystemでチェックしています。このページのtest.htm、mbedrpc.jsは、mbedに保存してください。

必要なファイル

mbedrpc.js/media/uploads/yueee_yt/mbedrpc.js
test.htm /media/uploads/yueee_yt/test.htm

HTTP Server

以前と同様SimpleHandler,FSHandler,RPCHandlerが利用できます。
RPCのJavaScript経由の場合は、このページにあるファイルを使用してください。

//#define DNS_SERVER_ADDRESS(ipaddr)        (ip4_addr_set_u32(ipaddr, ipaddr_addr("208.67.222.222"))) /* resolver1.opendns.com */
#include "mbed.h"
#include "rtos.h"
#include "EthernetInterface.h"
#include "HTTPServer.h"
#include "mbed_rpc.h"
#include "TextLCD.h"
EthernetInterface eth;

DigitalOut led4(LED4);
 
LocalFileSystem local("local"); 
   void LcdWrite(Arguments* arg, Reply* r);    //ADD Here!!
 
TextLCD lcd(p24, p26, p27, p28, p29, p30);

void aliveState(void const *args) {
    while (true) {
        led4 = !led4;
        Thread::wait(1000);
    }
}

int main()
{
    printf("********* PROGRAM START ***********\r\n");
    Thread thread(aliveState);
    RPC::add_rpc_class<RpcDigitalOut>();
    RPC::construct<RpcDigitalOut, PinName, const char*>(LED1, "led1");  
    RPC::construct<RpcDigitalOut, PinName, const char*>(LED2, "led2");  
    RPC::construct<RpcDigitalOut, PinName, const char*>(LED3, "led3");  
    RPCFunction rpcFunc(LcdWrite, "LcdWrite"); //ADD Here!!
  lcd.cls();
    lcd.locate(0,0);

    printf("EthernetInterface Setting up...\r\n");
    if(eth.init()!=0) {                             //for DHCP Server
    //if(eth.init(IPAddress,NetMasks,Gateway)!=0) { //for Static IP Address
        printf("EthernetInterface Initialize Error \r\n");
        return -1;
    }
    if(eth.connect()!=0) {
        printf("EthernetInterface Connect Error \r\n");
        return -1;
    }
    printf("IP Address is %s\r\n", eth.getIPAddress());
    printf("NetMask is %s\r\n", eth.getNetworkMask());
    printf("Gateway Address is %s\r\n", eth.getGateway());
    printf("Ethernet Setup OK\r\n");

    HTTPServerAddHandler<SimpleHandler>("/hello"); //Default handler
    FSHandler::mount("/local", "/");
    HTTPServerAddHandler<FSHandler>("/");
    HTTPServerAddHandler<RPCHandler>("/rpc");
    lcd.locate(0,0);
    lcd.printf("%s",eth.getIPAddress());
    HTTPServerStart(80);
}

void LcdWrite(Arguments* arg, Reply* r)  //ADD Here!!
{
    lcd.locate(0,1);
    lcd.printf("%s",arg->argv[0]);
}

液晶の1段目にDHCPでGetしたIPアドレスを表示するので、web Browserで、接続します。この例では、192.168.1.68になります。

SimpleHandlerが/helloになっているので、"http://192.168.1.68/hello"で接続すると
/media/uploads/yueee_yt/simplehandler.jpg

LocalFileSystem(MBED本体のFlashメモリ)は/にマウントされているので、"http://192.168.1.68/MBED.HTM"とするとmbedのホームページに行きます。

RPCは led2を光らすには "http://192.168.1.68/rpc/led2/write 1"とすればLED2が光ります
消すにはもちろん"http://192.168.1.68/rpc/led2/write 0"とします。

これをweb上からするにはtest.htmを参考にしてください。"http://192.168.1.68/test.htm"

なおファイル名は8.3形式しか使用できないので拡張子は"*.htm"になっています。

test.htm

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-2022-jp"> 
<title>mbed test web</title>
<script  type="text/javascript" src="mbedRPC.js" language="javascript"></script>
<script type="text/javascript">
            mbed = new HTTPRPC();
            led1 = new DigitalOut(mbed, LED1);
            led2 = new DigitalOut(mbed, LED2);
            led3 = new DigitalOut(mbed, LED3);
lcd = new RPCFunction(mbed,"LcdWrite");
          
</script>
</head>
<body>
<form action="test.htm" method="get">
<button type="submit" ID="btn_LED1a" onclick="led1.write(1)">LED1点灯</button> <br >
<button type="submit" ID="btn_LED2a" onclick="led2.write(1)">LED2点灯</button> <br >
<button type="submit" ID="btn_LED3a" onclick="led3.write(1)">LED3点灯</button> <br >
<br>
<button type="submit" ID="btn_LED1b" onclick="led1.write(0)">LED1消灯</button> <br >
<button type="submit" ID="btn_LED2b" onclick="led2.write(0)">LED2消灯</button> <br >
<button type="submit" ID="btn_LED3b" onclick="led3.write(0)">LED3消灯</button> <br >
<br>
</form>
<script type="text/javascript">
var led_1=led1.read();
var led_2=led2.read();
var led_3=led3.read();
 
document.write("LED1は");
if(led_1==0)document.write("消灯");else document.write("点灯");
document.write("しています<br>");
 
document.write("LED2は");
if(led_2==0)document.write("消灯");else document.write("点灯");
document.write("しています<br>");
 
document.write("LED3は");
if(led_3==0)document.write("消灯");else document.write("点灯");
document.write("しています<br>");
 
</script>
<input type="text" id="textbox" ></input><button onclick="lcd.run(textbox.value);">送信</button> <br>

</body>
</html>

mbedは、プログラム中にHTMLを書かずにjavascriptで対応できるのが楽です。

最後のWebのTextBoxに英数字をいれ送信を押すとTextLCDの下段に表示されます。

今後はIEEE1888サーバを実装します


All wikipages