ESP8266 UDP multicast не принимает пакеты
В настоящее время я работаю над ESP8266 с Arduino IDE. Я пытаюсь реализовать ESP8266 в режиме STA в качестве приемника многоадресной рассылки. Я писал свой код с помощью этой документации. Особенно следующая часть:
Класс WiFiUDP поддерживает отправку и прием многоадресных пакетов по интерфейсу STA. При отправке многоадресного пакета замените udp.beginPacket(addr, port) на udp.beginPacketMulticast(addr, port, WiFi.localIP()). При прослушивании многоадресных пакетов замените udp.begin(port) на udp.beginMulticast(WiFi.localIP(), multicast_ip_addr, port). Вы можете использовать udp.destinationIP (), чтобы определить, был ли полученный пакет отправлен на многоадресный или одноадресный адрес.
Отправка в группу многоадресной рассылки с помощью udp.beginPacketMulticast(addr, port, WiFi.localIP())
и udp.write(message, messageLength)
работает безупречно.
Принимающая часть моего кода выглядит следующим образом:
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#define BUFFER_LENGTH 256
const char* ssid = "xxxxxx";
const char* password = "xxxxxx";
WiFiUDP Udp;
IPAddress multicastAddress(226,1,1,1);
unsigned int multicastPort = 4096;
char incomingPacket[BUFFER_LENGTH];
void setup(){
WiFi.mode(WIFI_STA); //станция
WiFi.setOutputPower(0);
while (WiFi.status() != WL_CONNECTED)
{
WiFi.begin(ssid, password);
delay(500);
}
Udp.beginMulticast(WiFi.localIP(), multicastAddress, multicastPort);
}
void loop(){
int packetLength = Udp.parsePacket();
if(packetLength){
int len = Udp.read(incomingPacket, BUFFER_LENGTH);
if (len > 0){
incomingPacket[len] = 0;
Serial.printf("%s\n", incomingPacket);
}
}
}
При отправке пакета с помощью простого отправителя многоадресной рассылки (с соответствующим IP-адресом и портом) мой приемник многоадресной рассылки на ноутбуке Linux получает пакет, а ESP8266-нет.
Может быть, кто-то из вас испытал подобное поведение и способен дать мне какие-то подсказки, где я могу ошибаться.
Редактировать: С тех пор, как я задал этот вопрос, я полностью исключил ошибку отправителя на машине Linux, используя проверенного, 100% рабочего отправителя. ESP8266 по-прежнему не получает никаких многоадресных дейтаграмм.
@AronC, 👍3
Обсуждение1 ответ
Лучший ответ:
Недавно у меня была такая же проблема.
Однозначный ответ заключается в том, что существует оптимизация мощности (внутренняя по Espressif) для экономии энергии, я думаю, и это действительно создает хаос в многоадресном приеме UDP. Почему? Понятия не имею. Та же проблема с ESP32 и ESP8266.
Решение:
#include "user_interface.h"
а после:
WiFi.mode(WIFI_STA);
// нижеприведенные инструкции и теперь вы получите.
wifi_set_sleep_type(NONE_SLEEP_T); //LIGHT_SLEEP_T and MODE_SLEEP_T
Большое вам спасибо за ответ. Это действительно труднодоступное решение., @AronC
- ESP8266 Аналоговое чтение мешает Wi-Fi?
- Каково использование зарезервированных контактов и контактов SDD2, SDD3 NodeMCU?
- Управление реле 5В с помощью Wemos D1 R1
- Могу ли я использовать выход 3,3 В Arduino напрямую к esp8266?
- Достаточно ли 1 МБ флэш-памяти для загрузки OTA в ESP-01?
- Программный последовательный конфликт с Wi-Fi на ESP8266
- Веб-сервер ESP8266 недоступен через 2 минуты после сброса
- Не удается отправить UDP-пакеты с ESP8266 Wemos D1.
Находятся ли ноутбук и ESP8266 в одной сети? Если нет, то вам нужно настроить TTL для простого отправителя многоадресной рассылки. Значение по умолчанию-1., @jogco
да, они оба находятся на моем домашнем Wi-Fi, @AronC
это все еще не работает, и обходной путь выше не помогает. См. также https://www.esp8266.com/viewtopic.php?f=8&t=15467, @Nikolay