diff --git a/esphome/components/mdns/__init__.py b/esphome/components/mdns/__init__.py index b5be153d5a..154e6b099f 100644 --- a/esphome/components/mdns/__init__.py +++ b/esphome/components/mdns/__init__.py @@ -36,6 +36,8 @@ async def to_code(config): cg.add_library("ESPmDNS", None) elif CORE.is_esp8266: cg.add_library("ESP8266mDNS", None) + elif CORE.is_rp2040: + cg.add_library("LEAmDNS", None) if config[CONF_DISABLED]: return diff --git a/esphome/components/mdns/mdns_component.h b/esphome/components/mdns/mdns_component.h index 45614d509a..dbf7482f1f 100644 --- a/esphome/components/mdns/mdns_component.h +++ b/esphome/components/mdns/mdns_component.h @@ -28,7 +28,7 @@ class MDNSComponent : public Component { void setup() override; void dump_config() override; -#if defined(USE_ESP8266) && defined(USE_ARDUINO) +#if (defined(USE_ESP8266) || defined(USE_RP2040)) && defined(USE_ARDUINO) void loop() override; #endif float get_setup_priority() const override { return setup_priority::AFTER_WIFI; } diff --git a/esphome/components/mdns/mdns_rp2040.cpp b/esphome/components/mdns/mdns_rp2040.cpp index b153ececcc..e443a78c48 100644 --- a/esphome/components/mdns/mdns_rp2040.cpp +++ b/esphome/components/mdns/mdns_rp2040.cpp @@ -5,6 +5,8 @@ #include "esphome/core/log.h" #include "mdns_component.h" +#include + namespace esphome { namespace mdns { @@ -12,28 +14,30 @@ void MDNSComponent::setup() { this->compile_records_(); network::IPAddress addr = network::get_ip_address(); - // MDNS.begin(this->hostname_.c_str(), (uint32_t) addr); + MDNS.begin(this->hostname_.c_str(), (uint32_t) addr); - // for (const auto &service : this->services_) { - // // Strip the leading underscore from the proto and service_type. While it is - // // part of the wire protocol to have an underscore, and for example ESP-IDF - // // expects the underscore to be there, the ESP8266 implementation always adds - // // the underscore itself. - // auto *proto = service.proto.c_str(); - // while (*proto == '_') { - // proto++; - // } - // auto *service_type = service.service_type.c_str(); - // while (*service_type == '_') { - // service_type++; - // } - // MDNS.addService(service_type, proto, service.port); - // for (const auto &record : service.txt_records) { - // MDNS.addServiceTxt(service_type, proto, record.key.c_str(), record.value.c_str()); - // } - // } + for (const auto &service : this->services_) { + // Strip the leading underscore from the proto and service_type. While it is + // part of the wire protocol to have an underscore, and for example ESP-IDF + // expects the underscore to be there, the ESP8266 implementation always adds + // the underscore itself. + auto *proto = service.proto.c_str(); + while (*proto == '_') { + proto++; + } + auto *service_type = service.service_type.c_str(); + while (*service_type == '_') { + service_type++; + } + MDNS.addService(service_type, proto, service.port); + for (const auto &record : service.txt_records) { + MDNS.addServiceTxt(service_type, proto, record.key.c_str(), record.value.c_str()); + } + } } +void MDNSComponent::loop() { MDNS.update(); } + } // namespace mdns } // namespace esphome