• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос Как передать параметр в 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>" ;
}
отсюда:
 
Сверху Снизу