С пятницей! В общем, захотел прикрутить какую-то веб-морду для сохранения и изменения некоторых значений. Нашел пример индийского погромиста и немного изменил его. (не нашел другого понятного скрипта, который не лезет в сеть (куча примеров, но всем же нужно заходить в веб-морду через интернет... ), а молча создает точку доступа и страницу, на которой можно что-то делать) И вот как бы работает, но если усложнять, виснет. (Данный скрипт работает) И при отправке по submit почему-то на секунду в броузере мелькает "страница недоступна". Подобный скетч (о, вспомнил слово) имеет право на существование, или индийский подход неверен в корне? Код (C++): #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> const char *ssid = "WeatherBox"; ESP8266WebServer server(80); const String HTTP_HEAD = "<!DOCTYPE html><html lang=\"en\"><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\"/><title>Test</title>"; const String HTTP_STYLE = "<style>.c{text-align: center;} div,input{padding:5px;font-size:1em;} input{width:90%;} body{text-align: center;font-family:verdana;} button{border:0;border-radius:0.6rem;background-color:#1fb3ec;color:#fdd;line-height:2.4rem;font-size:1.2rem;width:100%;} .q{float: right;width: 64px;text-align: right;} .button2 {background-color: #008CBA;} .button3 {background-color: #f44336;} .button4 {background-color: #e7e7e7; color: black;} .button5 {background-color: #555555;} .button6 {background-color: #4CAF50;} </style>"; //const String HTTP_SCRIPT = "<script>function c(l){document.getElementById('s').value=l.innerText||l.textContent;document.getElementById('p').focus();}</script>"; const String HTTP_HEAD_END = "</head><body><div style='text-align:left;display:inline-block;min-width:260px;'>"; const String HOMEPAGE = "<form method=\"get\"><input type=\"text\" name=\"test\"/><br /><input type=\"submit\" /></form><br /> "; /* Just a little test message. Go to http://192.168.4.1 in a web browser * connected to this access point to see it. */ void handleRoot() { String s =HTTP_HEAD; s += HTTP_STYLE; //s += HTTP_SCRIPT; s += HTTP_HEAD_END; s += "<H3>Settings</H3>"; s+=HOMEPAGE; if (server.arg("test")== "2"){ s += "<H4>Two</H4>"; } else { s += "<H4>Not two</H4>"; } server.send(200, "text/html", s); } void setup() { delay(1000); Serial.begin(115200); Serial.println(); Serial.print("Configuring access point..."); //WiFi.softAP(ssid, password); WiFi.softAP(ssid); IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(myIP); server.on("/", handleRoot); server.begin(); Serial.println("HTTP server started"); } void loop() { server.handleClient(); }
В смысле, server.handleClient();? Ну во всех к примерах к библиотеке это его обычное применение. Для какого-то особого колдунства иногда ставят delay(1); Но это не сильно помогает.
Так в примерах никогда не заморачиваются на эту тему: на то он и пример, чтобы показать чего и как... delay(1); - это тоже для примеров, правильно делать таймер-счетчик с флагом и по нему опрашивать, чтобы цикл не тормозить!