首页 > 解决方案 > 与路由器断开连接后如何恢复与主机的连接?

问题描述

我在工作站模式下使用 Wroom-02 与我的服务器交换一些信息(我正在使用 SecureClient 库)。我正在尝试路由器已打开但与 Internet 没有连接的情况。当我重新建立路由器互联网连接时,模块不再连接到主机,并给出错误消息“未知错误代码”。如何在不重置的情况下解决它?

这是我正在使用的完整代码。

`server_connectionFeedback_t server_sendData(char *pollingBuffer)
{
  server_connectionFeedback_t ret=SERVER_CONNECTION_IN_PROGRESS;

switch(serverManager.phase)
{
    case 0:
        stationClient.setInsecure(); 
        if(!stationClient.connect(SERVER_HOST,SERVER_PORT)) 
        {
            char buffTemp[100];
            stationClient.getLastSSLError(buffTemp,100);
            serialDebug.println(buffTemp);
            ret=SERVER_UNREACHEABLE; 
        }
        else 
        {
            stationClient.print(pollingBuffer); 
            serverManager.phase++;
            serverManager.timeoutReplyServer=SERVER_TIMEOUT_REPLY_SERVER; 
            serialDebug.println(pollingBuffer);
            serverManager.lenghtServerData=0;
        }
    break;

    case 1:
        if(serverManager.timeoutReplyServer) 
        {
            serverManager.lenghtServerData=stationClient.available(); 
            if(serverManager.lenghtServerData!=0) 
            {
                for(uint16_t i=0; i<serverManager.lenghtServerData; i++) 
                {
                    if(!i)
                    {
                        serverManager.buffer=(char*)malloc(2);
                        sprintf(serverManager.buffer,"%c",(char)stationClient.read());
                    }
                    else
                    {
                        serverManager.buffer=(char*)realloc(serverManager.buffer,strlen(serverManager.buffer)+2);
                        sprintf(serverManager.buffer,"%s%c",serverManager.buffer,(char)stationClient.read());
                    }
                }
                serialDebug.println(serverManager.buffer);
                String HTTPmessage(serverManager.buffer); 
                if(HTTPmessage.startsWith("HTTP/1.1 200 OK")) 
                {
                    server_contentData=HTTPmessage.substring(HTTPmessage.indexOf("Content-Length: ")+22); 
                    free(serverManager.buffer); 
                    serverManager.phase=0; 
                    ret=SERVER_REPLY_OK;
                }
                else
                {
                    free(serverManager.buffer);
                    serverManager.phase=0;
                    ret=SERVER_BAD_REPLY;
                }
            }
        }
        else
            ret=SERVER_NO_REPLY;
    break;
}
return ret;

}`

标签: c++wifiesp8266arduino-esp8266platformio

解决方案


您可以尝试这段代码并修改以适应。

#include <ESP8266WiFi.h>

#ifndef STASSID
#define STASSID "your-ssid"
#define STAPSK  "your-password"
#endif

const char* ssid     = STASSID;
const char* password = STAPSK;

void setup() {
  Serial.begin(115200);

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

上面发布的所有代码都需要包含在您的设置函数中。然后,如果您想在循环函数的中间重新连接,只需从上面的代码中插入以下内容。

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

此外,正如您所知,所有这些代码都可以在 ESP8266WiFi 客户端的 Arduino IDE 示例中找到。


推荐阅读