Получение строкового ввода с веб-страницы NodeMCU и его печать на последовательном мониторе
Недавно я начал работать с NodeMCU. Я очень мало знаю об этом устройстве и о том, как работает веб-сайт. Я пытаюсь получить длинную строку с веб-сайта, размещенного на NodeMCU, сохранить ее в переменной, а затем распечатать на последовательном мониторе NodeMCU.
У меня есть следующая программа. Здесь я только создал текстовое поле для ввода. Но я не знаю, как поместить эти входные данные в переменную и использовать их позже для последовательной печати.
#include <ESP8266WiFi.h>
const char* ssid = "****";
const char* password = "*************";
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
server.begin();
}
void loop() {
WiFiClient client = server.available();
if (!client) {
return;
}
Serial.println("new client");
while(!client.available()){
delay(1);
}
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<label for='name'>Serial Printer (Put Text here: ): </label>");
client.println("<br><br>");
client.println("<input type='text' id='name' name='name' required minlength='0' maxlength='800' size='100'>");
client.println("</html>");
delay(1);
Serial.println("Client disonnected");
Serial.println("");
}
@opu 웃, 👍0
Обсуждение1 ответ
Лучший ответ:
Попробуйте это. Он использует библиотеку веб-сервера. Я думал, что это более чистый код. У меня также есть более удобный способ включить чистый HTML-код.
Исходную форму можно найти по адресу yourIPaddress/single
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
const char* ssid = "MTS61752";
const char* password = "6900979039";
ESP8266WebServer webserver(80);
//------------------------------------------------
static const char PROGMEM singleLine[] = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
<title>Single Line Input</title>
</head>
<body>
<form method="post" action="/save" >
<label for='name'>Serial Printer (Put Text here: ): </label>
<br><br>
<input type='text' id='name' name='name' required minlength='0' maxlength='800' size='100'>
<input type="submit" name="clk_action" value="accept">
</form>
</body>
</html>
)rawliteral";
//------------------------------------------------
static const char PROGMEM INDEX_HTML[] = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
<title>Clock Settings</title>
</head>
<body>
<form method="post" action="/save" >
Turn on time:<br><input name="onTime" type="text" size="16" value="" ><br><br>
Turn off time:<br><input name="offTime" type="text" size="16" value="" ><br><br>
<input type="submit" name="clk_action" value="accept">
</form>
</body>
</html>
)rawliteral";
//------------------------------------------------
void handleRoot() {
webserver.send(200, "text/html", INDEX_HTML);
}
//------------------------------------------------
void handleNotFound() {
webserver.send(404, "text/plain", "Page not found ...");
}
//------------------------------------------------
void handleSave() {
String str = "Settings Saved ...\r\n";
Serial.print("number of arguments ");
Serial.println(webserver.args()); // количество аргументов
if (webserver.args() > 0 ) {
for ( uint8_t i = 0; i < webserver.args(); i++ ) {
str += webserver.argName(i) + " = " + webserver.arg(i) + "\r\n";
Serial.println("Arg "+ String(i)+"="+ webserver.argName(i));
Serial.println("Arg "+ String(i)+"="+ webserver.arg(i));
}
}
webserver.send(200, "text/plain", str.c_str());
}
//------------------------------------------------
void handleSingleLine() {
webserver.send(200, "text/html", singleLine);
}
//------------------------------------------------
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println("");
// Ожидаем соединения
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
webserver.on("/", handleRoot);
webserver.on("/save", handleSave);
webserver.onNotFound(handleNotFound);
webserver.on("/single", handleSingleLine);
webserver.begin();
Serial.println("Web server has started");
}
//------------------------------------------------
void loop() {
webserver.handleClient();
}
[pedant]Теги нужно правильно закрывать.[/pedant], @Majenko
Вы можете быть более конкретным. Я не вижу ничего, чего не хватало бы закрывающих тегов., @Rudy
Входы и теги BR., @Majenko
<input .... />
и <br/>
, @Majenko
<input> </input> https://stackoverflow.com/a/13232170/6544572 --- Это пустые элементы. Это означает, что они не предназначены для содержания текста или других элементов и поэтому не требуют (и фактически не могут иметь) закрывающего тега в HTML. ----- Я немного поискал и обнаружил, что XHTML использует </input>, но я нашел документацию, описывающую его использование в HTML. (обратите внимание, мои знания HTML ограничены) На </br> http://w3c.github.io/html-reference/br.html#br, @Rudy
Я всегда работаю в XHTML. HTML – это девяностые. Я придерживаюсь мнения, что XHTML — это разновидность XML, поэтому к нему следует относиться соответственно. Упрощает переключение с одного на другой: к обоим применяется один и тот же набор правил, поскольку они оба являются просто XML., @Majenko
- WebSocketsServer.h: No such file or directory
- Как определить размер Flash?
- Несколько клиентских серверов через Wi-Fi
- В ESP-12E NodeMCU, какой выход PIN A0?
- ESP32 в Arduino-IDE с FS.h и SPIFFS
- Преобразование byte* в int в Arduino
- Каково использование зарезервированных контактов и контактов SDD2, SDD3 NodeMCU?
- Было найдено несколько библиотек для «WiFiClient.h» с помощью nodemcu.
Сначала вам нужно узнать о HTML-формах. Вам нужно больше, чем просто входной тег., @Majenko
используйте ESP8266WebServer и посмотрите пример SimpleAuthentification, @Juraj