【问题标题】:Autodetect local server with ESP8266使用 ESP8266 自动检测本地服务器
【发布时间】:2016-03-10 12:51:25
【问题描述】:

我有一个 ESP8266 模块(特别是 Cactus Micro r2),它能够连接到本地网络,然后通过 HTTP 协议与我的本地服务器通信。但是,我必须提供我的服务器的网络 SSID、密码和 IP 地址。

ESP 模块是否可以使用特定的标头向整个网络发送 HTTP 广播?然后,识别头部的服务器会响应,从而自动检测到它的IP地址?如果不使用 HTTP,是否可以使用 UDP 实现?客户端和服务器之间是否存在通信模式来发现彼此?

到目前为止,我发明的唯一解决方案(或者更确切地说是一种变通方法)是遍历本地子网的整个地址范围(通常是 192.168.1.1-192.168.1.254)并尝试启动通信。但是,这非常慢(如果服务器的 IP 地址在范围的上半部分)。另外,它不适用于 10.0.0.0 网络(更不用说纯 IPv6 网络...)。

【问题讨论】:

  • 您需要一个 DNS 服务器来解析名称 -> IP 地址。当然,服务器需要在 DNS 上注册。您当然可以作弊并保留“最后已知地址”的记录,然后下次从该地址开始。但 DNS 是“正确”的解决方案。
  • 那更糟 :D 是否有,至少,获得所有使用的 IP 地址的选项?类似于 Windows 命令提示符中的“arp -a”命令?这将显着减少迭代 IP 地址的数量...
  • arp -a 只跟踪与您的机器(或您的机器已与)通信的 IP/mac 地址。如果它不“知道”服务器,那么它可能也没有与之交谈。
  • 可以,但是可以通过广播ping(或者通过192.168.1.255 ping整个本地网络)来填充其他机器的列表...那么,可以模拟这样的系统吗?跨度>
  • 嗯,这或多或少是一回事,不是吗。您要解决的实际问题是什么?这个问题已经通过发明 DNS 解决了,所以你显然是在尝试用不同的方式来解决这个问题,这通常意味着“你做错了”。

标签: c++ networking lua arduino esp8266


【解决方案1】:

如果您希望您的 esp 在任何专用网络中找到一个专用服务器,而不需要 DNS 和其他设置,这可以是一个答案:

  1. 在服务器端,实现 udp 广播。这会在一些时间间隔(例如 2 秒)之间广播自身的连接信息。这就像 wifi 信标(或蓝牙广告)。
  2. 在 esp 端 esp 必须知道 ssid。然后连接到网络。开始监听特定消息的广播端口。
  3. 收到消息后,解析并验证(验证等),然后从消息中获取参数,显示服务器。
  4. 最后使用参数与服务器通信,关闭广播监听。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    相关资源
    最近更新 更多