Могу ли я обойти очень долгое время, чтобы настроить 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. Похоже, это известная проблема. Поскольку этот метод является синхронным/блокирующим, мой скетч в это время полностью не реагирует ни на какие действия пользователя, такие как нажатия кнопок и т. д. Я пытаюсь создать доказательство концепции продукта коммерческого уровня. Поэтому недопустимо, чтобы он не реагировал на ввод данных пользователем в течение нескольких секунд.
Есть ли обходной путь? Есть ли асинхронная библиотека для достижения той же цели? Есть ли другой обходной путь? Как другие люди справляются с этой ситуацией?
@Saqib Ali, 👍0
Обсуждение3 ответа
Лучший ответ:
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
Для проверки концепции используйте два Arduino, один для WiFi и один для всего остального. Все остальное Arduino может поддерживать отзывчивость вашей системы (за исключением Wi-Fi, конечно, во время подключения) и периодически опрашивать WiFi Arduino (без блокировки), чтобы узнать, когда WiFi станет доступным.
Я думаю, что лучшим решением будет использовать 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
- Ошибка при загрузке кода в esp8266 через arduino (FatalError('Failed to connect to %s: %s' % (self.CHIP_NAME, last_error)))
- Строка JSON для Arduino WiFi версии 2
- Заставьте OTA работать с Arduino Uno Wifi
- Чтение SD-карты на ATMEGA328 с ESP826
- Параметры strcat выдают ошибки указателя в моем приложении tcp server/parser
- Как подключиться к Arduino с помощью WiFi?
- ESP8266 не подключается к Wi-Fi
- В чем разница между вариантами RF (wifi, xbee, NRF24L01)
ух ты! четыре секунды мучительно долго? ... я думаю, что, возможно, проблема, которую нужно исправить, не в ардуино ... потратьте четыре секунды, глядя в окно или на свою лучшую половину, @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