При подключении к 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;
}
}