我有一个连接到我的Wifi局域网的Raspberry Pi,它以{this.props.data ? this.props.data.title : ''}
{this.props.data ? this.props.data.link: ''}
响应mDNS。
我可以使用以下命令在笔记本电脑上找到它:
mqtt-broker.local
我有一个ESP32 DOIT DevKit设备,如果使用IP地址$ avahi-resolve-host-name -4 mqtt-broker.local
mqtt-broker.local 192.168.XXX.YYY
,可以通过Wifi将消息发送到Raspberry Pi,但是我希望ESP32使用mDNS解析主机。
我无法使mDNS正常工作,底部的代码显示:
192.168.XXX.YYY
Finding the mDNS details...
No services found...
Done finding the mDNS details...
中将service
放在什么位置?我甚至在服务MDNS.queryService("mqtt-broker", "tcp")
都没有运气的情况下进行了尝试,但这无关紧要,无论Raspberry Pi暴露了什么(HTTP服务器,MQTT,FTP等等),mDNS东西都应该可以工作这是我正在使用的代码:
mqtt
此功能受此示例启发:
答案 0 :(得分:0)
最终使用与Espressif(ESPmDNS.h
)提供的mDNS库上的类不同的方法,该方法的组合为:
IPAddress serverIp = MDNS.queryHost(mDnsHost);
serverIp.toString() == "0.0.0.0"
上的while循环这是将所有内容粘合在一起的代码:
// on my laptop (Ubuntu) the equivalent command is: `avahi-resolve-host-name -4 mqtt-broker.local`
String findMDNS(String mDnsHost) {
// the input mDnsHost is e.g. "mqtt-broker" from "mqtt-broker.local"
Serial.println("Finding the mDNS details...");
// Need to make sure that we're connected to the wifi first
while (WiFi.status() != WL_CONNECTED) {
delay(250);
Serial.print(".");
}
if (!MDNS.begin("esp32whatever")) {
Serial.println("Error setting up MDNS responder!");
} else {
Serial.println("Finished intitializing the MDNS client...");
}
Serial.println("mDNS responder started");
IPAddress serverIp = MDNS.queryHost(mDnsHost);
while (serverIp.toString() == "0.0.0.0") {
Serial.println("Trying again to resolve mDNS");
delay(250);
serverIp = MDNS.queryHost(mDnsHost);
}
Serial.print("IP address of server: ");
Serial.println(serverIp.toString());
Serial.println("Done finding the mDNS details...");
return serverIp.toString();
}