Делаю проект на 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() {}
Если убрать данный метод, то все работает, но без передачи данных. Думал что проблема в том, что в примере берется массив данных и передается (у меня через функцию), но особой разницы не должно быть...
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() {
}
Буду очень признателен любой помощи!
Надеюсь со средней сложностью не прогадал)
Для удобства оставил разные методы реализации сервера