-
-
Notifications
You must be signed in to change notification settings - Fork 1
Синхронизация устройств
- Общие понятия
- Внешние эффекты Jinx!
- Настройка синхронизации
- Технические аспекты
- Возможные проблемы
- Настройка "Jinx!" как источника эффектов.
Прошивка поддерживает синхронизацию эффектов между устройствами. Может быть создано до 10 групп устройств. Количество устройств в группе - не ограничено. Все синхронизированные устройства должны находиться в одной локальной сети. Маршрутизатор должен обеспечивать корректную передачу многоадресных UDP пакетов в локальной сети - режим multicast. Настройку передачи multicast-пакетов в вашем роутере смотрите в документации на роутер.
Устройства, объединенные в группу должны содержать одно главное устройство - источник (MASTER), остальные устройства группы являются ведомыми и должны быть настроены для работы в режиме приемник (SLAVE).
Прошивка поддерживает до 10 групп устройств - "Группа 0" .. "Группа 9", устройства в каждой группе работают синхронно, группы независимы.
Каждое устройство может быть настроено в Web-приложении для работы в одном из трех режимов:
- Автономный режим - устройство отключено от синхронизации, работает самостоятельно.
- Источник (мастер) - задает синхронизацию ведомым устройствам. Ведомые устройства воспроизводят те же эффекты, которые в настоящий момент отображаются на устройстве - источнике. Группа должна содержать не более одного устройства-источника.
- Приемник (ведомый) - принимает данные от главного устройства группы, повторяет эффекты, которые в настоящий момент отображает источник - мастер. Количество устройств-приемников в группе не ограничено.
Для корректной работы устройств в группе источник и приемник должны быть настроены на одинаковые уровни синхронизации.
Существуют три уровня синхронизации устройств:
- Физическая синхронизация
- Логическая синхронизация
- Синхронизация на уровне команд
Физический уровень синхронизации является самым быстрым, поскольку полученные от источника пакеты данных не требуют дополнительной обработки и передаются "как есть" на матрицу устройства приемника. Этот режим синхронизации рекомендуется для устройств с большими матрицами, так как требуют минимальное время на обработку принятых данных.
Работа на физическом уровне синхронизации накладывает следующие ограничения на устройства группы:
- Матрицы всех устройств группы должны иметь одинаковый размер - высоту и ширину.
- Угол подключения матрицы и направление следования цепочки диодов из угла подключения должны быть одинаковым для всех устройств группы
Несоблюдение этих требований нарушит отображение эффектов - картинка будет искажена/рассинхронизирована. Максимальное количество диодов в матрице для этого режима - 2040. Для увеличения количества диодов (для слишком больших матриц) требуется корректировка кода в скетче.
Физический уровень синхронизации устройств обеспечивает абсолютную синхронизацию устройств. Эффекты на всех устройствах группы будут выглядеть абсолютно синхронно, поскольку устройство-мастер передает устройствам-приемникам "картинку" со своей матрицы.
Логический уровень синхронизации определяет отображение картинки эффекта с позиции (X,Y) = (0,0) - левый верхний угол картинки, направление следования "пикселей" картинки - слева направо по X, затем сверху вниз по Y. Логический уровень синхронизации требует дополнительных затрат на обработку пакетов принятых от мастера, зато нивелирует требование одинаковости угла подключения и направления из угла матрицы для устройств в группе.
Для полноэкранной синхронизации размеры матрицы (высота и ширина) должны быть такими же как на устройстве - источнике. В этом случае приемник отображает полностью идентичную и синхронную приемнику картинку.
Кроме полноэкранной синхронизации логический уровень позволяет создавать распределенные матрицы - когда источник - мастер формирует полный виртуальный кадр изображения, физически выводя на матрицу лишь часть изображения кадра, остальные части виртуального кадра отправляются отдельным приемникам, каждый из которых может выводить свою часть из полного кадра.
Пример использования режима "распределенной матрицы" - создание цельной широкой гирлянды на окнах квартиры, когда затруднительно тянуть провода (особенно сигнальные) соединяющие сегменты матрицы, размещенные на окнах в соседних комнатах, а тем более - на разных этажах дома в соседних (сбоку / снизу / сверху) квартирах. Необходимое условие - все управляющие микроконтроллеры должны находиться в одной локальной сети.
Максимальное количество диодов в матрице для этого режима - 2040. Для увеличения количества диодов (для слишком больших матриц) требуется корректировка кода в скетче.
Логический уровень синхронизации устройств обеспечивает абсолютную синхронизацию устройств. Эффекты на всех устройствах группы будут выглядеть абсолютно синхронно, поскольку устройство-мастер передает устройствам-приемникам "картинку" со своей матрицы.
Командный уровень синхронизации хорошо работает для устройств группы, если размеры их матриц, угол подключения и направление цепочки светодиодов из угла не совпадают. Этот режим не позволяет добиться абсолютной синхронизации устройств, поскольку от ведущего устройства к приемникам передается не "картинка" эффекта, а команды - "включить эффект N", "установить яркость в значение X", "отобразить бегущую строку с текстом xxx" и подобные.
Часть эффектов имеют свои "подрежимы" - например эффект "радуга" имеет разновидности "Вертикальная", "Горизонтальная", "Диагональная", "Вращающаяся", "Случайный выбор". Эффекты "Анимация" или "SD-карта" - набор различных анимаций и роликов в качестве "подрежимов". Устройство приемник, получив от главного устройства команду "Включить эффект N" включит сам эффект, но "подрежимы" включенного эффекта совпадать не будут. Особенности технической реализации командного режима не позволяют синхронизировать варианты эффектов на всех устройствах группы.
Одним из вариантов синхронизации устройств в группе является внешняя синхронизация. В этом режиме в группе нет устройства-источника, все устройства настроены на работу в режиме "приемник" (SLAVE). В качестве источника эффектов для отображения на всех устройствах группы используется одна из программ управления световым оборудованием и создания эффектов, поддерживающих протокол SACN E1.31 (DMX-512 over Ethernet) - "Jinx!, "Glediator", "Wixen lights", "XLights" и подобные.
Настройка внешнего источника синхронизации на примере программы управления световым оборудованием "Jinx!" описана в этой статье.
Задание роли для конкретного устройства производится в Web-приложении в разделе "Настройка", "Группы". Откройте Web-интерфейс устройства в браузере и перейдите к настройкам.
Выберите нужный режим работы устройства - "Автономный", "Источник" или "Приемник".
При выборе режима "Источник" или "Приемник" станут доступными опции настройки режима синхронизации. Выберите нужный.
Установите в комбобоксе группу синхронизации. Этот параметр должен совпадать для всех устройств группы.
Сохраните настройки - нажмите кнопку "Применить". Устройство перейдет в работу в соответствующем настройкам режиме.
Выполните описанные действия для всех устройств группы. Если мастер-устройство доступно в сети...
- В режиме синхронизации физический и логический картинка с матрицы ведущего устройства (источника) станет незамедлительно отображаться на устройствах, работающих в режиме приемника. После отключения мастера, когда данные потока синхронизации перестанут поступать к приемникам, они перейдут в автономный режим после двухсекундной паузы (в это время они ожидают продолжения поступления данных от мастера).
- В режиме синхронизации команды устройства приемники получат команду и выполнят синхронизацию в момент смены эффекта на мастер-устройстве. В случае отключения мастер-устройства (переключение его в автономный режим или выключении питания) устройства приемники продолжат воспроизведение последнего полученного эффекта. Если в настройках приемника задан таймаут перехода из установленного режима к автоматическому перебору эффектов, демо-режим включится автоматически по истечении указанного таймаута.
В техническом плане синхронизация устройств основана на протоколе управлением световым оборудованием E1.31 (SACN DMX-512 over Ethernet), разработанным компанией ESTA. Спецификация протокола описана в этом документе. Передача данных от источнику к приемнику в данном проекте осуществляется путем отправки многоадресных (multicast) пакетов по протоколу UDP, содержащих данные синхронизации - части картинки с матрицы Мастер-устройства или команды управления.
По спецификации DMX-512 пакет данных управления цифровым оборудованием содержит 512 байт (каналов) управляющей информации. Применительно к матрице, это означает, что в одном пакете могут быть переданы RGB цвета 170 диодов матрицы. Каждый цвет содержит компоненты RGB, занимающие по одному байту. Таким образом, данные пакета позволяют разместить RGB-цвета для 512 / 3 = 170 светодиодов. Размер полезной загрузки пакета - 170 * 3 = 510 байт.
Фабричная матрица содержит 16x16 = 256 светодиодов. Следовательно, для того, чтобы передать полную картинку с матрицы-источника на матрицу приемника требуется более 512 информационных каналов, а именно 256 * 3 = 768 каналов, или два потока по 510 (1) и 268 (2) каналов (170 и 86 светодиодов) соответственно.
Протокол DMX-512 вводит понятие Вселенная (Universe) - совокупность потоков данных, каждый из которых содержит 512 каналов. Передача каждого такого потока (каждая вселенная) требует выделения отдельного IP адреса. Для передачи многоадресных пакетов для совокупности вселенных выделяется диапазон адресов 239.255.0.0 .. 239.255.255.255. Часть из этого диапазона адресов зарезервирована для служебных целей и не может быть использована (смотри спецификацию протокола. В общем случае данные для управления световым оборудованием могут содержать до 64000 вселенных по 512 каналов в каждой. На практике же (и в данной прошивке) для передачи данных используется 10 групп, каждая из которых содержит по 12 вселенных. Таким образом, каждая группа может управлять матрицей, состоящей из 12 * 170 = 2040 светодиодов.
Ограничение 10 групп 12 вселенных введено из соображений достаточности для большинства проектов
и при необходимости может быть расширено путем внесения исправлений в код скетча (файл *e131.ino*).
Нумерация вселенных начинается с 1. Таким образом, распределение Multicast IP адресов вселенных приведено в следующей таблице:
Группа | Адреса вселенных |
---|---|
Группа 0 | 239.255.0.1 - 239.255.0.12 |
Группа 1 | 239.255.0.13 - 239.255.0.24 |
Группа 2 | 239.255.0.25 - 239.255.0.36 |
Группа 3 | 239.255.0.37 - 239.255.0.48 |
Группа 4 | 239.255.0.49 - 239.255.0.60 |
Группа 5 | 239.255.0.61 - 239.255.0.72 |
Группа 6 | 239.255.0.73 - 239.255.0.94 |
Группа 7 | 239.255.0.95 - 239.255.0.106 |
Группа 8 | 239.255.0.107 - 239.255.0.118 |
Группа 9 | 239.255.0.119 - 239.255.0.130 |
UDP порт для каждого адреса по стандарту E1.31 используется 5568
Для включения поддержки синхронизации устройств найдите в проекте файл a_def_hard.h, в нем блок определения параметров оборудования и включите использование синхронизации устройств #define USE_E131 1
:
...
#define USE_E131 1 // 1 - использовать протокол E1.31 для синхронизации устройств
...
После компиляции скетча и загрузки прошивки в проект - настройте роль каждого устройства в группе - один источник на группу, остальные устройства в группе - приемники.
Для уровня синхронизации "Физический" после того как изображение эффекта сформировано, выполнено наложение на эффект часов / текста / погоды, непосредственно перед отправкой изображения на диоды матрицы вызывается функция sendE131Screen(). Функция выполняет перебор всех светодиодов в цикле от 0 до NUM_LED-1, извлекает три байта цвета для каждого светодиода в цепочке в порядке их физического подключения и помещает их в область данных сетевого пакета E1.31. После заполнения пакета первой вселенной группы данными RGB-цвета первых 170 диодов, пакет отправляется в сеть многоадресной рассылкой по адресу соответствующему multicast-адресу первой вселенной группы. Затем формируется новый пакет для следующей вселенной, происходит заполнение данных цветами следующих 170 диодов и отправка пакета в сеть. Это повторяется до достижения последнего светодиода в матрице. Последний пакет может быть не полным, если общее количество светодиодов не кратно 170. После того как отправка данных в сеть устройствам получателям завершена, картинка выводится на матрицу устройства-источника - FastLED.show()
.
Для уровня синхронизации "Логический" выполняется похожая последовательность действий, за исключением того, что светодиоды матрицы опрашиваются не в порядке физического следования от 0 до NUM_LED-1, а сканируя "развертку" изображения начиная с верхнего левого угла матрицы по столбцам (координата X), затем по строкам (координата Y). Формирование пакетов данных для вселенных группы ничем не отличается от алгоритма для уровня синхронизации "Физический".
На стороне приемника из каждого полученного пакета извлекаются данные RGB-цвета светодиодов, определяется номер диода в цепочке (уровень "Физический" или координаты X,Y (уровень "Логический") и отправляются на матрицу.
Несколько иначе обстоят дела для уровня синхронизации "Командный". В этом случае пакет E1.31 в области данных содержит не триады RGB-цветов светодиодов, а команды, которые должен выполнить приемник при их получении от устройства-источника. Отправка команд мастером выполняется в ключевые моменты алгоритма скетча, например: при смене эффекта, при начале и и завершении отображения текста бегущей строки, при изменении яркости матрицы или параметров эффекта и при других событиях.
Чтобы отличить пакет с командой от пакета с данными - в первые два байта области данных командного пакета помещается сигнатура - 0xAA, 0x55. Следующие байты данных в командном пакете содержат код (ID) команды и ее параметры.
Описание команд и их параметров приведены в следующей таблице:
№ байта | значение |
---|---|
[1] | 0xAA - сигнатура, байт 1 |
[2] | 0x55 - сигнатура, байт 2 |
[3] | ID команды |
--- | Команды |
[3] | 0 - Вкл/выкл устройства |
[4] | = x - 0 - выключить 1 - включить |
--- | |
[3] | 1 - Установить текущую яркость |
[4] | x - Значение яркости |
--- | |
[3] | 1 - Установить текущую яркость специальных эффектов |
[4] | x - Значение яркости |
--- | |
[3] | 3 - Включить эффект |
[4] | x - ID эффекта |
[5] | x - скорость эффекта |
[6] | x - контраст эффекта |
[7] | x - спец.параметр №1 |
[8] | x - спец.параметр №2 |
[9] | r - значение компоненты R цвета globalColor |
[10] | g - значение компоненты G цвета globalColor |
[11] | b - значение компоненты B цвета globalColor |
[12] | W - ширина матрицы Мастера |
[13] | H - высота матрицы Мастера |
--- | |
[3] | 4 - Включить указанный специальный эффект |
[4] | x - ID специального эффекта |
--- | |
[3] | 5 - Включить отображение текста, переданного в параметре |
[4] | x - char* null-terminated текст |
--- | |
[3] | 6 - Остановить отображение бегущей строки, если оно выполняется |
--- | |
[3] | 7 - Установить время |
[4] | x - год (без века) - 20xx |
[5] | x - месяц |
[6] | x - день |
[7] | x - часы |
[8] | x - минуты |
[9] | x - секунды |
--- | |
[3] | 8 - Установить скорость эффекта |
[4] | x - скорость |
--- | |
[3] | 9 - Установить контрастность эффекта |
[4] | x - контрастность |
--- | |
[3] | 10 - Установить параметр 1 эффекта |
[4] | x - значение |
--- | |
[3] | 11 - Установить параметр 2 эффекта |
[4] | x - значение |
--- | |
[3] | 12 - Установить globalColor |
[4] | r - значение компоненты цвета R |
[5] | g - значение компоненты цвета G |
[6] | b - значение компоненты цвета B |
--- | |
[3] | 13 - Ширина и высота панели Мастера |
[4] | W - ширина |
[5] | H - высота |
-
На устаревших роутерах типа DIR-615 замечены неполадки на устройствах-приемниках, работающих в режиме SLAVE
- Проявление: изображение эффекта с MASTER на устройствах SLAVE отображается не полностью, не на всей матрице, а только на первых 170 диодах. На остальной части матрицы диоды не светятся.
- Причина: роутер отдает устройствам только первый многоадресный пакет из кадра, остальные пакеты роутером устройству-приемнику не передаются.
- Решение: обычно решить проблему помогает перезагрузка роутера. Если проблема возникает достаточно часто - рекомендуется замена роутера на более современный.
-
Современные роутеры типа TPLink серии Archer-C80 имеют ошибку в прошивке.
- Проявление: после выключения питания ведомых устройств роутер перестает отвечать. Пинг на роутер не проходит, Web-страница настройки роутера не открывается. Компьютеры в сети сообщают, что интернет не доступен.
- Причина: ошибка в прошивке роутера.
- Решение: обновите прошивку роутера.