Получение кода ошибки -1 (HTTP_CONNECTION_REFUSED) после первого подключения
У меня есть установка с двумя чипами ESP8266. Одним из них является AP и прослушивание сигналов тревоги от другого ESP8266 в режиме WiFi. Точка доступа - это точка доступа, принимающая запросы от "тревожных" чипов.
Моя проблема в том, что, когда первый запрос GET был обработан (успешно) точкой доступа, больше невозможно делать больше запросов, пока чип AP не будет сброшен. Подключение к точке доступа Wi-Fi проходит нормально, но фактический запрос 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. доски. Похоже, не относится к конкретной доске.
1 ответ
Обновление - решено Я решил стереть всю свою среду разработки и переустановить. Это было не так уж важно. И после перекомпиляции и развертывания на чипе (AP Chip) он работает так, как должен был. Ну что ж....
Надеюсь, что это поможет кому-то, если они окажутся в той же ситуации.
Теперь, чтобы очистить код