Как отключить или остановить точку доступа в ESP8266?

Я создал код для ESP8266 12E с Arduino IDE, в котором он будет работать как "Режим станции" или "Режим точки доступа" по Wi-Fi, в зависимости от ситуации. Все работает нормально, за исключением случаев, когда устройство было настроено как точка доступа, даже когда я выключаю устройство, а затем снова включаю и принудительно инициализирую Wifi как "Режим станции", сеть точки доступа остается активной.

Пример: Предположим, что я включил ESP8266 и инициализировал Wi-Fi как точку доступа, и назвал сеть Wi-Fi как "MY_WIFI_TEST". Давайте теперь предположим, что я выключил ESP8266 и заставил его включиться как "Режим станции". ESP8266 обычно подключается к моей сети (сети моего маршрутизатора шлюза 192.168.1.1), но сохраняет сеть "MY_WIFI_TEST" активной (предыдущая сеть в качестве точки доступа). Вы не можете подключиться к этой сети, но она остается активной.

Как я могу отключить или остановить сеть точки доступа?

Мой тестовый код:

#include <ESP8266WiFi.h>

bool access_point_init(){
    // Режим точки доступа

   Serial.begin(115200);
   IPAddress ip(192,168,1,254);
   IPAddress gateway(192,168,1,1);
   IPAddress subnet(255,255,255,0);
   char* ssid     = "myssidname";
   char* password = "12345678";


   WiFi.softAPConfig(ip, gateway, subnet);
   bool ret = WiFi.softAP(ssid, password);

   return ret;
}


void wifi_station_init(){

    // Режим станции
    Serial.begin(115200);
   Serial.printf("\n"); 

   WiFi.begin(net_ssid, net_pwd_ssid);

   IPAddress ip(192,168,1,10);
   IPAddress gateway(192,168,1,1);
   IPAddress subnet(255,255,255,0); 

    WiFi.config(ip, gateway, subnet);

   k = 0;
   while ((WiFi.status() != WL_CONNECTED) && (k < 80)){
      delay(250);
      Serial.print('.');
      k++;
   }

   Serial.printf("\n");
   Serial.printf("IP address: ");
   Serial.println(WiFi.localIP());
}


void setup() 
{
    bool my_condition = false;
    //...
    // my_condition = Функция загрузки();
    //...

   if (my_condition) { 
        access_point_init();
   } else {
      wifi_station_init();
   }
}

, 👍9


3 ответа


7

Я уже решил, используя функцию библиотечного Wi-Fi, специфичную для подключений в режиме "Точка доступа":

WiFi.softAPdisconnect (true);

Ссылка: softapdisconnect подключать

,

3

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

WiFi.режим (WIFI_AP);

,

1

Я пытался отключить softAP в новом Arduino Uno R4 Wi-Fi, чтобы переименовать его и перезапустить. Я поместил показания изменяющегося датчика в имя точки доступа, чтобы увидеть их значение, просто выполнив сканирование сети, не подключаясь к ней.

Библиотека wifi.h для UNO R4 не реализует SOFTAPDISCONNECT. В примере сервера AP_SIMPLEWEB я обнаружил, что добавление следующей функции отключает точку доступа и позволяет перезапустить ее с другим именем.

void endAccessPoint() {
  using namespace std;
  string res = "";
  modem.begin();
  modem.write(string(PROMPT(_DISCONNECTSOFTAP)),res,"%s%d\r\n" ,CMD_WRITE(_DISCONNECTSOFTAP),1);
}
,