Самодельная беспроводная DMX512-система на ESP32: Art-Net приходит по Ethernet, передаётся по ESP-NOW через Wi-Fi 2.4 ГГц, на Slave преобразуется обратно в физический DMX512.
Собрана из доступных модулей ESP32, W5500 и TTL-RS485. Рассчитана на сценическое освещение, где нужно передать DMX без прокладки кабеля между компьютером и приборами.
Световое ПО (QLC+ / FreeStyler / MagicQ)
│ Art-Net, UDP 6454
▼
ESP32 MASTER + W5500
│ ESP-NOW, Wi-Fi 2.4 ГГц
├─────┬─────┐
▼ ▼ ▼
Slave Slave Slave
│
│ UART → TTL-RS485
▼
DMX512 → световые приборы
Master — принимает Art-Net по Ethernet, разбивает Universe на ESP-NOW-пакеты, рассылает их зарегистрированным Slave, следит за связью через PING/PONG.
Slave — принимает данные по ESP-NOW, регистрируется у Master, собирает DMX-фрейм и выдаёт его через RS-485 на XLR-3.
Подробности сборки: ArtNet-Master/README.md, ArtNet-Slave/README.md.
ArtNet-ESP-NOW/
├── ArtNet-Master/
│ ├── src/main.cpp
│ ├── docs/esp32_w5500_power.drawio.svg
│ └── README.md
├── ArtNet-Slave/
│ ├── src/main.cpp
│ ├── docs/esp32_rs485_dmx_slave.drawio.svg
│ ├── docs/ttl-rs485.jpg
│ └── README.md
└── README.md
ESP-NOW работает поверх Wi-Fi-радио ESP32 (не отдельный радиочип). Master и Slave должны быть на одном канале:
#define ESPNOW_BROADCAST_CHANNEL 1На спектроанализаторе сигнал выглядит как обычный Wi-Fi шириной ~20 МГц; максимальная мощность классического ESP32-WROOM — около 20 dBm (100 мВт), точное значение зависит от модуля и антенны.
2.4 ГГц чувствителен к положению устройства — иногда сдвиг на 10–15 см восстанавливает связь. Рекомендации:
- располагать выше пола, на столе или выше уровня оборудования;
- не прятать за металлическими конструкциями и не размещать антенну внутри металлического корпуса без учёта этого;
- на сцене учитывать большое количество металла вокруг.
Один Universe (512 байт) разбивается на 3 ESP-NOW-пакета: 200 + 200 + 112. Каждый пакет несёт тип, Universe, offset, длину, sequence и данные; sequence защищает от устаревших пакетов.
При потере ESP-NOW-связи Slave зажигает красный светодиод и продолжает выводить последний принятый DMX-кадр (last-known-good) — приборы не гаснут и не сбрасываются. После восстановления сигнала регистрация и синхронизация проходят автоматически, вручную ничего перезапускать не нужно. Опционально можно включить safety-blackout — гашение канала, если данных нет совсем долго (см. ArtNet-Slave/README.md).
RGB-светодиод на Master и Slave: красный — не зарегистрирован у Master; синий — зарегистрирован; короткая зеленая вспышка — пришли новые DMX-данные.
- Соберите Master (ESP32 + W5500) и Slave (ESP32 + TTL-RS485).
- На Slave подключите минимум
GPIO17 → TXD, питание, GND, A, B; A → XLR pin 3, B → XLR pin 2, GND → XLR pin 1. - Прошейте оба устройства, задайте Slave нужный Universe.
- Подключите Master к компьютеру Ethernet-кабелем напрямую.
- На компьютере задайте IP
2.0.0.2 / 255.0.0.0, проверьтеping 2.0.0.1. - В световом ПО укажите Art-Net destination
2.255.255.255, порт6454(broadcast) или прямой IP Master2.0.0.1. - Подключите DMX OUT Slave к прибору и проверьте передачу каналов.
- System ID в заголовке пакета — защита от коллизий с устройствами, имеющими такую же прошивку, но принадлежащими другой системе. Также открывает возможность масштабирования сети за счёт ретрансляции Slave → Master на другой частоте.
- TDMA — разделение эфирного времени по слотам/Universe. Нужна как защита от коллизий при росте числа Universe и Slave-устройств.
- Сканирование эфира и автовыбор наименее загруженного Wi-Fi-канала, синхронизация канала между Master и Slave — аналог QoS: при старте устройства проверяются наименее загруженные каналы и выбирается оптимальный.
- Передача только изменений с периодической полной ресинхронизацией — сейчас, если на приборах статичный цвет и DMX-кадр не меняется, а в этот момент подключается новый Slave, он остаётся без данных до следующего обновления кадра. Периодическая полная ресинхронизация решает эту проблему, а заодно даёт дополнительную защиту от потерянных пакетов при плохой радиообстановке.
Стандартные компоненты ESP32 Arduino Core: WiFi.h, esp_now.h, Ethernet/SPI (Master), Preferences.h, driver/uart.h (Slave).
MIT — используйте на свой страх и риск.