всем привет, нужно реализовать задачу, в которой esp-01(8266) выступает в роле сервера с пустой страницей, к нему подключается клиент (1с) и отправляет post запрос с json файлом. Столкнулся с проблемой. Get запрос работает хорошо, в обратную связь выдает код 200
а вот с json файлом выводит код ошибки 404. URL странице является ipшник модуля.
Буду очень рад помощи
код esp выглядит следующим образом:
‘’’ #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <ArduinoJson.h>
решил сделать по другому, esp видит и понимает, какой запрос ей приходит, но почему то с json не хочет работать. То есть при отправке get, в монитор порта выводит, что пришел get, с post точно также но при обработке json выдает ошибку
вот код
#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
const char* ssid = "wifi";
const char* password = "password";
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(10);
// Подключение к Wi-Fi сети
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Начало сервера
server.begin();
Serial.println("Server started");
}
void loop() {
WiFiClient client = server.available();
if (client) {
Serial.println("New Client.");
while (client.connected()) {
if (client.available()) {
String request = client.readStringUntil('\n');
Serial.println(request);
DynamicJsonDocument jsonDoc(1024);
DeserializationError error = deserializeJson(jsonDoc, request);
if (error) {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
} else {
serializeJsonPretty(jsonDoc, Serial);
Serial.println();
}
break;
}
}
delay(50000); // Небольшая задержка перед закрытием соединения
client.stop();
Serial.println("Client disconnected.");
}
}
Не надо метаться.
Сначала научитесь получать текстом JSON по POST, потом уже с десереализацией начнете сражаться.
Способ с вебсервером более правильный. Делал парсинг JSON не раз, но на ESP32.
Оно вообще не знает, что такое json. Это просто какой-то текст, а что с ним будет делать программист, esp вообще не волнует.
Смотрите, что там конкретно приходит - вполне вероятно, что в текст добавляются какие-то символы, и ArduinoJSON уже не определяет этот текст, как корректный json-формат
// сохранение настроек
http_server->on(FPSTR(SR_SET_CONFIG), HTTP_POST, handleSetConfig);
....................................
static void handleSetConfig()
{
if (http_server->hasArg("plain") == false)
{
http_server->send(200, FPSTR(TEXT_PLAIN), F("Body not received"));
println(F("Failed to save configuration data, no data"));
return;
}
String json = http_server->arg("plain");
DynamicJsonDocument doc(CONFIG_SIZE);
DeserializationError error = deserializeJson(doc, json);
if (error)
{
println(F("Failed to save configuration data, invalid json data"));
println(error.f_str());
}
else
{
// а здесь разбирайте свой json на составляющие и делайте с ним что вам нужно
http_server->send(200, FPSTR(TEXT_HTML), F("<META http-equiv='refresh' content='1;URL=/'><p align='center'>Save settings...</p>"));
}
}
На web-странице выставляю нужные настройки и жму сохранить. Страница формирует список настроек в json-формате и отправляет серверу. Сервер принимает и разбирает на параметры
server.on(localIP, HTTP_POST, handleSetConfig);
как минимум тут у меня ошибка
поменял тут сonst char* SR_SET_CONFIG = "/";
и тут server.on(SR_SET_CONFIG, HTTP_POST, handleSetConfig);
Пытаюсь проверить, пока проблемы с перепрошивкой