我正在尝试在Arduino IDE中对NodeMCU(ESP8266)进行编程。我需要从HTML表单获取数据并将其保存到EEPROM。当我尝试访问POST或GET参数时,会出现问题。前两个参数我可以很好地解决。但是当我试图超越这些东西时,我的ESP就会死掉而没有任何调试信息。
我尝试使用不同的请求方法,更改HTML表单,Content-Type和HTML标头。什么都没用。
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>
String html_header = "<html>\
<meta http-equiv=\"Content-Type\" content=\"application/x-www-form-urlencoded; charset=utf-8\">\
<head>\
<title>ESP8266 Settings</title>\
<style>\
body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
</style>\
</head>";
ESP8266WebServer server(80);
...
void setup(void)
{
...
server.on("/", handleRoot);
server.on("/ok", HTTP_POST, handleOk);
server.begin();
Serial.println("HTTP server started");
}
void handleRoot() {
String str = "";
str += html_header;
str += "<body>\
<form method=\"POST\" action=\"ok\">\
<input name=\"ssid\"> WIFI Net<br>\
<input name=\"pswd\"> Password<br>\
<input name=\"ip0\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
<input name=\"ip1\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
<input name=\"ip2\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
<input name=\"ip3\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" /> Static AP<br />\
<input name=\"gate0\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
<input name=\"gate1\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
<input name=\"gate2\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
<input name=\"gate3\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" /> Gateway<br />\
<input name=\"mask0\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
<input name=\"mask1\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
<input name=\"mask2\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
<input name=\"mask3\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" /> IP MASK<br /><br />\
<input type=\"SUBMIT\" value=\"Save settings\" />\
</form>\
</body>\
</html>";
server.send ( 200, "text/html", str );
}
void handleOk() {
String ssid_ap;
String pass_ap;
String str = "";
str += html_header;
str += "<body>";
EEPROM.begin(111);
ssid_ap = server.arg("ssid");
pass_ap = server.arg("pswd");
Serial.println(ssid_ap);
Serial.println(pass_ap);
/*
Serial.println(server.arg("ip0"));
Serial.println(server.arg("ip1"));
Serial.println(server.arg("ip2"));
Serial.println(server.arg("ip3")); <======== Anything below this arg
Serial.println(server.arg("gate0")); <====== kills server
Serial.println(server.arg("gate1"));
Serial.println(server.arg("gate2"));
Serial.println(server.arg("gate3"));
Serial.println(server.arg("mask0"));
Serial.println(server.arg("mask1"));
Serial.println(server.arg("mask2"));
Serial.println(server.arg("mask3"));
*/
...
}
当我将某些东西输出到控制台(在这种情况下是串行端口)时,我希望什么也没看到。但这会关闭整个服务器。我猜我的HTML表单有问题,因此服务器无法正确解析它。或带库本身(ESP8266WebServer)。因为当我尝试获取参数数量时,请求已使用server.args()
,服务器也关闭了。