Официальный сайт компании Arduino по адресу arduino.cc
точка доступа для выбора и подключения к wi-fi
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вс, 26/05/2019 - 22:05
привет, народ, есть у кого-то пример кода для ESP32 or ESP8266, который создает точку доступа для выбора и подключения к wifi, а затем, подключившись к wifi запоминает пароль и используя это подключение создает web server?
заранее спасибо!
в гугле примеров тыщщщи, забанили ?
буду благодарен хотябы за один...
при поиске по запросу "arduino точка доступа для выбора и подключения к wi-fi" нихрена путнего не находит
Я так понимаю, что вам нужно:
а) Создать на базе ESP точку доступа с вебмордой.
б) Подключиться к вебморде и в ней выбрать WiFi-сеть для подключения (ввести пароль и все прочие настройки).
в) Переподключить ESP в режим клиента, подключенного к выбранной сети и запустить вебсервер.
Все эти вещи есть в стандартных примерах ESP. Вам нужно только собрать это все в кучу. Готовую программу вы вряд ли найдете.
FoxJone, спасибо за совет.
точку доступа создал, в предложеном Вами алгоритме после перезагрузки надо будет опять искать сеть и вводить пароль, а затем переключаться или пароль бвудет сохранен?
Я вот использую эту. https://github.com/tzapu/WiFiManager
FoxJone, спасибо за совет.
точку доступа создал, в предложеном Вами алгоритме после перезагрузки надо будет опять искать сеть и вводить пароль, а затем переключаться или пароль бвудет сохранен?
После настройки клиента пишите настройки (сеть, пароль и флаг того, что клиент настроен) в постоянную память (например, в EEPROM, или к примеру на SD-карту, если такая есть в конструкции) и при загрузке читайте их оттуда.
Мужики, спасибо за подсказки в каком направлении двигаться, к сожалению готовые решения не помогли - это часть огромного проэкта и попытка внедрить тот же вифи-менеджер приводила к неработоспособности кода сервера и телеграмм-бота, поэтому написал костыльный, но рабочий подход. В eeprom выделяется место 40 байт под хранение двух пар: ssid и пароль, при запуске ЕСПхи пробуются имеющиеся пароли - если не удается подключиться, то создается точка доступа с простой формой - только для вводи имени сети и пароля. дальше проблемка))) в терминале вижу строку с введенными ИД и паролем:
но не пойму как она выводится (в коде нет такго сериал-принтлайна), как это вывести в скетче, где это выводится в библеотеке тоже пока не нашел - поиск по слову в документе "Referer: " в папке с библитоеками ничего не находит, да и не придумал как разбить на аргументы, юзать регулярные выражения или есть более простой способ?.
в планах:
- добавить сканер доступных сетей, чтобы не вводить название, а выбирать.
- возможно отимизировать место в памяти, а не выделять по 10 символов на каждый пароль и ssid
Пример сканера сетей есть уже с библиотеками к платам
Чем вам не нравиться выделять по 10 байт под Логин пароль? Там памяти дофига
Работа с get и post запросами в esp8266 и esp32s немного отличается и библиотеки разные, но общий смысл одинаков- берём входящую строку и парсим её на нужные куски и вытаскиваем данные из нее
С ESP32 не работал, ничего не могу сказать, а у ESP8266 море памяти и нормальная скорость, вполне себе может поддержать нормальный веб-интерфейс. Я на коленке собирал простенькую вебморду и успешно продал девайсину с ней клиенту - клиент очень был доволен тем, что управлять можно с любого устройства лишь бы был браузер. И это при том, что в html вообще играл чуть ли не первый раз в жизни. Не понимаю, зачем использовать GET-запросы м вообще все эти танцы с адресной строкой браузера.
С другой стороны, НАСТОЙЧИВО НЕ РЕКОМЕНДУЮ (сам обжегся очень) вешать на ESP8266 какие то другие задачи, кроме WiFi, web-сервера и вебинтерфейса. Ну максимум что то простенькое, типа кнопки или датчика температуры. Иначе, ой сколько вам открытий чудных готовит парадоксов друг....
добавил сканер, сделал парсинг строки, но после ее записи (строка write_wifi_password ( String(SSID_s), String(password_s)); // ТАК НЕ РАБОТАЕТ - ВИСНЕТ) и попытке обращения к этой ячейке - происходит перезагрузка еспэхи... чтобы вернуть есп к жизни приходится заплнять память нулями...
хел плиз...
полный код:
странно как то... зачем закомментирована // server.handleClient(); ? в ESP32, да она не нужна, а тут работать не будет, потом еще и цикл бесконечный - конечно будет зависать.
Посмотретие пример из поставки HTTP сервер, там все просто и прозрачно.
Куски из моего проекта:
- так у меня как раз ESP32, та строка не нужна
- потом еще и цикл бесконечный - конечно будет зависать. - там нет бесконечных циклов... оно не зависает, а перезагружается после записи в память распарсеной строки, до сохранения все отлично работает...
у Вас пример для ESP8266? потому что у меня библиотека #include <WiFi.h> не поддерживает .hasArg ...
пример для esp32s
сами странички
всем спасибо! все получилось :)
andycat, спасибо, добавил еще выпадающее меню с перечнем доступных сетей
добавил еще выпадающее меню с перечнем доступных сетей
вот просто из любопытства: в наше время с почти халявным и качественным 4G интернетом еще кому то нужны незапароленные WiFi сети?
вот просто из любопытства: в наше время с почти халявным и качественным 4G интернетом еще кому то нужны незапароленные WiFi сети?
А как же. Надзорным органам очень нужны!
За предоставление анонимного доступа в интернет с любого юрика можно очень красиво штрафов сорвать.
Именно поэтому все общественные вайфаи требуют авторизацию через телефон. Либо пароль предоставляется конкретному лицу (к примеру, жильцу в гостинице).
Вы использовали ESP32? Все работает? Я просто ищу нечто похожее для своего проекта. Есть ли баги при использовании?
если длина ssid и пароля более 10 символов видимо багам быть
Да, так у меня и получилось. Придется писать свой код. А если заказать, то почем выйдет?
если точки подключения и пароли известны, то лучше делать по другому
Ну так дело в том что вначале должна точка доступа с предустановленным именем и паролем. А после человек должен сам выбрать свою сеть и подключиться к ней. Ограничение по длине имени и паролю - осуждаю )))
если длина ssid и пароля более 10 символов видимо багам быть
Не подскажете, где в этом коде я могу исправить сие недоразумение?
Помоему стандартные ограничения на длину имени точки доступа и пароля 128 символов. Сканинг сетей на тему имен точек доступа с ESP32 на стандартных ардуиновских библиотеках работает через раз. Нужно спускаться на более низкий уровень. На первый взгляд простое задание, по факту окажется больше того кода который вы уже имеете :) Раза в три :)))
Не подскажете, где в этом коде я могу исправить сие недоразумение?
Серьезно ?! Начните с 6 строки :)
Ну а отчего же не серьезно? )) Был бы профи, то стал бы я сидеть на форуме? Я только начинаю, и для меня пока что все в диковинку.
У Arduino-EPS-шек всё немного покороче, чем 128 chars
ESP32 core:
ESP8266 Core:
Ребят, помогите запустить код, пожалуйста. Ну хотя бы сделать возможность ввода пароля длиной 20-30 символов.
Я этими костылями не пользуюсь :) Если уж делать то по "ГОСТУ" :)
Ого, по ГОСТу это как?
Это я так стандарты назвал.
На самом деле ошибся я. Садман прав, респект. Длинна SSID максимум 32 символа, длинна пароля до 64 символов.
Это я так стандарты назвал.
На самом деле ошибся я. Садман прав, респект. Длинна SSID максимум 32 символа, длинна пароля до 64 символов.
Тогда тем более интересно, почему ТС счел целесообразным остановиться именно на такой длине пароля?
От балды, память пожалел. Не всем приходит в голову посмотреть стандарты. Но в шестой строке , на самом деле описана переменная которая сохраняет всего 20 имен сетей, причем их длина не ограничена.
потому, что 9 символов в пароле, это минимум, когда включается шифрование, иначе точка открыта
От балды, память пожалел. Не всем приходит в голову посмотреть стандарты. Но в шестой строке , на самом деле описана переменная которая сохраняет всего 20 имен сетей, причем их длина не ограничена.
Стало еще непонятней и одновременно непонятно. Значит длина имен сетей практически неограничена, на кой хрен нужно 20 имен сетей, хотя за глаза хватило бы и 6-7 по убыванию мощности. А вот на пароль длины пожалел (( крыса ...
потому, что 9 символов в пароле, это минимум, когда включается шифрование, иначе точка открыта
Запомнил )) Спасибо.
Ну почему же, у меня бывает что требуемая сеть находится где нибудь на 30м месте. Кроме того этот код не ранжирует сети по RSSI.Так что для того что бы вывести на экран десяток самых "громких" нужно отсортировать весь список.
Я не знаю какие косяки вылезают в этом коде, но самое главное не забывать, что из-за того, что ESP имеют единый радиоканал для точки доступа и клиента, на время сканирования эфира на тему других точек доступа, она сама перестает быть точкой доступа, а это влечет отсоединение остальных клиентов от сети.
Поэтому вы хотите иметь список доступных сетей на страничке сформированной ESPшкой как http-сервером и одновременно точкой доступа. То есть вы должны так написать веб интерфейс и организовать сканирование, что бы клиенты вашей ESP как точки доступа не сваливали во время отключения.
Ну почему же, у меня бывает что требуемая сеть находится где нибудь на 30м месте. Кроме того этот код не ранжирует сети по RSSI.Так что для того что бы вывести на экран десяток самых "громких" нужно отсортировать весь список.
Я не знаю какие косяки вылезают в этом коде, но самое главное не забывать, что из-за того, что ESP имеют единый радиоканал для точки доступа и клиента, на время сканирования эфира на тему других точек доступа, она сама перестает быть точкой доступа, а это влечет отсоединение остальных клиентов от сети.
Поэтому вы хотите иметь список доступных сетей на страничке сформированной ESPшкой как http-сервером и одновременно точкой доступа. То есть вы должны так написать веб интерфейс и организовать сканирование, что бы клиенты вашей ESP как точки доступа не сваливали во время отключения.
Умно, нужно поглядеть пример из Factory test там есть скан сетей, и помоему они ранжируются. Попозже выложу этот скетч.
Хорошая тема. Подпишусь. В этом году планирую вшить подобный функционал в свой зоопарк устройств. Пока работает только быстрое переключение сценариев: работа - дом/дача - мобильный. К неизвестным сетям не умеют подключаться
Ну почему же, у меня бывает что требуемая сеть находится где нибудь на 30м месте. Кроме того этот код не ранжирует сети по RSSI.Так что для того что бы вывести на экран десяток самых "громких" нужно отсортировать весь список.
Я не знаю какие косяки вылезают в этом коде, но самое главное не забывать, что из-за того, что ESP имеют единый радиоканал для точки доступа и клиента, на время сканирования эфира на тему других точек доступа, она сама перестает быть точкой доступа, а это влечет отсоединение остальных клиентов от сети.
Поэтому вы хотите иметь список доступных сетей на страничке сформированной ESPшкой как http-сервером и одновременно точкой доступа. То есть вы должны так написать веб интерфейс и организовать сканирование, что бы клиенты вашей ESP как точки доступа не сваливали во время отключения.
надо посмотреть, если проверяю подключенных клиентов к первичной AP, то таки да, а сканирование точек безобрывное вроде )))
Хочу поделиться опытом. Полчаса назад нашел библиотеку tzapu/WiFiManager https://github.com/tzapu/WiFiManager.git но обязательно билд Developer. С ее помощью помощью можно к примеру создать точку доступа при подключении к которой можно выбрать из списка сетей искомую и введя ее пароль подключиться к ней. При этом точка доступа отключается (по крайней мере ее не видно в телефоне) и при необходимости нажав на кнопку на модуле инициировать ее вновь чтобы выбрать другую вай фай сеть. Код короткий, работает стабильно )) Замучал я его уже ...
Какой же он короткий !? Вы в файл wifimanager.cpp заглядывали ? Там всего ТРИ ТЫСЯЧИ строк кода.
Какой же он короткий !? Вы в файл wifimanager.cpp заглядывали ? Там всего ТРИ ТЫСЯЧИ строк кода.
Это я про тот что в скетче ))
С таким подходом могу написать код из двух строк и восьми букв.