ESP8266 — Как получить многоадресный пакет UDP?

Как я могу получать многоадресные пакеты udp в ESP8266? У меня есть этот фрагмент кода:

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

const char* ssid = "my_wifi_ssid";
const char* password = "my_wifi_password";

WiFiUDP Udp;
unsigned int multicastPort = 5683;  // локальный порт для прослушивания
IPAddress multicastIP(224,0,1,187);

void setup(){
    Serial.begin(115200);
    Serial.println();

    Serial.printf("Connecting to %s ", ssid);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED)
    {
    delay(500);
    Serial.print(".");
    }
    Serial.println("connected");

    Udp.beginMulticast(WiFi.localIP(), multicastIP, multicastPort);
    Serial.printf("Now listening at IP %s and %s, UDP port %d\n", WiFi.localIP().toString().c_str(), multicastIP.toString().c_str(), multicastPort);
}


void loop(){
    int packetSize = Udp.parsePacket();
    if (packetSize){
    Serial.println("RECEIVED!");
    }
}

Я написал его в соответствии с этой документацией и это дополнение к добавлению многоадресной рассылки.
Он просто настроил сервер на прослушивание порта 5683.
Он печатает что-то вроде:
Теперь прослушиваем IP 192.168.1.6 и 224.0.1.187, порт UDP 5683
Но если я отправляю пакет UDP на 224.0.1.187:5683 (например, через приложение отправителя пакетов), он не печатает сообщение «ПОЛУЧЕНО!» (что должно быть, посмотрите в функции цикла). Почему ESP8266 ничего не получает? Странно то, что когда я отправляю пакет на 192.168.1.6:5683 (его локальный IP-адрес), он печатает это сообщение («ПОЛУЧЕНО!»).
Почему это работает только для локального сообщения, а не для мультикаста??

Спасибо за каждую помощь! :)

PS: этот совет мне не помог...

, 👍1


1 ответ


-1

Думаю, вам нужно позвонить

Udp.begin(multicastPort);

непосредственно перед звонком

Udp.beginMulticast(WiFi.localIP(), multicastIP, multicastPort);

По крайней мере, это помогло мне.

,