У меня есть установка с двумя чипами ESP8266.Одним из них является AP и прослушивание сигналов тревоги от другого ESP8266 в режиме WiFi.AP - это точка доступа, принимающая запросы на получение от микросхем «тревоги».
Моя проблема заключается в том, что, когда первый запрос GET обработан (успешно) точкой доступа, больше невозможно выполнять больше запросов, если толькоAP чип сбрасывается.Подключение к AP WiFI, очевидно, проходит нормально, но фактический запрос get работает только с первой попытки после сброса, все последующие все возвращают клиенту код ошибки -1.
Код от чипа AP:
void setupAP()
{
WiFi.mode(WIFI_AP);
String AP_NameString = "KEEP SAFE " + deviceID;
char AP_NameChar[AP_NameString.length() + 1];
memset(AP_NameChar, 0, AP_NameString.length() + 1);
for (int i = 0; i < AP_NameString.length(); i++)
AP_NameChar[i] = AP_NameString.charAt(i);
WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0)); // subnet FF FF FF 00
WiFi.softAP(AP_NameChar, WiFiAPPSK);
yield();
activeMenu = mainMenu;
server.on("/setup", handleWebRequest_Setup); //Associate the handler function to the path
server.on("/confirm", handleWebRequest_Confirm); //Associate the handler function to the path
server.on("/alarm", HTTP_GET, handleWebRequest_Alarm);
server.begin(); //Start the server
Serial.println("Server listening");
}
void handleWebRequest_Alarm(){
Serial.println("Client connected");
sensorAlarmPostback(server);
String s = "";
s += "<!DOCTYPE HTML>\r\n<html>\r\n";
s += "OK";
s += "</html>\n";
// Send the response to the client
Serial.println("Send OK to client");
server.send(200, "text/html", s);
Serial.println("OK Has been sent to the client");
}
void sensorAlarmPostback(ESP8266WebServer serv) {
Serial.println(String("Alaram recieved from : " + serv.arg("id")));
for (int i = 0; i < maxSensors; i++)
{
if (sensors[i].ID == serv.arg("id"))
sensors[i].alarm = true;
yield();
}
Serial.println("Sensor alarm flag has been set");
}
Код от чипа отправителя (тревоги):
void loop() {
initWifi();
publishAlarm();
WiFi.disconnect();
delay(30 * 1000); // Wait 30 seconds before next alarm
}
void initWifi() {
WiFi.disconnect();
WiFi.mode(WIFI_STA); // added in V 3.1a to disable AP_SSID publication in Client mode - default was WIFI_AP_STA
WiFi.begin(ssid.c_str(), password.c_str());
int retryCount = 0;
while (WiFi.status() != WL_CONNECTED && retryCount < 10) {
delay(2000);
retryCount++;
}
if (WiFi.status() != WL_CONNECTED)
Serial.println("WiFi ERROR");
else
Serial.println("WiFi Connected");
delay(500);
}
void publishAlarm(){
HTTPClient http;
String postStr = "?id=" + AlarmID;
postStr.replace("\r", "");
postStr.replace("\n", "");
Serial.println("String is");
Serial.println(postStr);
Serial.println("Connecting to Controller...");
String PostURL = "http://10.10.10.1/alarm" + postStr;
Serial.println("URL is: " + PostURL);
http.begin(PostURL);
int httpCode = http.GET();
if (httpCode > 0)
{
Serial.println("httpCode > 0");
yield();
delay(100);
http.end();
}
else
{
Serial.println("Error in upload " + String(httpCode));
yield();
delay(100);
http.end();
}
}
Я понимаю, что в коде много ненужных вещей, но я пробовал почти все.Я просто не понимаю, и у меня такая же проблема и в других проектах.Я использую чипы Wemos D1 Minis и различные устройства NodeMCU.доски.Похоже, не относится к конкретной доске.