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

В arduino ide 1.6.6 при программировании ESP-12e не меняется ssid & password в режиме AP

krepton85

Member
А как мне в процессе работы модуля переключится из режима WiFi.mode(WIFI_AP_STA); в WiFi.mode(WIFI_STA);. Я так и пробовал, но увы точка доступа не глушится, например мне нужно что бы был режим WiFi.mode(WIFI_AP_STA); до тех пор пока wi-fi клиент esp 8266 не подключится к моему роутару, а если подключился то только режим клиента WiFi.mode(WIFI_STA);
По всякому пробовал и сначало WiFi.mode(WIFI_OFF); потом WiFi.mode(WIFI_STA); но точка доступа не выключается ни как, так и продолжает работать режим WiFi.mode(WIFI_AP_STA);?
 

krepton85

Member
блин я его уже затер, выбесило, сделал как и в своем удлиннителе управляемом по mqtt - сначало пытается подключится в режиме только клиент к роутеру, если в течении 34 попыток с интерволом в 2 секунды между каждой, не удалось подключится, то переходит в режим только точки доступа, для ввода новых ssid и pass с вэб страницы.
Походу ни как это невозможно, без перезагрузки сделать.
 

tretyakov_sa

Moderator
Команда форума
блин я его уже затер, выбесило, сделал как и в своем удлиннителе управляемом по mqtt - сначало пытается подключится в режиме только клиент к роутеру, если в течении 34 попыток с интерволом в 2 секунды между каждой, не удалось подключится, то переходит в режим только точки доступа, для ввода новых ssid и pass с вэб страницы.
Походу ни как это невозможно, без перезагрузки сделать.
Код:
void WIFIAP_Client() {
  WiFi.disconnect();
  WiFi.mode(WIFI_STA);
  WiFi.begin(_ssid.c_str(), _password.c_str());
  tries(11);
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println(WL_CONNECTED);
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  if (WiFi.status() != WL_CONNECTED)
  {
    StartAPMode();
  }
}

bool StartAPMode()
{
  WiFi.disconnect();
  WiFi.mode(WIFI_AP);
  WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
  WiFi.softAP(_ssidAP.c_str(), _passwordAP.c_str());
  dnsServer.start(DNS_PORT, "*", apIP);
  //Зажигаем светодиод если находимся в режиме AP
  digitalWrite(led, HIGH);
  return true;
}

bool RestartWiFi() {
  //Холодный перезапуск Wi-Fi при первой настройке
  Serial.println("WiFi reconnect");
  // Не отключаясь точки доступа подключаемся к роутеру для получения будущего IP
  WiFi.mode(WIFI_AP_STA );
  WiFi.begin(_ssid.c_str(), _password.c_str());
  tries(30);

  Serial.println("");
  Serial.println(WiFi.localIP());
  HTTP.send(200, "text/plain", WiFi.localIP().toString());
  delay(5000);
  // Отключаем точку доступа и переподключаемся к роутеру
  /*WiFi.mode(WIFI_STA);
  WiFi.begin();
  tries(11);
    */
    ESP.restart();
}

// Попытки подключения к сети
void tries(byte tries) {
  while (--tries && WiFi.status() != WL_CONNECTED)
  {
    //Мигаем сетодиодом при попытке подключится к роутеру
    digitalWrite(led, HIGH);
    Serial.print(".");
    delay(500);
    digitalWrite(led, LOW);
    delay(500);

  }
}
Попробуйте вместо ESP.restart(); Вызвать WIFIAP_Client(); Сам не пробовал.
 

krepton85

Member
@tretyakov_sa, ну вот я же говарил без перезагрузки ни как не сделать. В моем проекте "блок управления люстрой в прихожей 3 в 1" ни как нельзя перезагружать, у меня здесь за счет перезагрузки по питанию и eeprom работает переключение режимов при помощи настенного 1-клавишного выключателя с фиксацией (обычный выключатель кароче, через каторый питается вся люстра).
 

tretyakov_sa

Moderator
Команда форума
Это мне было без разницы перезагружать модуль или нет поэтому я поставил ESP.restart();
Но, вы то можете вызвать
WIFIAP_Client();
Вы это пробовали сделать?
 

krepton85

Member
@tretyakov_sa, нет что то ваш скетч не переваривает arduino ide не собирается, ну да ладно фиг с ним, это похоже все таки прикол с пакетом v 2.2.2 для поддержки esp 8266 в ардуино ide, сейчас сделал сброс настроек ssid и пароль из eeprom, перезагрузился софтресетом ESP.reset(); и затем в void setap у меня прописан код, если нету в eeprom сохраненных ssid и пароль к роутеру, то запускать только точку доступа, что бы к ней подключится и с вэб страницы ввести новые ssid и пароль, все это сделал ребутнул, подключился к моему роутеру, и опа, а точка доступа та ни куда и не исчезла, однавременно вещает и точку доступа и клиентом работает, и это при том что в моем скетче воообще ни где нету режима WiFi.mode(WIFI_AP_STA), только либо то, либо то, но не вместе. :)))
 

tretyakov_sa

Moderator
Команда форума
@tretyakov_sa, нет что то ваш скетч не переваривает arduino ide не собирается, ну да ладно фиг с ним, это похоже все таки прикол с пакетом v 2.2.2 для поддержки esp 8266 в ардуино ide, сейчас сделал сброс настроек ssid и пароль из eeprom, перезагрузился софтресетом ESP.reset(); и затем в void setap у меня прописан код, если нету в eeprom сохраненных ssid и пароль к роутеру, то запускать только точку доступа, что бы к ней подключится и с вэб страницы ввести новые ssid и пароль, все это сделал ребутнул, подключился к моему роутеру, и опа, а точка доступа та ни куда и не исчезла, однавременно вещает и точку доступа и клиентом работает, и это при том что в моем скетче воообще ни где нету режима WiFi.mode(WIFI_AP_STA), только либо то, либо то, но не вместе. :)))
Для того чтоб все собиралось нужно выполнить одно условие. Путь к любому файлу для Arduino IDE должен быть без кириллицы.
По поводу вашего скетча не могу ничего сказать его нужно видеть для этого.
 

krepton85

Member
В общем поигрался с разными режимами сети, получил таки что хотел, но работает это довольно криво все. Если скажем изначально запустить режим только точка доступа, затем перейти в режим точка доступа + клиент, то клиент не каннектится уже вообще к роутару т.к. точка доступа была запущена на 1 радио канале и изменить канал уже ни как нельзя, даже вызвав WiFi.begin(ssid, pass, 3); - подключится на 3-ем канале, все равно через отладку WiFi.printDiag(Serial); видно что канал выбран 1 как и при запуске точки доступа.
Затем косяк следующий - при разрыве wi-fi подключения, пытается автоматически подключится к роутару, но каждая попытка меняет радиоканал и не только у wi-fi клиента но и у точки доступа esp8266, а на этой точке доступа запущен http сервер для настройки новых ssid & pass к роутару и поэтому вэб страница подтармаживает при загрузке или вовсе пишет браузер, что "не удалось установить связь с сервером".
Вобщем удачно ввести новый ssid и pass можно только сбросив текущие и перезагрузившись (повесил эту функцию на комбинацию клавишь A+C на радио-брелке), затем если не сохранены ssid и pass запускать режим только точка доступа.
 
Сверху Снизу