Как восстановить соединение с хостом после отключения от роутера? - PullRequest
0 голосов
/ 01 апреля 2019

Я использую Wroom-02 в режиме станции для обмена некоторой информацией с моим сервером (я использую библиотеку SecureClient). Я пытаюсь случай, когда маршрутизатор включен, но нет соединения с Интернетом. Когда я заново устанавливаю интернет-соединение с маршрутизатором, модуль больше не подключается к хосту, выдавая в качестве сообщения об ошибке «Неизвестный код ошибки». Как я могу решить это без сброса?

Это полный код, который я использую.

`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;

} `

1 Ответ

0 голосов
/ 01 апреля 2019

Вы можете попробовать этот бит кода и изменить, чтобы он соответствовал.

#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(".");
  }

Кроме того, чтобы вы знали, весь этот код можно найти в примерах:Arduino IDE для ESP8266WiFi Client.

...