小程序使用udp广播获取esp8266的局域网ip地址

💡 原文中文,约1900字,阅读约需5分钟。
📝

内容提要

文章介绍了一种使用UDP广播获取ESP8266的IP地址的方法。ESP8266开启一个UDP服务器,设置固定端口,然后使用小程序发送UDP广播到指定IP和端口。ESP8266接收到广播消息后,将自己的IP地址发送给客户端。通过这种方法可以实现获取ESP8266的IP地址。

🔎

延伸解读

固定端口是必要代价

文章指出,使用UDP广播获取ESP8266的IP地址时,ESP8266必须监听一个固定端口(如1234)。这是因为广播消息需要发送到已知端口,ESP8266才能接收。虽然作者认为这“不碍事”,但在实际部署中,如果同一网络内有多个ESP8266设备,它们不能使用相同端口,否则会产生冲突。因此,固定端口方案更适合单设备或可协调端口分配的场景。

小程序端获取IP的两种方式

小程序收到ESP8266的回复后,可以通过两种方式获取IP地址:一是解析消息内容中的IP字符串,二是直接使用回调参数e.remoteInfo.address。后者更简洁,且ESP8266无需在回复中携带IP信息。但需注意,如果使用第二种方式,ESP8266的回复消息可以简化,仅作为触发信号。这为开发者提供了灵活性,可根据实际需求选择。

反向广播的可行性限制

作者曾尝试让ESP8266持续发送广播,手机只负责接收,但发现小程序似乎无法接收到广播消息。这可能是因为小程序的UDP socket默认不接收广播,或系统限制。因此,当前方案采用小程序主动广播、ESP8266单播回复的方式,更可靠。如果读者想尝试反向方案,需要自行验证小程序是否支持接收广播,并注意可能存在的平台差异。

❓

Q&A

如何用小程序获取ESP8266的局域网IP地址?

使用UDP广播:ESP8266开启UDP服务器并设置固定端口(如1234),小程序发送UDP广播到255.255.255.255:1234,ESP8266收到广播后将自己的IP地址回复给小程序。

ESP8266端需要做哪些设置才能响应广播?

ESP8266需要开启UDP服务器并绑定一个固定端口(例如1234),然后监听该端口。收到广播消息后,解析消息内容,若为'scanip',则通过UDP将自身IP地址发送给客户端。

小程序发送UDP广播时需要注意什么?

小程序需创建UDPSocket并绑定,发送广播时设置address为'255.255.255.255',port为ESP8266的固定端口(如1234),message为'scanip',并必须设置setBroadcast: true以启用广播。

除了从回复消息中提取IP,还有哪些方式可以获取ESP8266的IP?

还可以通过小程序收到消息时的e.remoteInfo.address直接获取ESP8266的IP地址,e.remoteInfo.port获取端口。这样ESP8266甚至不需要在回复中携带IP。

这种方法有什么限制或缺点?

唯一的限制是ESP8266的UDP服务器端口必须固定(如1234),不能动态变化。此外,如果尝试让ESP8266持续发送广播,小程序可能无法接收到广播消息。

能否让ESP8266主动广播IP,小程序只接收?

可以尝试,但文章指出小程序可能收不到ESP8266发送的广播消息。如果需要,可以反向编写代码,让ESP8266持续发送广播,但需自行测试可行性。

🏷️

标签

➡️

继续阅读