Не удалось выполнить запросы к веб-серверу ESP8266 из приложения для Android.

Итак, у меня есть устройство ESP, которое подключено к моей сети WiFi. Он запускает веб-сервер, и теперь я хочу делать запросы к этому веб-серверу из своего приложения для Android. Итак, я попробовал несколько вещей, и ни одна из них не была удовлетворена.

Что я пробовал и почему не подходит для меня.


Настройка mDNS:
Невозможно использовать, так как Android на самом деле не поддерживает mDNS, поиск не выполняется.

Установка статического IP-адреса.
Этот подход не работает, если шлюз маршрутизатора изменен. (по крайней мере, я так считаю).
(Может ли кто-нибудь уточнить этот вопрос ^. Если вы хотите создать статический IP-адрес, вам нужно сопоставить данный шлюз со шлюзом вашего маршрутизатора. Итак, если я настроил плату esp для своего маршрутизатора , он может не работать с чужим маршрутизатором.)

Настройка соединения WebSocket:
Для этого также необходимо имя хоста, которое снова является IP.

Запрос IP-адреса у пользователя:
Поскольку это будет продукт, я не могу попросить пользователя предоставить IP-адрес в мобильном приложении. Это приводит к отсутствию пользовательского опыта.


Я все еще надеюсь, что должен быть другой способ обработки этого случая, о котором я не знаю. Я на самом деле умираю, чтобы сделать это, и мне нужно, чтобы вы, ребята, помогли мне с этим.


person Charitha Goonewardena    schedule 19.01.2021    source источник
comment
Поскольку это не будет продуктом, возможно, вам следует нанять консультанта, который разбирается в сетях.   -  person romkey    schedule 19.01.2021
comment
Возможно, этот ответ по Arduino поможет.   -  person ocrdu    schedule 19.01.2021
comment
Я думаю, что смогу сделать это, используя одновременно режим AP и режим sta. Я постараюсь найти решение. Должен быть лучший способ справиться с этим.   -  person Charitha Goonewardena    schedule 19.01.2021


Ответы (2)


Похоже, вы слишком усложняете вещи здесь.

Шаг 1. Подключите плату esp к вашему Wi-Fi (я думаю, вы поняли это) Шаг 2. Проверьте, к какому адресу локальной сети подключена ваша плата, для этого обычно просто используйте

    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());

Шаг 3. Запустите свой Wi-Fi-сервер на порту 80

WiFiServer(80);

шаг 4. в вашем приложении для Android или на любой другой платформе (я рекомендую использовать браузер на компьютере, просто проверяя, работает он или нет) введите URL: local_ip_address_that_you_got_above/mygetrequest?value1=1

шаг 5. Прислушивайтесь к входящим клиентам и перехватывайте полученное значение, которое вы получите в заголовке в виде GET /mygetrequest?value1=1

шаг 6. сделано :)

Если вы хотите пропустить процесс реализации всего этого с нуля, вы можете получить полный исходный код моего примера сервера, описанного выше, по адресу: https://spacerival.com/lounge/2614/arduino-server, но я настоятельно рекомендую вам реализовать его самостоятельно, а не просто копировать и вставлять исходный код, так как вы не узнаете много всего, чтобы быть справедливым

person CoffeDev    schedule 19.01.2021
comment
это будет потребительский продукт, у которого нет последовательных мониторов для печати чего-либо! Продукт, который является автономным, как лампа настроения. - person Charitha Goonewardena; 19.01.2021
comment
В данном случае это не имеет значения, последовательные мониторы используются только на этапе отладки, как только вы загрузите свой код на плату esp, вы все равно не увидите журналы последовательного монитора. Лично я всегда рекомендую использовать одну плату esp только для отладки, а затем, когда вы почувствуете, что с кодом все в порядке, сохраните весь код и загрузите этот код на все рабочие платы esp. - person CoffeDev; 19.01.2021
comment
@CharithaGoonewardena, если вы имеете в виду, что потребитель вашего продукта не сможет узнать, какой у него локальный IP-адрес, это всегда будет его обязанностью, вам просто нужно принять это. Таким образом, у вас действительно есть только один вариант: вы создадите веб-сайт, и ваша доска esp будет общаться только с вашим веб-сайтом. Приложение для Android будет взаимодействовать только с вашим сайтом. тогда ваш ВЕБ-САЙТ будет обрабатывать управление платой esp, тогда пользователю никогда не нужно будет ничего настраивать или вообще нужен какой-либо локальный IP-адрес - person CoffeDev; 19.01.2021
comment
Поскольку веб-сайт представляет собой статический IP-адрес, который никогда не меняется, вы можете предварительно настроить приложение Android для отправки сообщения GET, подобного этому www.example.com/?myprivateespboard1=id&turnlampon=true, на своем веб-сайте вы сохраните этот запрос. Затем в доске esp каждые 30 секунд вы можете просто получать данные с вашего веб-сайта, чтобы проверить, были ли отправлены какие-либо команды... к сожалению, нет другого способа сделать это, если вы хотите, чтобы клиент получил хороший опыт. Мой личный выбор состоял бы в том, чтобы использовать локальные IP-адреса, позволить клиенту выяснить свой локальный IP-адрес и ввести его один раз в вашем приложении для Android, идеально. - person CoffeDev; 19.01.2021
comment
Спасибо за ваши предложения, но это больше похоже на обходной путь. Должен быть какой-то другой способ справиться с этим. Я точно уверен. - person Charitha Goonewardena; 19.01.2021

Итак, пробуя весь день, я нашел решение. Это немного обходной путь, поскольку я был потерян. Итак, что я сделал, так это создал мягкую точку доступа с небольшим веб-сервером, который возвращает LocalIP. Так что мой esp сейчас работает как в режиме AP, так и в режиме STA.

Как это работает просто

  1. ESP работает с небольшим веб-сервером с конечной точкой /getLocalIP.
  2. ESP открывает SoftAP для подключения пользователя. Пользователь подключается к SoftAP.
  3. Пользователю будет предложено ввести учетные данные для желаемого WiFi.
  4. После подключения к нужному Wi-Fi мобильное приложение запросит 192.168.4.1/getLocalIP (IP-адрес точки доступа).
  5. Поскольку ESP уже подключен к WiFi, эта конечная точка отправит приложению WiFi.localIP().
  6. Итак, теперь у приложения есть LocalIP.
person Charitha Goonewardena    schedule 20.01.2021
comment
Другим решением было бы иметь соединение WebSocket с мобильным клиентом. Таким образом, будет установлено соединение между SoftAP IP и мобильным приложением. - person Charitha Goonewardena; 22.01.2021