Вопрос Как передать параметр в ESP

MihaNN52

Member
Друзья, подскажите как проще и лучше отправить данные в ESP из сети WIFI.
Необходимо получать данные для записи в переменную.
Переменная -значение от 1 до 1000
http://[ip]/значение
ESP это число записывает в переменную.
 

Юрий Ботов

Moderator
Команда форума
Это единственная функция которую должно выполнять устройство и ли а нем должны работать еще какие-то сервера/клиенты?
 

VicSpectator

New member
я остальное не напишу в lua....
А обрабатывать GET-запросы умеете? А POST-запросы?
Не думаю, что именно "/значение" реализуемо. Но можно завести другие "странички", и обрабатывать запросы так, как надо.
В используемом мной AsyncWebServer есть запись
Код:
server.on("/ADDRESS", HTTP_GET, [](AsyncWebServerRequest *request){...})
где вместо многоточия можно вписать нужную операцию, например
Код:
request->hasParam("download")
Я сам ещё только учусь :) Но считаю, что надо копать именно в этом направлении.
 

NeoroN

Member
да http://[ip]/значение или http://[ip]/page?var=значение не имеет принципиальных различий. Вопрос в том как обработка вебзапрососв будет сочетаться с остальным кодом. Автор приводит лишь часть задачи, другую скрывая по неким соображениям. Даже не упомянул среду разработки - получил кучу обстракных примеров. И ответ на вопрос - "если очень нужно то все можно" и знающим написать нет никаких трудностей.
 

MihaNN52

Member
Мне надо лишь получить вот этот параметр из вне чтоб с ним работать.
В задачу лучше не вникать т.к она еще точно не определена, в любом случае задачи разделил и вот с этой пока непонятно. Можно былоб использовать mqtt, но это усложнит отправку т.к отправлять будет 1С.
Смотрю в сторону WebServer с HTTP запросами. Тема интересная и требует изучения.
 

view24

Member
Постановка задачи не совсем корректна. На одном конце ESP, а что на другом конце? Известно только, что между ними WIFI. Проясните про объект на другом конце.
 

Zarif

New member
Такая же задача. Присвоить данные переменной в ESP server. Пока пользуюсь вот так.

server.on("/qwerty", [](){
x6 = 333;
server.send(200, "text/html", webPage()); //
delay(100);
});
А хотелось бы отправлять значения и присваивать их к переменной а потом их обрабатывать . Например отправлять с андроида любые данные например вида 1234567890 и присвоить их переменной в сервере esp. Помогите пожалуйста.
 

Zarif

New member
а нельзя в таком виде это реализовать ?

server.on("/qwerty", [](){
x6 = 333;
server.send(200, "text/html", webPage()); //
delay(100);
});


server.on("/HkIyFrTgSwAzCdGm", [](){
x6 = 111;
server.send(200, "text/html", webPage()); //polis light on
delay(100);
});

server.on и дальше переменная и присваивание к ней. Я пока новичок и поэтому прошу понимания. Спасибо.
 

NeoroN

Member
Думаю как то так.
Код:
server.on("/qwerty", HTTP_GET, [](){
if (!server.hasArg("dir")) {
    return server.send(500, "text/plain", "No dir\r\n");
  }
  String dir = server.arg("dir");
return server.send(200, "text/html", webPage(dir)); //
});
http://myhost/qwerty?dir=blablabla
Уж типы String в int конвертировать вы сможете без посторонней помощи?
С нашими новичками не перестаю узнавать что-то новое
esp8266/Arduino
 

PMA

New member
Думаю как то так.
Код:
server.on("/qwerty", HTTP_GET, [](){
if (!server.hasArg("dir")) {
    return server.send(500, "text/plain", "No dir\r\n");
  }
  String dir = server.arg("dir");
return server.send(200, "text/html", webPage(dir)); //
});
http://myhost/qwerty?dir=blablabla
Уж типы String в int конвертировать вы сможете без посторонней помощи?
С нашими новичками не перестаю узнавать что-то новое
esp8266/Arduino
подниму тему. пример не работает для есп32
 

Сергей_Ф

Moderator
Команда форума
@PMA это смотря к чему вы пример прикладываете. Не работать он не может, если все сделано правильно.
 

Spindle

New member
Разрешите вопрос в догонку, поиск ответа мне не дал.
Вот такой простенький код HTML странички

Код:
webPage = "" ;

    webPage += "<h1>Sensor options</h1> <body><p>Server IP xxx.xxx.xxx.xxx , now is: " + host + "</p> <p><FORM>              <input type=\"text\" name=\"ip\"></p></form>" ;
    webPage += "<p>Sensor Name, now is: " + ssName + "</p>                                              <p><FORM><input type=\"text\" name=\"SN\"></p></body></form>";
    webPage += "<p>SSID now is: " + SSIDwifiS + "</p>                                                  <p><FORM><input type=\"text\" name=\"SSID\"></p></body></form>";
    webPage += "<p>wifi password now is: " + passwdS + "</p>                                          <p><FORM><input type=\"text\" name=\"passwd\"></p></form>";   
    webPage +=  "<body><p style=\"align: left\"><a href=\"/ok\"><button onclick=\"handleRootOK();\">Accept parametrs</button></a></p></body>" ;
кнопка Accept parametrs вызывает следующий простой тестовый метод:
Код:
void handleRootOK() {
    Serial.println("Ok");
    String ip = server.arg("ip");
    Serial.print("ip Received = ");
    Serial.println (ip);
    String sn = server.arg("SN");
    Serial.print("SN Received = ");
    Serial.println (sn);
    String ssid = server.arg("SSID");
    Serial.print("SSID Received = ");
    Serial.println (ssid);   
    String pss = server.arg("passwd");
    Serial.print("passwd Received = ");
    Serial.println (pss);   
    server.send(200, "text/html", webPage);
}
Но по нажатию со станички читается только последнее заполненное текстовое поле , например
1.jpg

То в мониторе порта по нажатию кнопки я вижу следующее ( то есть ничего)
2.jpg

Прошу помощи уважаемые.
 

Юрий Ботов

Moderator
Команда форума
Ну во первых уберите второй открывающий BODY, а во вторых не городите столько FORM. Сделайте 1 FORM а внутрь него поместите лэйблы, поля и кнопку.
 

Spindle

New member
Ответ уже нашёлся =)
Код:
void wp() {
    //фишка в том что все запрашиваемые данные должны находиться внитри одной <form>
    //допилить внешний вид
    eepromRead();
    webPage = "" ;
    webPage += "<!DOCTYPE html><html><body><form action=\"/ok\"" ;
    webPage += "Server IP xxx.xxx.xxx.xxx , now is: " + host + "<br>" ;
    webPage += "<input type = \"text\" name =\"ip\" ";
    webPage += "Sensor Name, now is: " + ssName + "<br>" ;
    webPage += "<input type = \"text\" name =\"SN\" ";
    webPage +=     "SSID now is: " + SSIDwifiS + "<br>" ;
    webPage += "<input type = \"text\" name =\"SSID\" ";
    webPage += "wifi password now is: " + passwdS + "<br>" ;
    webPage += "<input type = \"text\" name =\"passwd\"<br>" ;
    webPage += "<input type = \"submit\" value = \"Accept parametrs\">" ;
    webPage += "</form></body></html>" ;
}
отсюда:
 
Сверху Снизу