首次连接后获取错误代码-1(HTTP_CONNECTION_REFUSED)

时间:2018-05-27 14:02:53

标签: esp8266 arduino-esp8266

我有两个ESP8266芯片的设置。 一个是AP,在WiFi模式下收听来自其他ESP8266的警报。 AP是一个接入来自" alarm"芯片。

我的问题是,当AP(成功)处理了第一个GET请求时,除非AP芯片被重置,否则不再可能发出更多请求。 连接到AP WiFI显然很好,但实际的获取请求仅在重置后的第一次尝试时起作用,下一次请求都将错误代码-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");
  }

来自&#34;发件人的代码&#34; (报警)芯片:

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 dev。板。似乎与特定董事会无关。

1 个答案:

答案 0 :(得分:0)

更新 - 已解决 我决定擦除整个开发环境并重新安装。 这不是什么大不了的事。 在重新编译并部署到芯片(AP芯片)之后,它可以正常工作。 好吧....

希望如果他们最终陷入同样的​​境地,这会有所帮助。

现在要清理代码