Disconnect не отключает

ESP-12E

Контроллеры на основе ESP8266
Ответить
Brand2
Лейтенант
Сообщения: 414
Зарегистрирован: 26.02.2018{, 21:27}
Репутация: 41
Откуда: Haifa
Имя: Alex

Disconnect не отключает

#1

Сообщение Brand2 » 06.06.2018{, 14:08}

Хочу открывать дверь с помощью реле,которое включается при наличии в зоне доступа WiFi смартфона.
Все работает отлично когда я включаю и выключаю WiFi смартфона в настройках ,реле включается и отключается .Когда вхожу в зону точки доступа реле тоже включается нормально.
Проблемма начинается ,когда я покидаю зону точки доступа,вижу что на телефоне уже отключился WiFi ,но реле остается включенным,т.е модуль выдает Сonnected,
Когда же я вновь приближаюсь к зоне приема WiFi,получаю Disconnected на секунду примерно и тут же
опять Connected.
Такое впечатление что функция onStationDisconnected не работает при постепенном уменьшении сигнала подключенного вайфая.
Может кто знает почему так происходит?
СпойлерПоказать

Код: Выделить всё

#include <ESP8266WiFi.h>

const char *ssid = "DELTA_unlocker";
const char *password = "12345678";

unsigned long previousMillis = 0;
const long interval = 7000;
const int SleepTime = 7;

bool ConnectFlag = false;

WiFiEventHandler stationConnectedHandler; // событие - соединение
WiFiEventHandler stationDisconnectedHandler; // событие - разъединение

void setup() {
  Serial.begin(115200);
  pinMode(13, OUTPUT); // реле на GPIO13 (D7)
  digitalWrite(13, HIGH); // начальное значение
  WiFi.persistent(false); // бережем флеш-память, не перезаписываем данные подключения, если они не изменились с прошлой загрузки
  WiFi.mode(WIFI_AP); // Режим точки доступа
  WiFi.softAP(ssid, password);

  stationConnectedHandler = WiFi.onSoftAPModeStationConnected(&onStationConnected); // при соединении переходим к функции
  stationDisconnectedHandler = WiFi.onSoftAPModeStationDisconnected(&onStationDisconnected); // при разъединении переходим к функции

}

void loop() {
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval && ConnectFlag == false) {
    previousMillis = currentMillis;
    Serial.println("Sleep "+String(SleepTime)+" Sec.");
  //  ESP.deepSleep(SleepTime * 1000000, WAKE_RFCAL);
  } 
}

void onStationConnected(const WiFiEventSoftAPModeStationConnected& evt) { // при коннекте - включаем реле
  Serial.print("CONNECTED: ");
  digitalWrite(13, LOW);
  ConnectFlag = true;
  Serial.println(macToString(evt.mac)); // МАС-адрес в порт
}

void onStationDisconnected(const WiFiEventSoftAPModeStationDisconnected& evt) { // при дисконнекте - выключаем реле
  Serial.print("DISCONNECTED: ");
  digitalWrite(13, HIGH);
  ConnectFlag = false;
  Serial.println(macToString(evt.mac)); // МАС-адрес в порт
}

String macToString(const unsigned char* mac) { // Получаем МАС-адрес клиента в виде строки (может пригодиться при идентификации)
  char buf[20];
  snprintf(buf, sizeof(buf), "%02x:%02x:%02x:%02x:%02x:%02x",
           mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
  return String(buf);
}

Berserker
Рядовой
Сообщения: 58
Зарегистрирован: 17.05.2018{, 16:13}
Репутация: 0
Имя: Александр

Disconnect не отключает

#2

Сообщение Berserker » 07.06.2018{, 05:50}

Есть зона уверенного приема и нет, обычно устройства если находятся в зоне не уверенного приема до последнего не рвут соединение, пытаются подключаться, и точки доступа делают тоже самое, в некоторых точках есть функция если сигнал меньше ХХ децибел считать что устройство в не зоны действия, в некоторых смартах есть тоже самое если сигнал плохой не подключаться, в любых других случаях разрыв будет только по тайм ауту.
А при
"Когда же я вновь приближаюсь к зоне приема WiFi,получаю Disconnected на секунду примерно и тут же опять Connected."
называется реконнект. Сброс и подключение заново. Копать нужно или прошивку точки или настройки смарта.

Ответить

Вернуться в «ESP8266»