Я пытаюсь запрограммировать мой NodeMCU (ESP8266) в Arduino IDE.Мне нужно получить данные из формы HTML и сохранить их в EEPROM.Проблема возникает, когда я пытаюсь получить доступ к аргументам POST или GET.Первые 2 аргумента я могу получить просто отлично.Но когда я пытаюсь что-то преодолеть, мой 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()
, сервер тоже выключается.