Могу ли я обойти очень долгое время, чтобы настроить WIFI-соединение WPA2 Personal?

Я использую библиотеку Arduino Wifi Nina для подключения Arduino Uno Wifi Rev2 к Wi-Fi, а затем с помощью Библиотека HTTP-клиента Arduino для совершения HTTP-вызовов в Интернет.

Чтобы подключить Arduino к моей домашней сети Wi-Fi (WPA2 Personal), я использую метод WiFi.begin(). Этот метод занимает мучительно долгие 4 секунды для подключения к Wi-Fi. Похоже, это известная проблема. Поскольку этот метод является синхронным/блокирующим, мой скетч в это время полностью не реагирует ни на какие действия пользователя, такие как нажатия кнопок и т. д. Я пытаюсь создать доказательство концепции продукта коммерческого уровня. Поэтому недопустимо, чтобы он не реагировал на ввод данных пользователем в течение нескольких секунд.

Есть ли обходной путь? Есть ли асинхронная библиотека для достижения той же цели? Есть ли другой обходной путь? Как другие люди справляются с этой ситуацией?

, 👍0

Обсуждение

ух ты! четыре секунды мучительно долго? ... я думаю, что, возможно, проблема, которую нужно исправить, не в ардуино ... потратьте четыре секунды, глядя в окно или на свою лучшую половину, @jsotola

используйте WiFi.setTimeout(), @Juraj

Я не думаю, что WiFi.begin занимает четыре секунды, не так ли? Мне кажется, что у вас есть цикл, ожидающий WiFi.status==WL_CONNECTED, который занимает четыре секунды. Я только что проверил на своем NodeMCU, и WiFi.begin() обычно завершается всего за 5 миллисекунд., @S. Imp

@ S.Imp, да 5 мс, потому что он уже подключен как «постоянное соединение», @Juraj

@Juraj Моя функция WiFiInit вызывает WiFi.persistent(false) в качестве своей первой операции. WiFi.begin занимает всего около 5 мс каждый раз, когда я его вызываю (на NodeMCU) и возвращает WF_DISCONNECTED, если Wi-Fi не подключен. Вы должны периодически опрашивать, чтобы убедиться, что он подключен, прежде чем пытаться его использовать. В любом случае, это займет около 4 секунд, прежде чем он наконец соединится, но, по крайней мере, начало не блокируется все время., @S. Imp

@ S.Imp, но это на esp8266 или esp32, а не на Uno WiFi Rev.2 с библиотекой WiFiNINA., @Juraj


3 ответа


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

2

4 даже 5 секунд нормально для подключения к WiFi. Сколько времени требуется вашему телефону или другим устройствам для подключения?

Вы можете подключиться немного быстрее со статическим IP-адресом.

EDIT: с библиотекой WiFiNINA для Uno WiFi Rev.2 вы можете изменить время ожидания соединения с помощью WiFi.setTimeout (). По умолчанию 5 секунд. WiFi.begin() может заканчиваться WL_CONNECT_FAILED, но если вы позже проверите состояние соединения, оно в конечном итоге будет установлено.


С помощью esp8266 или esp32 вы можете сделать соединение постоянным, и оно будет создано сразу после загрузки и асинхронно. Библиотека WiFiNINA пока не делает этого возможным. В некоторых будущих версиях будет предлагаться настройка WiFi.

,

То есть если я перейду с WifiNINA на esp8266, то смогу ли я подключиться к вайфаю асинхронно?, @Saqib Ali

@SaqibAli, да. но обычно setup() работает намного быстрее, чем устанавливается соединение, поэтому даже тогда скетч обычно ждет несколько секунд, если требуется наличие сети в конце setup(). вы можете подключиться немного быстрее со статическим IP-адресом, @Juraj


1

Для проверки концепции используйте два Arduino, один для WiFi и один для всего остального. Все остальное Arduino может поддерживать отзывчивость вашей системы (за исключением Wi-Fi, конечно, во время подключения) и периодически опрашивать WiFi Arduino (без блокировки), чтобы узнать, когда WiFi станет доступным.

,

0

Я думаю, что лучшим решением будет использовать WiFi-модуль ESP8266 и при необходимости подключить другой Arduino через контакты GPIO ESP8266.

Это видео будет полезно, https://www.youtube.com/watch?v=dWM4p_KaTHY

,

лучше тогда что?, @Juraj

Без использования встроенного модуля Wi-Fi., @Vinod Amarathunga

так вы говорите, что лучше использовать внешний модуль esp8266, чем встроенный esp32? в чем разница?, @Juraj

На самом деле ESP 32 является улучшением ESP 8266, но я смог использовать ESP 8266 с Arduino легче, чем ESP32 и ESP 8266, имея много тем сообщества., @Vinod Amarathunga