Получение кода ошибки -1 (HTTP_CONNECTION_REFUSED) после первого подключения - PullRequest
0 голосов
/ 27 мая 2018

У меня есть установка с двумя чипами 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.доски.Похоже, не относится к конкретной доске.

1 Ответ

0 голосов
/ 28 мая 2018

Обновление - решено Я решил стереть всю свою среду разработки и переустановить.Это было не так уж важно.И после перекомпиляции и развертывания на чипе (AP Chip) он работает так, как должен был.О, хорошо ....

Надеюсь, это поможет кому-то, если они окажутся в той же ситуации.

Теперь для очистки кода

...