CCat
Member
ну а теперь когда вы это знаете. познакомтесь с неприятной особенностью
На самом деле, с этим все хорошо - я не собираюсь использовать режим softAP - исключительно Station.
Спасибо еще раз!
ну а теперь когда вы это знаете. познакомтесь с неприятной особенностью
if (connectWifi == "y") { //выполняется при старте Ардуины исходящей от нее командой, но думал оставить возможность дать команду снова, если не получаю нужной строки какое-то время
WiFi.mode(WIFI_STA); //только клиент
if (String(ssid) != WiFi.SSID() || String(password) != WiFi.psk()) {
WiFi.begin(ssid, password);
} else {
WiFi.begin();
}
if (WiFi.getAutoConnect() != true) WiFi.setAutoConnect(true);
WiFi.setAutoReconnect(true);
.....
WiFi.mode(WIFI_STA); //только клиент
WiFi.enableSTA(true);
А я всё-таки посоветовал бы конструкции типа "... = true" и "... != true" не использовать.(WiFi.getAutoConnect() != true)
люди перестают задумываться, что явное указание вызова оператора сравнения для объектов определенного типа хоть что либо значит, и продолжают использовать вызов оператора сравнения для целочисленного значения не только для логических типов, но и для указателей, после попыток использовать такую практику на других языках программирования таких как .net или java, приходит разочарование "Почему же я на си использовал if (some_ptr) и работало, а сейчас на .net ругается???".(!WiFi.getAutoConnect())
короче, понятнее, логичнее
Вынужден признать - насчет экономии кода - погорячился. Похоже компилятор достаточно "умный", чтобы эти ситуации разрешать.а можно пруф или упоминание в доках в студию, что после трансляции !WiFi.getAutoConnect() кроче WiFi.getAutoConnect() = ! true
спасибо
enjoynering, После таких советов
люди перестают задумываться, что явное указание вызова оператора сравнения для объектов определенного типа хоть что либо значит, и продолжают использовать вызов оператора сравнения для целочисленного значения не только для логических типов, но и для указателей, после попыток использовать такую практику на других языках программирования таких как .net или java, приходит разочарование "Почему же я на си использовал if (some_ptr) и работало, а сейчас на .net ругается???".
Спасибо за столько полезной информации!если убрать WiFi.begin(); но оставить WiFi.setAutoConnect(true); то модуль подключиться. надеюсь я ответил на ваш вопрос.
Это не так, посмотрите исходники, сначала выполняется проверка переданных параметров ssid и password (ssid не нулевой и длина не более 31, password не более 64), затем выполняется подготовка нового конфига, чтение текущего и сравнение с новым, если они не совпадают только после этого выполняется запись новых параметров.каждый раз когда вызываете WiFi.begin(ssid, password); ардуино презаписывает назание точки доступа и пароль. в итоге через год, два таких манипуляций у вас на флешке будет дырка.
setAutoConnect всего лишь вызывает wifi_station_set_auto_connect.если убрать WiFi.begin(); но оставить WiFi.setAutoConnect(true); то модуль подключиться. надеюсь я ответил на ваш вопрос.
Это не я, это Вы сами дали мне ссылку на исходники,Если все как вы сказали
а я просто прочитал и только
Напомню, если кому интересно :Это не так, посмотрите исходники, сначала выполняется проверка переданных параметров ssid и password (ssid не нулевой и длина не более 31, password не более 64), затем выполняется подготовка нового конфига, чтение текущего и сравнение с новым, если они не совпадают только после этого выполняется запись новых параметров.
setAutoConnect всего лишь вызывает wifi_station_set_auto_connect.
Смотрим Колбана, wifi_station_set_auto_connect говорит wifi драйверу что нужно соединятся с последней точкой доступа при загрузке, если выполнять wifi_station_set_auto_connect при инициализации (во время user_init, но это не Ваш случай) то настройки будут сразу применены, если вызывать из другого места, настройки будут применены на следующем перезапуске.
У меня Kolban's Book on ESP8266 редакция от октября 2015
struct station_config current_conf;
wifi_station_get_config(¤t_conf);
if(sta_config_equal(current_conf, conf)) {
DEBUGV("sta config unchanged");
}
if (WiFi.SSID() != stationConfig.ssid || WiFi.psk() != stationConfig.password)
{
WiFi.begin(stationConfig.ssid, stationConfig.password);
}
проверка переданных параметров ssid и password (ssid не нулевой и длина не более 31, password не более 64), затем выполняется подготовка нового конфига,
Что всего этого не надо и выкидываешь кучу мусора и дублей, откапывая нужные функции SDK и вызывая их напрямуючем больше читаешь о всем том, что выполняется фоном, тем больше думаешь