Android Studio(Java) 本地WiFi网络下如何通过主机名获取NodeMCU的IP?
技术解决方案
完全可以通过你设置的NodeMCU主机名获取其局域网IP,常用的落地方案有两种,都不需要终端用户手动输入IP:
方案1:基于mDNS(多播DNS)实现
这是最省事的标准化方案,ESP8266/ESP32系列的NodeMCU都原生支持:
- NodeMCU端直接调用官方的
ESP8266mDNS库(ESP32对应ESPmDNS库),初始化时填入你自定义的主机名即可。比如你设置主机名为home-nodemcu,最终可被解析的mDNS域名为home-nodemcu.local - 参考NodeMCU端代码(ESP8266示例):
#include <ESP8266WiFi.h> #include <ESP8266mDNS.h> const char* wifiSsid = "你的WiFi名称"; const char* wifiPwd = "你的WiFi密码"; const char* DEVICE_HOSTNAME = "home-nodemcu"; // 自定义主机名 void setup() { WiFi.begin(wifiSsid, wifiPwd); while (WiFi.status() != WL_CONNECTED) { delay(100); } // 启动mDNS服务 if (!MDNS.begin(DEVICE_HOSTNAME)) { Serial.println("mDNS服务启动失败"); while(1) { delay(1000); } } // 可选:注册你的WebSocket服务端口,方便安卓端直接识别服务 MDNS.addService("ws", "tcp", 8080); } void loop() { MDNS.update(); // 其余业务逻辑 }
- Android端实现:安卓12及以上系统原生支持mDNS解析,直接调用系统
NsdManager类即可扫描到对应设备、解析home-nodemcu.local拿到IP;低版本安卓可以引入第三方mDNS解析库完成解析,全程对用户无感知。
方案2:UDP广播扫描实现
如果你需要兼容所有安卓版本、不想依赖mDNS服务,可以用自定义广播逻辑实现:
- NodeMCU端监听指定UDP端口,收到安卓端发的广播探测包后,返回自身IP和设备标识
- 安卓端向局域网广播地址
255.255.255.255的指定端口发送探测包,收到NodeMCU的响应包即可提取到IP - 优势是兼容性极强、不受系统限制,缺点是需要自己定义简单的通信协议,开发量略高于mDNS方案。
注意事项
- 两种方案都要求安卓设备和NodeMCU在同一局域网网段,跨VLAN的场景下多播、广播会被路由器拦截,无法正常发现设备
- 主机名建议只用小写字母、数字和连字符,不要用特殊字符、中文,避免不同系统解析出现兼容问题。
内容的提问来源于stack exchange,提问作者Rupava Baruah
相关产品推荐
相关产品推荐

