Raspberry Pi Ноль прерывистых пакетов датаграмм отбрасывает - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь использовать Raspberry Pi Zero (W) для управления роем esp8266, которые контролируют полосу ws2812.

Pi подключен к моему ноутбуку как гаджет (локальная сеть 10.42.0.139 / 24) через интерфейс usb0.Беспроводной интерфейс используется как точка доступа через hostapd.Esp8266 настроены на автоматическое подключение к точке доступа и получение адреса через DHCP.

esp8266 прослушивает UDP-порт 7777 и получает строку байтов, которая кодирует светодиодные цвета ws2812, которые, в свою очередь, выводятся черезDMA: https://github.com/cnlohr/esp8266ws2812i2s

Это работает безупречно, когда я пересылаю содержимое буфера в один esp.Тем не менее, я хочу контролировать рой esp8266, так рассуждающий, что отправка пакетов на широковещательный адрес будет синхронно запускать один и тот же шаблон для всех подключенных esp.приложение к широковещательному адресу сети, схема «заикание».Ясно, что некоторые пакеты отбрасываются или, по крайней мере, никогда не приходят.Если я подключу ноутбук к «роящей» сети, tcpdump на беспроводном интерфейсе показывает точно такой же прерывистый шаблон, который я наблюдаю на светодиодах esp8266, что приводит меня к выводу, что пакеты на самом деле никогда не покидают малину?Если бы они были отброшены в воздух из-за беспроводных помех, я ожидал бы увидеть разные схемы между ноутбуком и esp, и я также ожидал бы увидеть выпадения с использованием одноадресной передачи?

Некоторая информация об интерфейсах Pi:

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 16:01:c9:fa:e9:0b brd ff:ff:ff:ff:ff:ff
    inet 10.42.0.139/24 brd 10.42.0.255 scope global usb0
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:d2:ac:16 brd ff:ff:ff:ff:ff:ff
    inet 192.168.42.1/24 brd 192.168.42.255 scope global wlan0
       valid_lft forever preferred_lft foreve

Маршруты:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.42.0.1       0.0.0.0         UG    0      0        0 usb0
10.42.0.0       0.0.0.0         255.255.255.0   U     0      0        0 usb0
192.168.42.0    0.0.0.0         255.255.255.0   U     0      0        0 wlan0

(часть) кода, который я использую для отправки пакетов:

#!/usr/bin/python
import socket

#UDP_IP = "192.168.42.255"
UDP_IP = "192.168.42.10"
UDP_PORT = 7777

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.connect((UDP_IP, UDP_PORT))

bffr = <packet information>
s.send(bffr)

Я также попытался s.sendto(bffr,(UDP_IP, UDP_PORT)) без s.connect().Без разницы.

Код Python - это порт из примера кода C, который поставляется с библиотекой esp 2812 (https://github.com/cnlohr/esp8266ws2812i2s/tree/master/wsend), которая показывает точно такую ​​же проблему.

esp имеетадрес 192.168.42.10. Используемый широковещательный адрес - 192.168.42.255, потому что usb0 является интерфейсом шлюза по умолчанию, так что мешает 255.255.255.255. Я попытался добавить маршрут по умолчанию к интерфейсу wlan0, чтобы сделать 255.255.255.255 для перехода кИнтерфейс wlan0, но это не помогло. Кроме того, я ожидаю, что ни один из пакетов не прибудет, если что-то будет не так с конфигурацией сети?

Что может быть причиной именно потери широковещательных пакетов на Pi иболее важно, как я могу это исправить?

обновление: я думал, что (isc-) dhcp сервер может мешать, так как он также взаимодействует с широковещательными пакетами, но его выключение не улучшает ситуацию.

обновление 2: кажется, что wme_enabled = 1 в hostapd.conf очень помогает? Кто-нибудь может объяснить, почему это помогаетпакеты oadcast и почему транспорт ухудшился без?

...