nikiti_y
New member
Какая-то не понятная ситуация у меня происходит. Есть сервер написанный на ESP8266WebServer, у него есть несколько обработчиков. Иногда при запросе срабатывает исключение и выводит что страница не найдена, что очень странно, тк она есть. Ниже в коде оставил один из методов, который почти всегда такое выводит. Заметил что после каждого успешного запроса, нужно подождать примерно 15 секунд, чтоб следующий тоже был успешный. Предполагаю, что проблема с памятью, но никак не могу понять как это устранить.
Подытожу: я делаю запрос по адресу /api/v1/get_metrics -> иногда получаю нормальный ответ, отработанной фун-ии, иногда получаю, что страница не найдена
Код:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ArduinoJson.h>
typedef struct {
uint8_t pinNum;
bool pinVal;
const char* pinName;
} pinInit_t;
const char* ssid = "log";
const char* password = "pass";
bool SmartFlowers_mode = true;
ESP8266WebServer server(80);
pinInit_t digitPins[]{
{ D7, LOW, "light_0" }
};
void setup() {
Serial.begin(115200);
delay(100);
for (byte i = 0; i < sizeof(digitPins) / sizeof(pinInit_t); ++i) {
pinMode(digitPins[i].pinNum, OUTPUT);
digitalWrite(digitPins[i].pinNum, SmartFlowers_mode ? digitPins[i].pinVal : 0);
}
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected..!");
Serial.print("Got IP: ");
Serial.println(WiFi.localIP());
// Handels
server.on("/api/v1/get_metrics", get_metrics);
server.onNotFound(handle_NotFound);
server.enableCORS(true);
server.begin();
Serial.println("HTTP server started");
}
void loop() {
server.handleClient();
}
void handle_NotFound() {
server.send(404, "text/plain", "Not found");
}
void get_metrics() {
char message[512];
JsonDocument payload;
JsonObject devises = payload["devises"].to<JsonObject>();
JsonArray lights = devises["lights"].to<JsonArray>();
for (byte i = 0; i < sizeof(digitPins) / sizeof(pinInit_t); ++i) {
JsonObject light = lights.add<JsonObject>();
light["name"] = digitPins[i].pinName;
light["status"] = digitPins[i].pinVal;
}
payload["status"] = SmartFlowers_mode;
serializeJson(payload, message);
server.send(200, "application/json", message);
}