使用 ESP8266 自动检测本地服务器

Autodetect local server with ESP8266

我有一个 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 网络了……)。

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

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