« ESP8266のArduinoでADC_MODEが無い | トップページ | ESP8266とmicroSDを接続してみる »

2015年7月 7日 (火)

ESP8266のArduino IDEのWebServerでGETコマンドの引数を取得する

ESP8266のArduino IDEのWebServerでGETコマンドの引数を取得する

WebServerでGETやPOSTの引数を取得できないと何もできない。
そこで引数を取得する方法を調べてテストしてみた。

最初適当にgrepで検索したけど上手く見つからない。
WebServerは受け取ったパケットのコマンドを解析しそのあとに引数を改正しているはず。
ということでHelloServerのloop()

void loop(void){
  server.handleClient();
}

のhandleClient()から調べると

C:\Users\hogehoge\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\1.6.4-673-g8cd3697\libraries\ESP8266WebServer\src
の181行あたりに

String ESP8266WebServer::arg(const char* name) {
  for (int i = 0; i < _currentArgCount; ++i) {
    if (_currentArgs[i].key == name)
      return _currentArgs[i].value;
  }
  return String();
}

というコードが有った、これで取得できそうだ
というこどで以下のコードを書いてテスト

サンプルのHelloServerのsetup()に以下のコード追加(場所は  server.on("/onoff", []() { の下あたり)

  pinMode(4, OUTPUT);
  analogWrite(4, 0);

  server.on("/onoff", []() {
    String s = server.arg("LED");
    if (s == "on") {
      analogWrite(4, 1024);
    } else {
      analogWrite(4, 0);
    }

    String message = "<html><head></head>";
    message += "<body>LED='";
    message += s;
    message += "'<br />";
    message += "<form method='get' action='./onoff'>";
    message += "<input type='radio' name='LED' value='on' checked='checked' />ON";
    message += "<input type='radio' name='LED' value='off' />OFF";
    message += "<input type='submit' value='送信'>";
    message += "</button>";
    message += "</form>";
    message += "</body></html>";
    server.send(200, "text/html", message);
  });

http://192.168.x.x/onoffに接続し送信ボタンを押すと"LED=on"と表示される。

« ESP8266のArduinoでADC_MODEが無い | トップページ | ESP8266とmicroSDを接続してみる »

Arduino」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/569662/61848991

この記事へのトラックバック一覧です: ESP8266のArduino IDEのWebServerでGETコマンドの引数を取得する:

« ESP8266のArduinoでADC_MODEが無い | トップページ | ESP8266とmicroSDを接続してみる »