Wi-Fi соединение в цикле

Что я пытаюсь сделать, так это при локальном подключении к esp8266 и дать ему ssid и пароль, сохранить их в глобальной переменной и использовать их для запуска соединения внутри функции цикла с флагом, чтобы это произошло только один раз и пусть программа запускается, пока я проверяю, когда соединение установлено. Предвидите ли вы какие-либо проблемы с этим приложением?:

setup(){
    wifi.mode(WIFI_AP_STA);
    setup softAP
    server.on("/",handleroot)
    server.begin()
}
loop(){
    server.handleClient()
    if(credential_submited){
        Wifi.begin(credentials);
        flag_connection_started =true;
        credential_submited = false;
        flag_for_internet_server=true;
    }
    if(WiFi.status()==WL_CONNECTED && flag_for_internet_server==true){
        server.on("/",handleroot)
        server.begin()
        flag_for_internet_server=false;
    }

Я знаю, что есть также WifiManager, но я пытаюсь сделать это самостоятельно. Дело в том, что некоторые сети Wi-Fi требуют много времени для подключения. Точнее подключаются но потом esp не получает ip и отключается. Спасибо за ваше время

, 👍0

Обсуждение

ESP в точке доступа или в режиме станции? Вероятно, это возможно, но я не очень понимаю сценарий. Вы могли бы сделать это более понятным, по крайней мере, предоставив некоторый псевдокод, @Sim Son

Не вижу проблем там, так как это несколько стандартно. Вы пробовали что-нибудь?, @chrisl

Взгляните на https://github.com/tzapu/WiFiManager, он делает именно то, что вы хотите., @Dougie

@Dougie Я пытаюсь создать его самостоятельно, чтобы в основном учиться., @Panagiotis Nomikos


2 ответа


Лучший ответ:

0

WiFi.begin() в библиотеке ESP8266WiFi не дожидается завершения соединения, а немедленно возвращается.

Вы можете проверить, установлено ли соединение с сетью WiFi, используя WiFi.status(), как показано в большинстве примеров. И не обязательно ждать подключения в setup().

Кстати: вы можете использовать отдельный скетч для установки SSID и пароля в esp8266, а затем во всех других скетчах не использовать WiFi.begin(), а только дождаться завершения подключения к сети WiFi.

,

Не могли бы вы подробнее остановиться на отдельной части скетча. Вы имеете в виду, что я могу загрузить два скетча на eps и запустить один за раз, а когда один будет готов, запустить вторую программу?, @Panagiotis Nomikos

нет. вы запускаете скетч конфигурации, и esp8266 запоминает ssid и пароль. любой другой скетч, загруженный после этого, будет использовать эти настройки. esp8266 автоматически подключится, даже если вы загрузите Blink, @Juraj


-1

Это не имеет большого значения...

Вы можете легко изменить это, самый простой способ - использовать EEPROM для достижения этого..

Просто передайте SSID и ПАРОЛЬ новой сети в ESP8266 и сохраните их в EEPROM, а также создайте новую переменную в eeprom, в которой будет храниться статус ввода новых сетевых учетных данных, проверка в цикле, а затем извлечение новых сетевых учетных данных. из EEPROM и попробуйте подключиться к нему...

Вы также можете проверить и подключиться к нужной сети из петли...

В качестве альтернативы вы можете использовать библиотеку, которая поможет вам в этом [WiFiManager]: https://github.com/tzapu/WiFiManager.

,

ESP8266 не имеет EEPROM, но автоматически сохраняет SSID и пароль во флэш-памяти, если вы не отключите эту функцию. это то, что использует WiFiManager, @Juraj