簡體   English   中英

從網絡服務器檢索URL / href到ESP8266(進行處理)

[英]Retriveing URL/href from webserver to ESP8266 (to process it)

我制作了一個HTML表單,其中包含2個具有多個選項的下拉菜單和4個輸入框,當我填寫所有輸入並按Submit時,所有數據都會顯示在URL中。 問題是,我想通過使用String.replace()來處理ESP8266中的URL內容(在c ++中); 然后最終將其發送回經過處理的Web服務器。

我只需要幫助將URL轉換為C ++中的字符串,因為我知道如何做其余的事情。

我環顧四周,對於這個簡單的問題,我感到非常驚訝,因為我並未真正發現那么多。 但是,我找到了Server.arg(),但是我不知道如何使用它。


C++ page:


#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiClient.h>
#include "PageBuilder.h"
#include "newGame.h"

int x = 0; 
int y = 10;
String score="test";
String score2="test2";
String refresh = "5";


#if defined(ARDUINO_ARCH_ESP8266)
ESP8266WebServer Server;
ESP8266WebServer  server;
#endif

String scoreSend(PageArgument& args) { 
  return score;
}
String scoreSend2(PageArgument& args) { 
  return score2;
}
const char html[] = "<div class=\"jumbotron\"><div align=\"center\"><h1 class=\"display-4\" style=\"font-family: zetafonts-cinematografica-extrabold; font-size: 30px;\" >{{SCORE}} {{SCORE2}} </h1></div></div>";


String rate(PageArgument& args) { 
  return refresh;
}

const char rfs[] = "<meta http-equiv=\"refresh\" content=\"{{REFRESH}}\">";

PageElement refresh_elm(rfs, { {"REFRESH", rate} });
PageElement body_elem(html, { {"SCORE", scoreSend} });
PageElement Score_2(html, { {"SCORE2", scoreSend2} });
PageElement CURRENT_GAME_ELEMENT(htmlPage2);
PageBuilder CURRENT_GAME("/current-game", { CURRENT_GAME_ELEMENT, body_elem, Score_2, refresh_elm});

PageElement NEW_GAME_ELEMENT(htmlPage3);
PageBuilder NEW_GAME("/new-game", {NEW_GAME_ELEMENT});

void setup() {
  Serial.begin(115200);
  pinMode(2, INPUT);
  WiFi.softAP("ssid", "pass");
  delay(100);       
  CURRENT_GAME.insert(Server);     
  NEW_GAME.insert(Server);        
  Server.begin();
}

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


Html page:

const char htmlPage3[] PROGMEM = R"=====(

<form id="what-team">
            <div class="form-row">

            <div class="col" style="float: left; padding-left: 5%;">
            <label class="mr-sm-2 sr-only" for="inlineFormCustomSelect">Preference</label>
            <select name="team1-playing-as" form="what-team" class="custom-select mr-sm-2" id="inlineFormCustomSelect" style="width:700px;height:50px;">
            <option selected="">Choose Team</option>                    
            <option value="manchester-united">Manchester United</option>
            <option value="liverpool">Liverpool</option>
            <option value="fc-barcelona">FC-Barcelona</option>
            </select>
            <div class="form-group">
            <input type="Name" class="form-control" name="player1" value="" placeholder=" Player 1" style="width:700px;height:50px;">
            <input type="Name" class="form-control" name="player2" value="" placeholder=" Player 2" style="width:700px;height:50px;">
            </div>
            </div>

            <div class="col" style="float: right; padding-left: 5%;">
            <label class="mr-sm-2 sr-only" for="inlineFormCustomSelect">Preference</label> 
            <select name="team2-playing-as" form="what-team" class="custom-select mr-sm-2" id="inlineFormCustomSelect" style="width:700px;height:50px;">
            <option selected="">Choose Team</option>
            <option value="manchester-united">Manchester United</option>
            <option value="liverpool">Liverpool</option>
            <option value="fc-barcelona">FC-Barcelona</option>
            </select>
            <div class="form-group">
            <input type="Name" class="form-control" name="player1" value="" placeholder=" Player 1" style="width:700px;height:50px; text-align: right;">
            <input type="text" class="form-control" name="player2" value="" placeholder=" Player 2" style="width:700px;height:50px; text-align: right;">
            </div>
            </div>
            </div>

           <div style="padding-top: 50px; padding-left: 10%; padding-right: 10%; float: center;">
           <input type="submit" value="Start" class="btn btn-primary btn-lg btn-block">
           </div>

           </form>

)=====";

這是我填寫表單並按提交按鈕時獲得的URL。 "192.168.0.1/new-game?team1-playing-as=manchester-united&player1=John&player2=Doe&team2-playing-as=liverpool&player1=Doe&player2=John "

簡而言之,我想將^ href轉換為字符串

編輯/更新:

我找到了一些方法,但是第一個只返回與之比較的href,具有與server.hasarg()相同的功能,后者僅返回元素的href,基本上,都只返回/ new-game?。 不幸的是,我想要/ new-game之后會怎樣?

bool func(HTTPMethod method, String uri) {
  if (uri == "/new-game") {
  Serial.println(uri);
  return true;
  } else {
    Serial.println(uri);
    return false;
  }
}
const char* data = NEW_GAME.uri()

這是我從表格中檢索數據的方法:


int h = 1;
void handleForm() {

  String team1Team = Server.arg("team1-playing-as");
  String team1P1   = Server.arg("player1");
  String team1P2   = Server.arg("player2");
  String team2Team = Server.arg("team2-playing-as");
  String team2P3   = Server.arg("player3");
  String team2P4   = Server.arg("player4");

    if ((Server.args() == 6) && ( h == 1)) {
    Serial.println("Team 1: " + team1Team);
    Serial.println("Player 1: " + team1P1);
    Serial.println("player 2: " + team1P2);
    Serial.println("Team 2: " + team2Team);
    Serial.println("Player 3: " + team2P3);
    Serial.println("Player 4: " + team2P4);
    delay(1000);
    h = 0;
    //-------------------this is where I want to redirect from /new-game to /current-game
    }
    if ((Server.args() == 0) && ( h == 0)) {
      h = 1;
    }
}

我通過這樣做來重定向網站: const char rDIR[] = "<meta http-equiv=\\"Refresh\\" content=\\"0; url={{rDir}}\\">"; const char rDIR[] = "<meta http-equiv=\\"Refresh\\" content=\\"0; url={{rDir}}\\">"; 然后在{{rDIR}}/current-game替換{{rDIR}}if ((Server.args() == 6) && ( h == 1))

但是,來自表單輸入的數據我正確地保存在字符串中,當我嘗試使用相同的方法(應該起作用)時,該字符串為空..這真的很奇怪,因為它僅使用這樣定義的字符串: String team1P1 = Server.arg("player1"); 不會將其值返回給令牌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM