无法从 Android 应用程序向 ESP8266 网络服务器发出请求

问题描述

所以我有一个 ESP 设备连接到我的 WiFi 网络。它运行一个网络服务器,现在我想从我的 android 应用程序向这个网络服务器发出请求。所以我尝试了一些东西,但没有一个让我满意。

我尝试过的东西,为什么不适合我。


设置 mDNS:
无法使用它,因为 android 并没有真正执行 mDNS,它在查找中失败。

设置静态 IP:
如果更改路由器的网关,此方法将失败。 (至少我是这么认为的)。
(任何人都可以详细说明这个 ^。AFAIK 如果你想创建一个静态 IP,你需要将给定的网关与路由器的网关相匹配,所以如果我为我的路由器配置了 esp 板,它可能无法与其他人的路由器一起使用。)

设置 WebSocket 连接:
要做到这一点,还需要再次是 IP 的主机名。

用户询问 IP:
由于这将是一个产品,我不能要求用户在移动应用程序中提供 IP 地址。导致用户体验不足。


我仍然希望应该有另一种我不知道的处理这种情况的方法。我真的很想完成这件事,我需要你们帮助我。

解决方法

听起来你把这里的东西复杂化了。

步骤 1. 将 esp 板连接到您的 wifi(我猜您已经想通了) 步骤 2. 检查你的板子连接的局域网地址,因为这通常只是使用

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

步骤 3. 在端口 80 启动您的 wifiserver

WiFiServer(80);

第 4 步。在您的 android 应用程序或任何其他平台(我建议在计算机中使用浏览器,同时简单地测试它是否有效)中输入 url:local_ip_address_that_you_got_above/mygetrequest?value1=1

步骤 5. 侦听传入的客户端并拦截您将在标头中以“GET /mygetrequest?value1=1”的方式接收的 get 值

步骤 6. 完成 :)

如果您想跳过从头开始实现所有这些的过程,您可以在以下位置获得我的示例服务器的完整源代码:https://spacerival.com/lounge/2614/arduino-server 但我强烈建议您自己实现它而不是只需复制粘贴该源代码,因为公平地说,您根本不会学到太多

,

所以在尝试了一整天之后,我想出了一个解决方案。这是一种解决方法,因为我迷路了。所以我所做的是我创建了一个带有返回 LocalIP 的小型 Web 服务器的软 AP。所以我的 esp 现在同时在 AP 和 STA 模式下工作。

它的工作原理很简单

  1. ESP 与一个带有 /getLocalIP 端点的小型网络服务器一起运行。
  2. ESP 打开一个 SoftAP 供用户连接。用户与 软AP。
  3. 系统会要求用户输入所需的凭据 无线网络。
  4. 连接到所需的 WiFi 移动应用程序后将请求一个 192.168.4.1/getLocalIP(AP 的 IP 地址)。
  5. 由于 ESP 已连接到 WiFi,此端点会将 WiFi.localIP() 发送到应用。
  6. 所以现在该应用程序具有 LocalIP。