ESP32(DOIT DevKit)如何通过mDNS在同一LAN中找到另一个主机?

时间:2019-02-10 22:58:47

标签: esp8266 arduino-esp8266 esp32 mdns

我有一个连接到我的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东西都应该可以工作
  • https://github.com/espressif/arduino-esp32/blob/master/libraries/ESPmDNS/src/ESPmDNS.h#L98处检查有关此“服务”和“原型”的信息并不多,而我对底层C / C ++不太了解,这些是什么?

这是我正在使用的代码:

mqtt

此功能受此示例启发:

https://github.com/espressif/arduino-esp32/blob/master/libraries/ESPmDNS/examples/mDNS-SD_Extended/mDNS-SD_Extended.ino

1 个答案:

答案 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();
}