我有一个树莓Pi连接到我的Wifi局域网,响应mDNS作为mqtt-broker.local
。
我可以通过以下命令在我的笔记本上找到它:
$ avahi-resolve-host-name -4 mqtt-broker.local
mqtt-broker.local 192.168.XXX.YYY
我有一个ESP32 DOIT DevKit设备,如果我使用IP地址192.168.XXX.YYY
,它可以通过Wifi向Raspberry发送消息,但是我希望使用mDNS来解析主机。
我无法让mDNS工作,底层的代码打印如下:
Finding the mDNS details...
No services found...
Done finding the mDNS details...
service
在MDNS.queryService("mqtt-broker", "tcp")
中?我尝试过,即使服务mqtt
没有运气,但这不重要,mDNS的东西应该工作,无论什么是从Raspberry Pi (HTTP服务器,MQTT,FTP什么.)这是我正在使用的代码:
// import the headers
#include <ESPmDNS.h>
void findMyPi() {
Serial.println("Finding the mDNS details...");
// make sure we are connected to the Wifi
while (WiFi.status() != WL_CONNECTED) {
delay(250);
Serial.println("Not yet connected to Wifi...");
}
if (!MDNS.begin("whatever_this_could_be_anything")) {
Serial.println("Error setting up MDNS responder!");
}
// what should I put in here as "service"?
int n = MDNS.queryService("mqtt-broker", "tcp");
if (n == 0) {
Serial.println("No services found...");
}
else {
for (int i = 0; i < n; ++i) {
// Print details for each service found
Serial.print(" ");
Serial.print(i + 1);
Serial.print(": ");
Serial.print(MDNS.hostname(i)); // "mqtt-broker" ??? How can I find it???
Serial.print(" (");
Serial.print(MDNS.IP(i));
Serial.print(":");
Serial.print(MDNS.port(i));
Serial.println(")");
}
}
Serial.println("Done finding the mDNS details...");
}
这个函数是从这个例子中得到启发的:
发布于 2019-02-11 22:30:06
最后使用的方法与Espressif ( mDNS )提供的类中的类不同,Espressif (ESPmDNS.h
)是以下的组合:
IPAddress serverIp = MDNS.queryHost(mDnsHost);
serverIp.toString() == "0.0.0.0"
上循环这是将所有代码粘合在一起的代码:
// 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();
}
https://stackoverflow.com/questions/54621991
复制相似问题