Android 如何查找连接到路由器的所有esp8266

Android 如何查找连接到路由器的所有esp8266,android,networking,arduino,android-wifi,esp8266,Android,Networking,Arduino,Android Wifi,Esp8266,大家好,我想将多个esp8266设备连接到我的路由器,并创建一个移动应用程序,可以找到这些设备并使用udp向它们发送消息。 目前我的计划是让esp设备监听端口,然后我的应用程序将在该端口上发送消息,esp将响应,应用程序将存储IP 有没有更好的办法? 我的一位朋友告诉我,如果路由器的网关发生变化,这种方法将失败。这是真的吗 我正在呼叫WiFi.begin(Ssid,密码);在不使用wifi.conf()进行任何更改的情况下连接到wifi 我正在使用arduino SDK。一种方法是检查网络上的所

大家好,我想将多个esp8266设备连接到我的路由器,并创建一个移动应用程序,可以找到这些设备并使用udp向它们发送消息。 目前我的计划是让esp设备监听端口,然后我的应用程序将在该端口上发送消息,esp将响应,应用程序将存储IP

有没有更好的办法? 我的一位朋友告诉我,如果路由器的网关发生变化,这种方法将失败。这是真的吗

我正在呼叫WiFi.begin(Ssid,密码);在不使用wifi.conf()进行任何更改的情况下连接到wifi


我正在使用arduino SDK。

一种方法是检查网络上的所有Mac地址。前6位数字是wifi加密狗制造商的唯一代码

这是假设网络上没有任何其他设备使用相同的加密狗,也不是您要搜索的

通过在每个IP上执行ARP请求,可以找到网络上的所有Mac地址

但所有设备都必须位于同一子网上


如果你的设备是远程的,那么我会按照你原来的计划去做,但是你的朋友是正确的,如果网关发生变化,这将需要一些更健壮的东西。将动态DNS服务与域名一起使用。如果您的网关地址发生更改,动态DNS将几乎实时更新您的DNS记录

您的朋友可能有您解决方案的更多详细信息,但我认为网关与此无关。如果所有客户端和服务器都位于路由器本地网络内的同一子网中,则网关不起作用


我会做一个UDP多播。您的移动应用程序只需发送一个请求,然后监听ESP的回复几秒钟。

为您的ESP8266设备提供一个静态IP地址,以便移动应用程序提前知道可以在哪里找到它们:

ipAddressIP(192168,1,xx);//所需的静态IP地址
IP地址网关(192168,1,yy);//路由器的IP地址
IP地址子网(255255,0);
WiFi.begin(ssid,密码);
WiFi.config(ip、网关、子网);
while(WiFi.status()!=WL_已连接){
延迟(500);
连续打印(“.”);
}
并使用动态DNS服务(除非您有静态IP地址)和端口转发来访问每个ESP。您可以选择端口8266、8267、8268、8269等。。。或1024以上的任何其他端口,然后在路由器设置中设置端口转发,以便端口8266将转发到第一个ESP的IP地址和端口80(或任何其他端口),端口8267将转发到第二个ESP的IP地址和端口80等


之后,您可以使用类似
URL的URL从移动应用程序(或互联网)访问ESPhttp://xx.xx.xx.xx:8266
http://xx.xx.xx.xx:8267
http://xx.xx.xx.xx:8268
http://xx.xx.xx.xx:8269
。。。或者通过使用动态DNS服务:
http://myhome.something.com:8266
http://myhome.something.com:8267
等,或者您可以通过已知的静态IP地址从本地网络访问它们。也就是说,您的移动应用程序必须确定它是否位于本地网络内。或者您可以始终使用代理访问ESP-在这种情况下,URL将不依赖于本地网络的内部或外部。

移动应用程序将位于网络内部还是internet外部?@leetibbett移动应用程序将位于网络内部。是否可以从windows pc发送多播数据包?我在windows 10上安装了bojour打印机。但我不知道如何继续验证我的设备是否响应多播请求。Bonjour是mDNS,它可以帮助您按名称查找内容。在Android上,您可以在不知道esp的IP/主机名的情况下如何进行此操作?有关多播的更多信息,请访问