• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Решено Хоть ты тресни: ESP ставит STA+AP вместо просто AP после смены режима.

CCat

Member
У меня две функции - одна запускает режим станции, другая - точки доступа.
Режим AP включается примерно так
Код:
  WiFi.disconnect();
  WiFi.mode(WIFI_AP);
  WiFi.softAP(ap_ssid);//without pass
  WiFi.softAPConfig(apIP, apIPgate, IPAddress(255, 255, 255, 0));
Прошлый режим вырубается и его данные очищаются путем [inline]WiFi.disconnect();[/inline]
Вроде все затирается, но почему-то во второй раз (и далее после первого STA mode) вместо AP mode будет STA+AP.
Мелочь, а неприятно. :(
По какому праву ESP-шка сама выбирает за меня непрошенный гибридный режим? :mad:
Где-то в иностранной прессе проскальзывало, что некоторые глюки связаны с созданием точки доступа без пароля, но я уже забыл, про что говорилось.
 

Алексей.

Active member
Прошлый режим вырубается и его данные очищаются путем WiFi.disconnect();
Прошлый режим не "вырубается", для режима STA просто затираются ssid и password
Код:
bool ESP8266WiFiSTAClass::disconnect(bool wifioff/* = false*/) {
    bool ret;
    struct station_config conf;
    *conf.ssid = 0;
    *conf.password = 0;

    ETS_UART_INTR_DISABLE();
    if(WiFi._persistent) {
        wifi_station_set_config(&conf);
    } else {
        wifi_station_set_config_current(&conf);
    }
    ret = wifi_station_disconnect();
    ETS_UART_INTR_ENABLE();

    if(wifioff) {
        WiFi.enableSTA(false);
    }

    return ret;
}
 
  • Like
Реакции: CCat

CCat

Member
Спасибо, понял. Да и всякие [inline]WiFi.persistent[/inline], как я понял, влияют тоже только на это.
А тогда почему гибридный режим? Я же явно указываю [inline]WiFi.mode(WIFI_AP);[/inline]
Типа "у тебя прошлый режим был STA, так что тебе явно пригодится "STA+AP", и не благодари? :)
Да я уже начитался, что некоторые люди прямо стирают сектора, где хранится информация о AP. Иначе никак? :(
 

Алексей.

Active member
persistence = постоянство
Определяет будут ли настройки временные, актуальные только до перезагрузки, или настройки сохранятся во флеш
для wifi_set_opmode в нотесах пишут
Function: set wifi working mode as STATION, SOFTAP or STATION+SOFTAP
Note: Versions before esp_iot_sdk_v0.9.2, need to call system_restart() after this api; after esp_iot_sdk_v0.9.2, need not to restart.
Нужен или не нужен рестарт я не проверял, после изменения режима перезагружал модуль :)
 
  • Like
Реакции: CCat

nikolz

Well-known member
Спасибо, понял. Да и всякие [inline]WiFi.persistent[/inline], как я понял, влияют тоже только на это.
А тогда почему гибридный режим? Я же явно указываю [inline]WiFi.mode(WIFI_AP);[/inline]
Типа "у тебя прошлый режим был STA, так что тебе явно пригодится "STA+AP", и не благодари? :)
Да я уже начитался, что некоторые люди прямо стирают сектора, где хранится информация о AP. Иначе никак? :(
попробуйте установить режим 0 "ноль" а потом AP
 
  • Like
Реакции: CCat

CCat

Member
попробуйте установить режим 0 "ноль" а потом AP
А знаете, установка такого режима, а потом, через секунду, уже AP, тьфу-тьфу, пока работает! :cool: Спасибо! Буду гонять дальше между режимами!

Код:
void StartAPMode() {
  WiFi.softAPdisconnect(true);
  WiFi.mode(WIFI_OFF);
  delay(1000);
  WiFi.mode(WIFI_AP);
  WiFi.softAP(ap_ssid);//без пароля
  WiFi.softAPConfig(apIP, apIPgate, IPAddress(255, 255, 255, 0));//для кастомного ip, работало почему-то не всегда 
}
А еще, когда я теперь делаю [inline]WiFi.softAPdisconnect(true);[/inline] вместо [inline]WiFi.disconnect();[/inline], перестал затираться ssid и пароль для режима клиента (STA).
 

nikolz

Well-known member
А знаете, установка такого режима, а потом, через секунду, уже AP, тьфу-тьфу, пока работает! :cool: Спасибо! Буду гонять дальше между режимами!

Код:
void StartAPMode() {
  WiFi.softAPdisconnect(true);
  WiFi.mode(WIFI_OFF);
  delay(1000);
  WiFi.mode(WIFI_AP);
  WiFi.softAP(ap_ssid);//без пароля
  WiFi.softAPConfig(apIP, apIPgate, IPAddress(255, 255, 255, 0));//для кастомного ip, работало почему-то не всегда
}
А еще, когда я теперь делаю [inline]WiFi.softAPdisconnect(true);[/inline] вместо [inline]WiFi.disconnect();[/inline], перестал затираться ssid и пароль для режима клиента (STA).
полагаю что задержка не требуется. Попробуйте ее убрать.
 

nikolz

Well-known member
Может, как-то совпало, но без задержки вывелись кракозябры вместо нужного ssid при просмотре доступных точек доступа на мобильном. :)
если есть желание попробуйте уменьшить задержку и найти минимум необходимого.
 
  • Like
Реакции: CCat
Сверху Снизу