Почему Arduino Nano 33 IoT всегда выбирает самый слабый WiFi BSSID?
У меня есть Arduino Nano 33 IoT, настроенный для подключения к моей сети Wi-Fi с помощью довольно простого кода:
#include <WiFiNINA.h>
int status = WL_IDLE_STATUS;
status = WiFi.status();
while (status != WL_CONNECTED) {
status = WiFi.begin(ssid, pass);
if (status == WL_CONNECTED) break;
delay(5000);
}
Моя проблема заключается в том, что в среде с несколькими точками доступа, использующими один и тот же SSID (среда роуминга), мой Arduino постоянно подключается к самой слабой из точек доступа.
Я проверил с помощью WiFi Explorer на своем ноутбуке, что несколько точек доступа находятся в пределах досягаемости в том же месте, где находится Arduino, и по какой-то причине мой Arduino решает подключиться к базовой станции с окончанием BSSD :CA:81. , который, как это ни парадоксально, самый слабый:
Есть ли способ решить эту проблему?
@adamsfamily, 👍3
Обсуждение1 ответ
Лучший ответ:
В Nano 33 IoT сетевой адаптер Wi-Fi представляет собой модуль NINA esp32 с nina-fw от Arduino. nina-fw написан с использованием платформы ESP-IDF производителем esp32 Espressif.
Для подключения к точке доступа ESP-IDF имеет функция конфигурации, которая принимает структуру с настройками. Одна из настроек — wifi_scan_method, и nina-fw использует WIFI_FAST_SCAN. Альтернативой является WIFI_ALL_CHANNEL_SCAN.
WIFI_FAST_SCAN Выполнить быстрое сканирование, сканирование завершится после того, как будет найдено совпадение SSID с точкой доступа
Для этого нет простого решения. Я не знаю, почему они изменили настройки. Если он должен быть настраиваемым, то прошивка и библиотека WiFiNINA должны быть изменены для его поддержки.
Или вы можете получить исходники прошивки, изменить настройку, собрать прошивку (это не тривиально) и прошить ее в NINA на вашем Nano.
Это ОЧЕНЬ хорошая подсказка, но я думаю, что мы должны дополнить этот ответ рабочим кодом. Согласно журналу изменений (https://github.com/arduino/nina-fw/blob/master/CHANGELOG), библиотека WiFiNINA
изменила поведение по умолчанию с WIFI_ALL_CHANNEL_SCAN на WIFI_FAST_SCAN между версиями v1.2.1 и v1.2.2 в 2018. Они также добавили setScanMethod
в версии 2.0.0 (в 2021 году), к сожалению, эта версия еще не доступна в диспетчере пакетов Arduino. Я не могу найти конкретную документацию Arduino для вызова esp_wifi_set_config
на основе вашего ответа. Думаю, я могу перейти на 1.2.0..., @adamsfamily
@adamsfamily, setScanMethod был добавлен в библиотеку esp32 Arduino WiFi, которая не имеет ничего общего с Nano 33 IoT., @Juraj
Хорошо, но как настроить WIFI_ALL_CHANNEL_SCAN с библиотекой Arduino? Я не могу вызвать esp_wifi_set_config
, так как среда разработки Arduino жалуется, что функция не существует :( Должен ли я создать форк библиотеки Arduino WiFiNINA и выполнить полное сканирование жесткого кода? Я очень удивлен, что это поведение по умолчанию, потому что подключение к самые сильные базовые станции являются ключевыми в средах WiFi, особенно в IoT Я удивлен, что ни у кого нет такой же проблемы?, @adamsfamily
@adamsfamily esp_wifi_set_config
используется в прошивке, работающей в модуле NINA, а не в библиотеке WiFiNINA, которая используется в основном микроконтроллере SAMD., @Juraj
Хорошо, позвольте мне переформулировать свой вопрос :-) Видите ли вы какое-либо возможное решение для Arduino Nano 33 IoT?, @adamsfamily
@adamsfamily, нет простого решения. Я не знаю, почему изменили настройку. если он должен быть настраиваемым, то для его поддержки необходимо изменить прошивку и библиотеку WiFiNINA. Или вы можете получить исходники прошивки, изменить настройки, собрать прошивку (не просто) и прошить ее в NINA на вашем Nano (легко), @Juraj
Понятно. В этом случае ваш ответ должен быть принятым ответом. Могу ли я предложить отредактировать его так, чтобы он гласил: «Причина: <текущий ответ> Решение: нет простого решения, потому что <ваш последний комментарий>»? Я думаю, это поможет другим. Кстати, я очень-очень удивлен, что никто не жаловался на это, выбирая самую сильную точку доступа в среде с несколькими точками доступа, где они используют один и тот же SSID..., @adamsfamily
@ да, я добавил это к ответу. Я построил модифицированные версии nina-fw. В линуксе проще., @Juraj
Спасибо, я принял ответ. Я попытаюсь сообщить об этом команде разработчиков Arduino, потому что я думаю, что это действительно важно., @adamsfamily
- Сломалась антенна Arduino nano IoT
- Можно ли загрузить частный корневой сертификат в Arduino Nano33?
- Arduino Nano IoT 33 Ограничения размера массива символов
- Как подключиться к Arduino с помощью WiFi?
- ESP8266 не подключается к Wi-Fi
- В чем разница между вариантами RF (wifi, xbee, NRF24L01)
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Можно ли отключить WiFi на ESP8266?
Из вашего списка вы можете выбрать только первые два, поскольку я думаю, что NINA - это только модуль ab/g/n. Но не уверен, почему он не подключается к: 58: E2, если у него тот же SSID., @Dan Sheppard
Что происходит, когда вы устанавливаете вторую точку доступа в списке на канал 11?, @ocrdu
@ocrdu К сожалению, изменение канала на 11 и сброс Arduino не помогли :(, @adamsfamily
@DanSheppard Да, именно так., @adamsfamily