Почему Arduino Nano 33 IoT всегда выбирает самый слабый WiFi BSSID?

wifi arduino-nano-33-iot

У меня есть 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. , который, как это ни парадоксально, самый слабый:

Проводник WiFi

Есть ли способ решить эту проблему?

, 👍3

Обсуждение

Из вашего списка вы можете выбрать только первые два, поскольку я думаю, что NINA - это только модуль ab/g/n. Но не уверен, почему он не подключается к: 58: E2, если у него тот же SSID., @Dan Sheppard

Что происходит, когда вы устанавливаете вторую точку доступа в списке на канал 11?, @ocrdu

@ocrdu К сожалению, изменение канала на 11 и сброс Arduino не помогли :(, @adamsfamily

@DanSheppard Да, именно так., @adamsfamily


1 ответ


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

5

В 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