esp32 и проблема с подключением к WiFi

artcorer

✩✩✩✩✩✩✩
31 Окт 2019
11
0
При подключении к wifi все отлично, esp32 работает в штатном режиме. Если допустим точка доступа не доступна, esp32 работает с таймаутом в 5 секунд. Но как только соединение (включаю роутер) появляется, работа снова восстанавливается. Я всеми силами (break; WiFi.disconnect(true); return; ) пытался прервать таймаут подключения. Не пойму в чем дело.
C++:
#include <Arduino.h>
#include <WiFi.h>
#include "time.h"
#include <iarduino_RTC.h>
#include <Nextion.h>

iarduino_RTC watch(RTC_DS3231);

//page id = 0, component id = 1, component name = "b0"
NexText nextime = NexText(0, 1, "time1");
NexText nexdate = NexText(0, 2, "date1");
NexText nextime2 = NexText(1, 4, "time2");
NexText nexdate2 = NexText(1, 3, "date2");
NexText debtxt = NexText(1, 2, "debtxt");
NexText labelrst = NexText(2, 1, "labelrst");
NexText qr = NexText(3, 1, "qr");
NexButton nexup = NexButton(1, 5, "update");
NexButton debug = NexButton(0, 4, "debug");
NexButton debug2 = NexButton(1, 1, "debug");
NexButton restart = NexButton(1, 6, "restart");
NexPage page2    = NexPage(2, 0, "page2");

NexTouch *nex_listen_list[] = {
  &nexup,
  &debug,
  &debug2,
  &restart,
  &page2,
  NULL
};

char* ssid     = "Myhomeinternet";
char* password = "wooo585!";
char servername[]="ntppool.org";  // удаленный сервер, к которому мы будем подключаться
char* ntpServer = "de.pool.ntp.org";
long  gmtOffset_sec = 7200;
int   daylightOffset_sec = 3600;
int second, minute, hour, day, month, year, weekday, rem2;
String rem, a, b, c, d, e, f, g;
long current;
struct tm timeinfo;
uint32_t myTimer1, myTimer2;
int prover;

WiFiClient client;

void nexupPopCallback(void *ptr) {
  Serial.println("Reconnect...");
  setupWiFi();
  timeSync();
}

void debugPopCallback(void *ptr) {
  prover = 1;
}

void debug2PopCallback(void *ptr) {
  prover = 0;
}

void restartPopCallback(void *ptr) {
  page2.show();
  delay(1000);
  labelrst.setText("3");
  delay(1000);
  labelrst.setText("2");
  delay(1000);
  labelrst.setText("1");
  ESP.restart();
}

void setupWiFi() {
  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(ssid, password);
  Serial.println();
  Serial.print("Подключение к WiFi..");
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
    if (millis() - myTimer1 >= 10000) {
        Serial.println(".");
        Serial.println("Попытка подключения к WiFi не удалась");
        myTimer1 = millis();
        WiFi.disconnect(true);
        Serial.println("Отключение от WiFi");
        break;
    } else {
      if (WiFi.status() == WL_CONNECTED) {
        if (client.connect(servername, 80)) {
          Serial.println(".подключено!");
          Serial.println("Соединение с интернетом установленно");
          Serial.print("Хост: ");
          Serial.println(servername);
          Serial.println("IP address: ");
          Serial.println(WiFi.localIP());
        } else {
           client.stop();
           Serial.println(".");
           Serial.println("Соединение с WiFi установленно, но");
           Serial.println("отсутствует соединение с интернетом");
           WiFi.disconnect(true);
           Serial.println("Отключение от WiFi");
           break;
        }
      }
    }
    break;
    WiFi.disconnect(true);
  }
  return;
}

void timeSync() {
  if (client.connect(servername, 80)) {
    getLocalTime(&timeinfo);
    second = timeinfo.tm_sec;
    minute = timeinfo.tm_min;
    hour = timeinfo.tm_hour;
    day = timeinfo.tm_mday;
    month = timeinfo.tm_mon + 1;
    year = timeinfo.tm_year + 1900;
    rem = year;
    rem.remove(0, 1);
    rem2 = rem.toInt();
    watch.settime(second, minute, hour, day, month, rem2);                      // Записываем время в модуль: 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник.
    Serial.println("Время синхронизированно");
    Serial.print("Сервер синхронизации: ");
    Serial.println(ntpServer);
  } else {
    client.stop();
    Serial.println("Ошибка получения данных с интернета");
    Serial.println("Запись времени не была произведена");
  }
    nextime.setText(watch.gettime("H:i"));
    nexdate.setText(watch.gettime("d/m/Y"));

}

void printserial(){
    if (client.connect(servername, 80)) {
      getLocalTime(&timeinfo);
      second = timeinfo.tm_sec;
      minute = timeinfo.tm_min;
       hour = timeinfo.tm_hour;
      day = timeinfo.tm_mday;
      month = timeinfo.tm_mon + 1;
      year = timeinfo.tm_year + 1900;
      weekday = timeinfo.tm_wday + 8;
      Serial.print("Синхронизированное время:   ");
      Serial.print(day);
      Serial.print("/");
      Serial.print(month);
      Serial.print("/");
      Serial.print(year);
      Serial.print(" --- ");
      Serial.print(hour);
      Serial.print(":");
      Serial.print(minute);
      Serial.print(":");
      Serial.println(second);
  } else {
      client.stop();
      Serial.println("Время не синхронизированно");
  }
  Serial.print("Записанное время:           ");
  Serial.println(watch.gettime("d/m/Y, H:i:s"));
}

void setup(void) {
   Serial.begin(115200);
   setupWiFi();
   nexInit();
   configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
   watch.begin();                                          // Инициируем работу с модулем.
   timeSync();
   debtxt.setText("dsafa");
   nexup.attachPop(nexupPopCallback, &nexup);
   debug.attachPop(debugPopCallback, &debug);
   debug2.attachPop(debug2PopCallback, &debug2);
   restart.attachPop(restartPopCallback, &restart);
}

void loop(void) {
  printserial();
  nexLoop(nex_listen_list);
  getLocalTime(&timeinfo);  
  if (timeinfo.tm_sec == 00) {
   nextime.setText(watch.gettime("H:i"));
   nexdate.setText(watch.gettime("d/m/Y"));    
  }
  while (prover == 1) {
   nextime2.setText(watch.gettime("H:i:s"));
   nexdate2.setText(watch.gettime("d/m/Y"));
   if (prover == 0) {
    break;                              
   }
   nextime.setText(watch.gettime("H:i"));
   nexdate.setText(watch.gettime("d/m/Y"));
   break;
  }
}
 

artcorer

✩✩✩✩✩✩✩
31 Окт 2019
11
0
Я переписал процесс подключения, но это не дало результата
C++:
void setupWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("Подключение...");
  delay(3000);
  if (WiFi.status() == WL_CONNECTED) {
    Serial.println("WiFi подключён!");
  d1.setText("WiFi connected!");
       if (client.connect(servername, 80)) {
          Serial.println("Соединение с интернетом установленно");
          Serial.print("Хост: ");
          Serial.println(servername);
          Serial.println("ESP IP address: ");
          Serial.println(WiFi.localIP());
          d2.setText("Internet connected!");
        } else {
           client.stop();
           Serial.println("Нет соединения с интернетом");
           d2.setText("Internet not connected!");
        }
  }
  else {
  Serial.println("WiFi не подключён!");
  d1.setText("WiFi not connected!");
  d2.setText("Internet not connected!");
  client.stop();
  WiFi.disconnect(false);
  WiFi.softAPdisconnect();
  WiFi.mode(WIFI_OFF);
  }
}
При ошибке соединения ESP так же работает с таймаутом в 5 секунд