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

Не работает точка доступа в режиме WIFI_AP_STA если нет подключения к роутеру

mishgan

Member
Есть простенький код подключает ESP8266 к роутеру(режим STA) и одновременно поднимает свою wifi сеть (режим AP).
Код:
#include <ESP8266WiFi.h>
 
#define WIFI_SSID "YOUR WIFI NETWORK SSID"
#define WIFI_PASS "YOUR WIFI PASSWORD"
 

#define AP_SSID "ESP8266"
#define AP_PASS "magicword"
 
void setup()
{

  Serial.begin(115200);
  Serial.println();
 
  WiFi.mode(WIFI_AP_STA);
  WiFi.softAP(AP_SSID, AP_PASS);
 
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  delay (15000);
  // Connecting to WiFi...
  Serial.print("Connecting to ");
  Serial.print(WIFI_SSID);

  Serial.println();
  Serial.println("Connected!");
  Serial.print("IP address for network ");
  Serial.print(WIFI_SSID);
  Serial.print(" : ");
  Serial.println(WiFi.localIP());
  Serial.print("IP address for network ");
  Serial.print(AP_SSID);
  Serial.print(" : ");
  Serial.print(WiFi.softAPIP());
 
}
 
void loop() {

 
}
Но если например задать неправильно ssid и пароль от роутера, то и esp8266 не работает в режиме AP. Как это можно исправить?
Нужно мне это для первоначальной настройки esp8266. Т.е. пользователь подключается к модулю как к точке доступа (AP). Задает ssid и пароль от роутера. Если эти данные верные то есп конектится к роутеру без проблем и все работает как надо. Но вот если он задаст их неверно и передаст в есп, то она не только не подключится к роутеру но и перестает работать как точка доступа.
 

mishgan

Member
Напишите код, если не подключилась к роутеру, запустить точку доступа.
Смотрите примеры в ардуиноиде.
при старте скетча выполнил
Код:
  WiFi.mode(WIFI_AP_STA);
  WiFi.softAP(AP_SSID, AP_PASS);
К роутеру не подключаемся. Пользователь передает неверные параметры роутера. Выполняется команды

Код:
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED)   delay(100);
В итоге и к роутеру не подключились и AP отключилась...
 

CodeNameHawk

Moderator
Команда форума
В итоге и к роутеру не подключились и AP отключилась..
А голова вам зачем.
Если, нп. через минуту все ещё нет подключения к роутеру,
попробуйте снова
WiFi.mode(WIFI_AP_STA); WiFi.softAP(AP_SSID, AP_PASS);
Или даже так
WiFi.mode(WIFI_AP);
WiFi.softAP(AP_SSID, AP_PASS);
А разве точка доступа пропадает?
Может она просто на введенный пароль перешла?
 

mishgan

Member
А разве точка доступа пропадает?
Может она просто на введенный пароль перешла?
т.е. если я вызываю команду WiFi.begin(WIFI_SSID, WIFI_PASS); то она меняет пароли и у AP заданные командой WiFi.softAP(AP_SSID, AP_PASS); .... както не сходится.... Если я задаю правильные ssid и пароль от роутера смена пароля у точки доступа не происходит....
 

CodeNameHawk

Moderator
Команда форума
Ваш код, из первого поста, работает:
Untitled.png
Можете включить отладку и посмотреть, что выдает https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/readme.html?highlight=sta ap#who-is-who
Проверьте подключилась ли https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/soft-access-point-examples.html
Поинтересуйтесь Persistent, может она мешает. https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html?highlight=persistent
https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/generic-class.html?highlight=persistent
 
Последнее редактирование:

mishgan

Member
Код он рабочий в том случае когда параметры STA заданы верно и есп без проблем подключается к роутеру. Вся проблема начинается когда роутер выключен или ssid и пароль от него задан неверно. Почитал вчера соседние форумы. На них пишут что есп начинает бесконечно искать сеть с такими параметрами и это приводит к тому что AP перестает работать как надо.
В файле esp_softap.h написано
Код:
The ESP8266 is limited to only one channel, so when in the soft-AP+station mode,
  *               the soft-AP will adjust its channel automatically to be the same as
  *               the channel of the ESP8266 station.
Я так понимаю когда мы выполняем WiFi.begin(WIFI_SSID, WIFI_PASS);, то есп начинает искать сеть и перебирать каналы, а так как он у нас один то и режим AP отваливается.
 
Сверху Снизу