断开与路由器的连接后,如何恢复与主机的连接?

问题描述 投票:0回答:1

我在站点模式下使用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++ wifi esp8266 arduino-esp8266 platformio
1个回答
0
投票

您可以尝试这些代码并进行修改以适应。

#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示例中找到。

© www.soinside.com 2019 - 2024. All rights reserved.