В чем ошибка веб сервера esp32 (ArduinoIDE)?

Ссылка скопирована
1 ответ

Делаю проект на esp32, уже несколько дней не могу понять, в чем ошибка. Сам сайт (наработка) рабочая, но при выполнении одной функции, которую взял из другого проекта (его отдельно проверял и дополнял, все работает). При загрузке выдает пустую страницу, при проверке запроса /slider показывает что данные передаются, но в отладке приложения пишет что пустое сообщение.
Код моего проекта

#include <Arduino.h> #include <WiFi.h> #include <AsyncTCP.h> #include <ESPAsyncWebServer.h> #include <iostream> #include <sstream>  using namespace std;  String slider_value="0"; const char* input_parameter = "value";  IPAddress localno(192,168,4,50); IPAddress gateway(192,168,4,9); IPAddress subnet(255,255,255,0);  /* //точка доступа const char* ssid     = "RobotArm"; const char* password = "12345789"; */  //роутер_сервер const char* ssid     = "Keenetic-4430"; const char* password = "JKMEZfXS";  /* //от телефона const char* ssid     = "@echo off"; const char* password = "12367890"; */  AsyncWebServer server(80);  const char* htmlHomePage PROGMEM = R"HTMLHOMEPAGE( <!DOCTYPE html> <html>   <head>   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">    <title> Управление роботом </title>   <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">     <style>      input[type=button]     {       background-color:red;color:white;border-radius:10px;width:65%;height:75px;font-size:30px;text-align:center;     }      .slidecontainer {       width: 100%;     }      .slider {       -webkit-appearance: none;       width: 100%;       height: 15px;       border-radius: 6px;       background: #d3d3d3;       outline: none;       opacity: 1;       -webkit-transition: 0.2s;       transition: opacity 0.2s;     }      .slider:hover {       opacity: 1;     }        .slider::-webkit-slider-thumb {       -webkit-appearance: none;       appearance: none;       width: 30px;       height: 30px;       border-radius: 30%;       background: gray;       cursor: pointer;     }      .slider::-moz-range-thumb {       width: 40px;       height: 40px;       border-radius: 50%;       background: red;       cursor: pointer;     }      </style>      </head>   <body class="noselect" align="center" style="background-color:424187">           <h1 style="color: 44bda1 ;text-align:center;font-size:45px;"Сварочный робот манипулятор</h1>     <h2 style="color: 33917b ;text-align:center;font-size:35px;">Панель управления роботом</h2>          <table id="mainTable" style="width:400px;margin:auto;table-layout:fixed" CELLSPACING=10>       <tr>         <td style="color: 008c7c ;text-align:left;font-size:30px"><b>Base:</b></td>         <td colspan=2>          <div class="slidecontainer">             <input type="range" min="0" max="180" value="%SLIDERVALUE%" class="slider" id="Osnovanie" onchange="updateSlider(this)">           </div>         </td>       </tr>        <tr></tr>       <tr>         <td style="color: 008c7c ;text-align:left;font-size:30px"><b>1 звено:</b></td>         <td colspan=2>          <div class="slidecontainer">             <input type="range" min="0" max="180" value="90" class="slider" id="zv_1">           </div>         </td>       </tr>        <tr/><tr/>             <tr>         <td style="color: 008c7c ;text-align:left;font-size:30px"><b>2 звено:</b></td>         <td colspan=2>          <div class="slidecontainer">             <input type="range" min="0" max="180" value="90" class="slider" id="zv_2">           </div>         </td>       </tr>         <tr/><tr/>             <tr>       </table>  <form action="handler.php">    <p style="color: 008c7c; font-size: 20px;">Координаты оси X (от * до *):</p>    <p><input type="number" id="Xcoord" size="3" name="num" min="-100" max="100" value="0"></p>   </form>  <button id="coordin" style= "background-color:red;color:white;border-radius:15px;width:400px;height:75px;font-size: 30px;text-align:center;">Применить выбранные координаты </button> <p style="color: 008c7c; font-size: 25px;text-align:center;">Сварка!:</p> <input type="button" id="svar_butt" value="!!!" onclick="Svarka()> <p id="test" style="color: 008c7c; font-size: 25px;text-align:center;">0!</p> <p><span id="textslider_value">%SLIDERVALUE%</span></p>  <script> var svar_butt = document.getElementById("svar_butt"); var coordin = document.getElementById("coordin"); var ServoSlider1 = document.getElementById("Osnovanie").value; var Xcoord = document.getElementById("Xcoord"); var Ycoord = document.getElementById("Ycoord"); var Zcoord = document.getElementById("Zcoord"); var text = document.getElementById("test");  function updateSlider(element){   var slider_value = document.getElementById("Osnovanie").value;   document.getElementById("textslider_value").innerHTML = slider_value;   Ycoord.value=slider.value;   console.log(slider_value);   var xhr = new XMLHttpRequest();   xhr.open("GET", "/slider?value="+slider_value, true);   xhr.send(); } </script> </body>     </html> )HTMLHOMEPAGE";  String processor(const String& var){   if(var == "SLIDERVALUE"){      return slider_value;   }   return String(); }  void server_start(AsyncWebServerRequest *request)  {   request->send_P(200, "text/html", htmlHomePage, processor); }  void Sliders(AsyncWebServerRequest *request){   String message;   if (request->hasParam(input_parameter)){     message= request->getParam(input_parameter)->value();     slider_value=message;   }else{     message = "No message sent";   }   Serial.println(message);   request->send(200, "text/plain", "OK"); }  void setup(void)  {   Serial.begin(115200);    /* //точка доступа   WiFi.mode(WIFI_AP);   WiFi.softAP(ssid, password);   delay(100);   //WiFi.softAPConfig(localno, gateway, subnet);   IPAddress IP = WiFi.softAPIP();   Serial.print("AP IP address: ");   Serial.println(IP);   Serial.println(" "); */  //для сервера по wifi   delay(100);   WiFi.softAPConfig(localno, gateway, subnet);   WiFi.begin(ssid, password);   while (WiFi.status()!=WL_CONNECTED){     delay(1000);     Serial.println("Connecting to WiFi...");   }   Serial.println(WiFi.localIP());     server.on("/", HTTP_GET, server_start);   server.on("/slider", HTTP_GET, Sliders);    server.begin();   Serial.println("HTTP server started");  }  void loop() {}

#include <Arduino.h> #include <WiFi.h> #include <AsyncTCP.h> #include <ESPAsyncWebServer.h> #include <iostream> #include <sstream> using namespace std; String slider_value="0"; const char* input_parameter = "value"; IPAddress localno(192,168,4,50); IPAddress gateway(192,168,4,9); IPAddress subnet(255,255,255,0); /* //точка доступа const char* ssid = "RobotArm"; const char* password = "12345789"; */ //роутер_сервер const char* ssid = "Keenetic-4430"; const char* password = "JKMEZfXS"; /* //от телефона const char* ssid = "@echo off"; const char* password = "12367890"; */ AsyncWebServer server(80); const char* htmlHomePage PROGMEM = R"HTMLHOMEPAGE( <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title> Управление роботом </title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <style> input[type=button] { background-color:red;color:white;border-radius:10px;width:65%;height:75px;font-size:30px;text-align:center; } .slidecontainer { width: 100%; } .slider { -webkit-appearance: none; width: 100%; height: 15px; border-radius: 6px; background: #d3d3d3; outline: none; opacity: 1; -webkit-transition: 0.2s; transition: opacity 0.2s; } .slider:hover { opacity: 1; } .slider::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 30px; height: 30px; border-radius: 30%; background: gray; cursor: pointer; } .slider::-moz-range-thumb { width: 40px; height: 40px; border-radius: 50%; background: red; cursor: pointer; } </style> </head> <body class="noselect" align="center" style="background-color:424187"> <h1 style="color: 44bda1 ;text-align:center;font-size:45px;"Сварочный робот манипулятор</h1> <h2 style="color: 33917b ;text-align:center;font-size:35px;">Панель управления роботом</h2> <table id="mainTable" style="width:400px;margin:auto;table-layout:fixed" CELLSPACING=10> <tr> <td style="color: 008c7c ;text-align:left;font-size:30px"><b>Base:</b></td> <td colspan=2> <div class="slidecontainer"> <input type="range" min="0" max="180" value="%SLIDERVALUE%" class="slider" id="Osnovanie" onchange="updateSlider(this)"> </div> </td> </tr> <tr></tr> <tr> <td style="color: 008c7c ;text-align:left;font-size:30px"><b>1 звено:</b></td> <td colspan=2> <div class="slidecontainer"> <input type="range" min="0" max="180" value="90" class="slider" id="zv_1"> </div> </td> </tr> <tr/><tr/> <tr> <td style="color: 008c7c ;text-align:left;font-size:30px"><b>2 звено:</b></td> <td colspan=2> <div class="slidecontainer"> <input type="range" min="0" max="180" value="90" class="slider" id="zv_2"> </div> </td> </tr> <tr/><tr/> <tr> </table> <form action="handler.php"> <p style="color: 008c7c; font-size: 20px;">Координаты оси X (от * до *):</p> <p><input type="number" id="Xcoord" size="3" name="num" min="-100" max="100" value="0"></p> </form> <button id="coordin" style= "background-color:red;color:white;border-radius:15px;width:400px;height:75px;font-size: 30px;text-align:center;">Применить выбранные координаты </button> <p style="color: 008c7c; font-size: 25px;text-align:center;">Сварка!:</p> <input type="button" id="svar_butt" value="!!!" onclick="Svarka()> <p id="test" style="color: 008c7c; font-size: 25px;text-align:center;">0!</p> <p><span id="textslider_value">%SLIDERVALUE%</span></p> <script> var svar_butt = document.getElementById("svar_butt"); var coordin = document.getElementById("coordin"); var ServoSlider1 = document.getElementById("Osnovanie").value; var Xcoord = document.getElementById("Xcoord"); var Ycoord = document.getElementById("Ycoord"); var Zcoord = document.getElementById("Zcoord"); var text = document.getElementById("test"); function updateSlider(element){ var slider_value = document.getElementById("Osnovanie").value; document.getElementById("textslider_value").innerHTML = slider_value; Ycoord.value=slider.value; console.log(slider_value); var xhr = new XMLHttpRequest(); xhr.open("GET", "/slider?value="+slider_value, true); xhr.send(); } </script> </body> </html> )HTMLHOMEPAGE"; String processor(const String& var){ if(var == "SLIDERVALUE"){ return slider_value; } return String(); } void server_start(AsyncWebServerRequest *request) { request->send_P(200, "text/html", htmlHomePage, processor); } void Sliders(AsyncWebServerRequest *request){ String message; if (request->hasParam(input_parameter)){ message= request->getParam(input_parameter)->value(); slider_value=message; }else{ message = "No message sent"; } Serial.println(message); request->send(200, "text/plain", "OK"); } void setup(void) { Serial.begin(115200); /* //точка доступа WiFi.mode(WIFI_AP); WiFi.softAP(ssid, password); delay(100); //WiFi.softAPConfig(localno, gateway, subnet); IPAddress IP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(IP); Serial.println(" "); */ //для сервера по wifi delay(100); WiFi.softAPConfig(localno, gateway, subnet); WiFi.begin(ssid, password); while (WiFi.status()!=WL_CONNECTED){ delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println(WiFi.localIP()); server.on("/", HTTP_GET, server_start); server.on("/slider", HTTP_GET, Sliders); server.begin(); Serial.println("HTTP server started"); } void loop() {}

Если убрать данный метод, то все работает, но без передачи данных. Думал что проблема в том, что в примере берется массив данных и передается (у меня через функцию), но особой разницы не должно быть...

void server_start(AsyncWebServerRequest *request)  {   request->send_P(200, "text/html", htmlHomePage)//, processor); }

void server_start(AsyncWebServerRequest *request) { request->send_P(200, "text/html", htmlHomePage)//, processor); }

Код, который брал для примера (рабочий)

#include <WiFi.h> #include <AsyncTCP.h> #include <ESPAsyncWebServer.h>  const char* ssid     = "Keenetic-4430"; const char* password = "JKMEZfXS";  IPAddress localno(192,168,4,50); IPAddress gateway(192,168,4,9); IPAddress subnet(255,255,255,0);  const int led_pin = 14; String slider_value = "0";  const int frequency = 5000; const int led_channel = 0; const int resolution = 8;  const char* input_parameter = "value";  AsyncWebServer server(80);  const char index_html[] PROGMEM = R"rawliteral( <!DOCTYPE HTML><html> <head>   <meta name="viewport" content="width=device-width, initial-scale=1">   <title>ESP32 Brightness Control Web Server</title>   <style>     html {font-family: Times New Roman; display: inline-block; text-align: center;}     h2 {font-size: 2.3rem;}     p {font-size: 1.9rem;}     body {max-width: 400px; margin:0px auto; padding-bottom: 25px;}     .slider { -webkit-appearance: none; margin: 14px; width: 360px; height: 25px; background: #38c0ff  ;       outline: none; -webkit-transition: .2s; transition: opacity .2s;}     .slider::-webkit-slider-thumb {-webkit-appearance: none; appearance: none; width: 35px; height: 35px; background:#01070a; cursor: pointer;}     .slider::-moz-range-thumb { width: 35px; height: 35px; background: #01070a; cursor: pointer; }    </style> </head> <body>   <form action="handler.php">    <p style="color: 008c7c; font-size: 20px;">Координаты оси X (от * до *):</p>    <p><input type="number" id="Xcoord" size="3" name="num" min="-100" max="100" value="%SLIDERVALUE%"></p>   </form>   <h2>ESP32 Brightness Control Web Server</h2>   <p><span id="textslider_value">%SLIDERVALUE%</span></p>   <p><input type="range" onchange="updateSliderPWM(this)" id="pwmSlider" min="0" max="255" value="%SLIDERVALUE%" step="1" class="slider"></p> <script> function updateSliderPWM(element) {   var slider_value = document.getElementById("pwmSlider").value;   document.getElementById("textslider_value").innerHTML = slider_value;   document.getElementById("Xcoord").value = slider_value;   console.log(slider_value);   var xhr = new XMLHttpRequest();   xhr.open("GET", "/slider?value="+slider_value, true);   xhr.send(); } </script> </body> </html> )rawliteral";  String processor(const String& var){   if (var == "SLIDERVALUE"){     return slider_value;   }   return String(); }  void setup(){   Serial.begin(115200);    //WiFi.softAPConfig(localno, gateway, subnet);   delay(100);   WiFi.begin(ssid, password);   while (WiFi.status() != WL_CONNECTED) {     delay(1000);     Serial.println("Connecting...");   }    Serial.println(WiFi.localIP());    server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){     request->send_P(200, "text/html", index_html, processor);   });    server.on("/slider", HTTP_GET, [] (AsyncWebServerRequest *request) {     String message;     if (request->hasParam(input_parameter)) {       message = request->getParam(input_parameter)->value();       slider_value = message;       //ledcWrite(led_channel, slider_value.toInt());     }     else {       message = "No message sent";     }     Serial.println(message);     request->send(200, "text/plain", "OK");   });      server.begin(); }    void loop() {    }

#include <WiFi.h> #include <AsyncTCP.h> #include <ESPAsyncWebServer.h> const char* ssid = "Keenetic-4430"; const char* password = "JKMEZfXS"; IPAddress localno(192,168,4,50); IPAddress gateway(192,168,4,9); IPAddress subnet(255,255,255,0); const int led_pin = 14; String slider_value = "0"; const int frequency = 5000; const int led_channel = 0; const int resolution = 8; const char* input_parameter = "value"; AsyncWebServer server(80); const char index_html[] PROGMEM = R"rawliteral( <!DOCTYPE HTML><html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>ESP32 Brightness Control Web Server</title> <style> html {font-family: Times New Roman; display: inline-block; text-align: center;} h2 {font-size: 2.3rem;} p {font-size: 1.9rem;} body {max-width: 400px; margin:0px auto; padding-bottom: 25px;} .slider { -webkit-appearance: none; margin: 14px; width: 360px; height: 25px; background: #38c0ff ; outline: none; -webkit-transition: .2s; transition: opacity .2s;} .slider::-webkit-slider-thumb {-webkit-appearance: none; appearance: none; width: 35px; height: 35px; background:#01070a; cursor: pointer;} .slider::-moz-range-thumb { width: 35px; height: 35px; background: #01070a; cursor: pointer; } </style> </head> <body> <form action="handler.php"> <p style="color: 008c7c; font-size: 20px;">Координаты оси X (от * до *):</p> <p><input type="number" id="Xcoord" size="3" name="num" min="-100" max="100" value="%SLIDERVALUE%"></p> </form> <h2>ESP32 Brightness Control Web Server</h2> <p><span id="textslider_value">%SLIDERVALUE%</span></p> <p><input type="range" onchange="updateSliderPWM(this)" id="pwmSlider" min="0" max="255" value="%SLIDERVALUE%" step="1" class="slider"></p> <script> function updateSliderPWM(element) { var slider_value = document.getElementById("pwmSlider").value; document.getElementById("textslider_value").innerHTML = slider_value; document.getElementById("Xcoord").value = slider_value; console.log(slider_value); var xhr = new XMLHttpRequest(); xhr.open("GET", "/slider?value="+slider_value, true); xhr.send(); } </script> </body> </html> )rawliteral"; String processor(const String& var){ if (var == "SLIDERVALUE"){ return slider_value; } return String(); } void setup(){ Serial.begin(115200); //WiFi.softAPConfig(localno, gateway, subnet); delay(100); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting..."); } Serial.println(WiFi.localIP()); server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/html", index_html, processor); }); server.on("/slider", HTTP_GET, [] (AsyncWebServerRequest *request) { String message; if (request->hasParam(input_parameter)) { message = request->getParam(input_parameter)->value(); slider_value = message; //ledcWrite(led_channel, slider_value.toInt()); } else { message = "No message sent"; } Serial.println(message); request->send(200, "text/plain", "OK"); }); server.begin(); } void loop() { }

Буду очень признателен любой помощи!
Надеюсь со средней сложностью не прогадал)
Для удобства оставил разные методы реализации сервера

Дополнительно:

По всей видимости, проблема в выделении памяти. До этого пробовал сносить половину сайта, но результата не было. Освободил память (убрал ссылки и некоторые переменные) и все заработало. Так как запись сайта шла во flash память - видимо, она и исчерпалась.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Максим Павлов Ответ

Для того чтобы определить, в чем может быть ошибка веб сервера esp32, необходимо проанализировать код, который используется для создания и настройки веб сервера.

Одной из возможных причин ошибки может быть неправильная настройка сетевых параметров, таких как IP-адрес, порт или сетевой интерфейс. Убедитесь, что вы правильно указали все необходимые параметры в настройках веб сервера.

Другой возможной причиной ошибки может быть неправильное использование функций или библиотек для работы с веб сервером. Убедитесь, что вы используете правильные функции и методы для создания маршрутов, обработки запросов и отправки ответов клиентам.

Также стоит проверить правильность написания кода, возможно, в нем есть опечатки или логические ошибки, которые могут привести к некорректной работе веб сервера. Рекомендуется внимательно просмотреть весь код и убедиться, что он написан правильно.

Если после всех этих шагов проблема не решена, то стоит обратить внимание на логи ошибок, которые генерирует веб сервер. Просмотрите логи и попробуйте идентифицировать причину ошибки на основе полученной информации.

Наконец, если проблема все еще остается нерешенной, то возможно стоит обратиться за помощью к сообществу разработчиков, задав вопрос на форумах или специализированных ресурсах. Возможно, кто-то уже сталкивался с подобной проблемой и сможет помочь вам ее решить.

Необходимо помнить, что исправление ошибок веб сервера esp32 может потребовать времени и терпения, но с достаточным усилием и анализом вы сможете найти и устранить причину проблемы.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно