• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

В сетевом окружении не отображается плата с SSDP

Доброго времени суток. Пробую освоить такую штуку как SSDP. Вроде бы и библиотека стандартная с есп8266 поставляется. Остается только свои данные роутера прописать. На компе (виндоус 10) включил обнаружение по сети. Но все равно в сетевом окружении плата не видна. Хотя айпи получает, по нем можно зайти на плату. По имени нельзя.
 
С 586 строки. Все видно и работает. Откорректируйте под себя.
Что-то не получается. Может я и не прав, но вроде как нужно доустанавливать вашу библиотеку ESPAsyncWebServer. Ставлю её, начинает ругаться то, что нет такой директории, то ещё на какие-то строки в библиотеке.
Если же компилировать без вашей библиотеки, то ругается в первую очередь на
Код:
AsyncWebServerRequest' has not been declared
   44 |     HTTP.on("/description.xml", HTTP_GET, [](AsyncWebServerRequest *request)
Если попробовать и это подчистить, то единственный вариант, который хоть как-то срабатывает - это:
Код:
    Serial.printf("Starting SSDP...\n");
    SSDP.setSchemaURL("description.xml");
    SSDP.setDeviceType("upnp:rootdevice");

//    HTTP.on("/description.xml", HTTP_GET, [](AsyncWebServerRequest *request)
                 {
        String ssdpSend = "<root xmlns=\"urn:schemas-upnp-org:device-1-0\">";
        String ssdpHeader = xmlNode("major", "1");
        ssdpHeader += xmlNode("minor", "0");
        ssdpHeader = xmlNode("specVersion", ssdpHeader);
        ssdpHeader += xmlNode("URLBase", "http://" + String(IP));
        String ssdpDescription = xmlNode("deviceType", "upnp:rootdevice");
        ssdpDescription += xmlNode("friendlyName", "EEE8266");
        ssdpDescription += xmlNode("presentationURL", "/");
        ssdpDescription += xmlNode("serialNumber", "0000000" + String(random(1000)));
        ssdpDescription += xmlNode("modelName", "ESP-NOW gateway");
        ssdpDescription += xmlNode("modelNumber", "firmware");
        ssdpDescription += xmlNode("modelURL", "https://github.com/aZholtikov/ESP-NOW-Gateway");
        ssdpDescription += xmlNode("manufacturer", "Alexey Zholtikov");
        ssdpDescription += xmlNode("manufacturerURL", "https://github.com/aZholtikov");
        ssdpDescription += xmlNode("UDN", "DAA26FA3-D2D4-4072-BC7A-");
        ssdpDescription = xmlNode("device", ssdpDescription);
        ssdpHeader += ssdpDescription;
        ssdpSend += ssdpHeader;
        ssdpSend += "</root>";
//        request->send(200, "text/xml", ssdpSend);
};


        SSDP.begin();

    HTTP.begin();
При таком варианте после заливки на плату устройство в сети показывается, но нет ни имени, ни всяких ссылок. Неизвестное устройство.

И, кстати, если брать так сказать библиотечный вариант, тот, ч в стандартной поставке с ЕСП8266 идет:
Код:
    HTTP.on("/description.xml", HTTP_GET, []() {
      SSDP.schema(HTTP.client());
    });
    HTTP.begin();

    Serial.printf("Starting SSDP...\n");
    SSDP.setSchemaURL("description.xml");
    SSDP.setHTTPPort(80);
    SSDP.setName("Philips hue clone");
    SSDP.setSerialNumber("001788102201");
    SSDP.setURL("index.html");
    SSDP.setModelName("Philips hue bridge 2012");
    SSDP.setModelNumber("929000226503");
    SSDP.setModelURL("http://www.meethue.com");
    SSDP.setManufacturer("Royal Philips Electronics");
    SSDP.setManufacturerURL("http://www.philips.com");
    SSDP.begin();
То плата хоть в сет и не видится, но НОД32 в своем сетевом окружении её видит, по адресу "IP_платы/description.xml" заходит. Нод32 отключаю, но в сетевом окружении все равно не видно.
 

aZholtikov

Active member
Попробовал пример из библиотеки SSDP - все видно.
Ищите проблему на стороне ПК.
 

aZholtikov

Active member
А можете в пример из библиотеки свой код вставить? Млжет я что-то не так вставляю/переделываю. А ваш код хоть как-то видится. Вернее плата с ним хоть как-то определяется в сети.
Полный файл с кодом мне в личку плз. Пришлю или подтверждение или исправление.
 
Пример из моего кода полностью работоспособен. Пришлите свой (свою программу). Проверю.
Задержали. Только хотел отправить вам свой пример, решил его ещё раз залить, чтобы вспомнить какие ошибки были, чтоб вам комментарии подготовить. И он нормально заработал. Я то с того момента, как вы предположили, что возможно виноват ПК, компом и занимался. Кучу настроек перепробовал. Но все пробы были на учебном примере, ваш не трогал. Так что ваш тоже работает в таком виде:
Код:
    SSDP.setSchemaURL("description.xml");
    SSDP.setDeviceType("upnp:rootdevice");

    HTTP.on("/description.xml", HTTP_GET, []()
                 {
        String ssdpSend = "<root xmlns=\"urn:schemas-upnp-org:device-1-0\">";
        String ssdpHeader = xmlNode("major", "1");
        ssdpHeader += xmlNode("minor", "0");
        ssdpHeader = xmlNode("specVersion", ssdpHeader);
        ssdpHeader += xmlNode("URLBase", "http://" + WiFi.localIP().toString());
        String ssdpDescription = xmlNode("deviceType", "upnp:rootdevice");
        ssdpDescription += xmlNode("friendlyName", "ESP8266_SSDP_XML");
        ssdpDescription += xmlNode("presentationURL", "/");
        ssdpDescription += xmlNode("serialNumber", "0000000" + String(random(1000)));
        ssdpDescription += xmlNode("modelName", "ESP-NOW gateway");
        ssdpDescription += xmlNode("modelNumber", "firmware");
        ssdpDescription += xmlNode("modelURL", "https://github.com/aZholtikov/ESP-NOW-Gateway");
        ssdpDescription += xmlNode("manufacturer", "Alexey Zholtikov");
        ssdpDescription += xmlNode("manufacturerURL", "https://github.com/aZholtikov");
        ssdpDescription += xmlNode("UDN", "DAA26FA3-D2D4-4072-BC7A-");
        ssdpDescription = xmlNode("device", ssdpDescription);
        ssdpHeader += ssdpDescription;
        ssdpSend += ssdpHeader;
        ssdpSend += "</root>";
        HTTP.send(200, "text/xml", ssdpSend); });

        SSDP.begin();

    HTTP.begin();
 

CodeNameHawk

Moderator
Команда форума
Можете предположить,
В Винде не силен... Ибо Линуксоид...
Просто у него посылается в
Код:
 webServer.on("/description.xml", HTTP_GET, [](AsyncWebServerRequest *request)
                 {
        String ssdpSend = "<root xmlns=\"urn:schemas-upnp-org:device-1-0\">";
вы это возможно не скопировали.
 
Сверху Снизу