dmx-priest: плеер и рекордер DMX пресетов для светового оборудования

от автора

Ситуация

Я волонтерю в небольшой организации, мы устраиваем вечеринки, концерты итд.
У нас есть дорогущая консоль для управления светом (Avolites Titan Quartz). Её используем только для больших выступлений и ручного управления. Консоль коннектится к LAN2DMX устройству (dmXLAN Buddy) которое конвертирует Art-Net протокол в сигнал понятный DMX устройствам.
Нужен был девайс, который мог бы записать программу с главной консоли, а потом бесконечно играть данный пресет. Им должно быть просто пользоваться без надобности доставать и пресматривать за дорогим и сложным оборудованием.

Решение

Железо

  • Raspberry Pi. Подойдет, наверное, любая версия. Я использовал имеющуюся вторую
  • LCD экран. Я использовал 16х2 с уже прикрепленным I2C шилдом
  • Rotary Encoder. Что-то что можно крутить и нажимать как средство в ввода. Я купил уже готовый, со всеми резисторами.
  • Перемычки. Или просто провода, если намертво припаиваться к гребенке RPi
  • Мелочевка: корпус, usb micro кабель, кнопка для включения

Соединяем

Дисплей:

  • GND на Pin 6 (Ground)
  • VCC на Pin 4 (5V power)
  • SDA на Pin 3 (GPIO 2)
  • SLC на Pin 5 (GPIO 3)

Крутилку:

  • CLK на Pin 12 (GPIO 18)
  • DT на Pin 13 (GPIO 27)
  • SW на Pin 11 (GPIO 17)
  • + на Pin 1 (3V3 power)
  • GND на Pin 14 (Ground)

Питание:
Я просто раздраконил micro USB кабель, подпаял кнопку. Вывел наружу круглый разъем питания, таким проще пользоваться

Софт

Ось

Берем стандартный Raspberry Pi OS (32-bit) Lite и ставим на SD используя Etcher.
Добавляем файл «ssh» в /boot чтоб включить SSH, тк не хочется подключать монитор и клаву.SSH в RPi:

youruser@homepc:~ $ ssh pi@[Pi-IP-address]

Обновляем на всякий:

pi@raspberrypi:~ $ sudo apt-get update pi@raspberrypi:~ $ sudo apt-get dist-upgrade

Open Lightning Architecture

Устанавливаем пакеты для билда сердца нашего девайса — Open Lightning Architecture.

pi@raspberrypi:~ $ sudo apt-get install git autoconf libtool bison flex uuid-dev libcppunit-dev python-protobuf python-numpy protobuf-compiler  libmicrohttpd-dev libprotoc-dev i2c-tools python3-smbus python3-gpiozero python3-pip3 pi@raspberrypi:~ $ git clone https://github.com/OpenLightingProject/ola.git pi@raspberrypi:~ $ cd ola

компиляем и устанавливаем. собирать пакеты лень, да и надеюсь что после окончания проекта никто никогда вовнутрь не заглянет. займет оч много времени. на RPi 2 и тормознутой SD карте я оставлял на ночь.

pi@raspberrypi:~/ola $ autoreconf -i pi@raspberrypi:~/ola $ ./configure --enable-rdm-tests pi@raspberrypi:~/ola $ make pi@raspberrypi:~/ola $ sudo make install

загружаем либы и проверяем работоспособность

pi@raspberrypi:~/ola $ sudo ldconfig pi@raspberrypi:~/ola $ olad -l 3

идем на http://[Pi-IP-address]:9090/ola.html и смотрим чтоб все открылось. на самом деле веб сервер нам не нужем, можно подшаманить в конфиг файле сборки и собрать без него.
создадим сервис для systemd

pi@raspberrypi:~ $ sudo nano /etc/systemd/system/olad.service [Unit] Description=OLA daemon After=network.target StartLimitIntervalSec=0  [Service] Type=simple Restart=always RestartSec=1 User=pi ExecStart=olad  [Install] WantedBy=multi-user.target

и засунем в автозагрузку

pi@raspberrypi:~ $ sudo systemctl start olad pi@raspberrypi:~ $ sudo systemctl enable olad

I2C

нужно включить I2C чтоб взаимодействовать с дисплеем

pi@raspberrypi:~ $ sudo raspi-config

Внутри «Interfacing Options» > «I2C» > «enable» и затем перезагружаемся.
Смотрим адрес дисплея на шине I2C, он нам понадобится

pi@raspberrypi:~/dmx-priest $ sudo i2cdetect -y 1

Мой был 3f, его надо будет прописать в RPi_I2C_driver.py. По идее лучше бы из программы считывать системную переменную, но мне было лень доделывать после того как все заработало.

Статичный IP

Некоторые консоли умею в броадкаст, некоторые надо прописывать вручную, так что сделаем статичный IP в адресе понятном и доступном всем dmx девайсам.

pi@raspberrypi:~ $ sudo nano /etc/dhcpcd.conf # Example static IP configuration: interface eth0 static ip_address=2.150.43.69/24 static routers=2.124.1.1 static domain_name_servers=2.124.1.1

dmx-priest

Самописная прога для работы с дисплеем, крутилкой и ola. Python не знаю, PR приветствую.
Дергает ola_patch чтоб настроиться на ввод (для записи с консоли) или на вывод (чтоб работать самой). Для записи и воспроизведения использует ola_recorder.
Устанавливаем

pi@raspberrypi:~ $ sudo pip3 install git+https://github.com/Virusmater/dmx-priest

добавляем в автозагрузку

pi@raspberrypi:~ $ nano /etc/systemd/system/dmx-priest.service  [Unit] Description=dmx-priest Requires=olad.service After=network.target olad.service StartLimitIntervalSec=0  [Service] Type=simple Restart=always RestartSec=1 User=pi ExecStart=dmx-priest  [Install] WantedBy=multi-user.target  pi@raspberrypi:~ $ sudo systemctl start dmx-priest pi@raspberrypi:~ $ sudo systemctl enable dmx-priest

Юзаем

image

  • Крутим вправо 20 раз чтоб найти режим записи. 20 раз чтоб юзеры случайно не назаписывали всякого. Надпись на дисплее: «Record mode — push the knob».
  • Наджимаем: «Ready to record — push to start»
  • Подготавливаем основную консоль для воспроизведения. Настаиваем свет на нужный лад
  • Нажимаем для начала записи: «Rec in progress — push to stop»
  • Ждем какое-то время, зависит от програмы на основной консоли.
  • Нажимаем чтоб остановить запись. Нас возвращает обратно в меню: «Play mode — push the knob»
  • Нажимаем чтоб войти в меню воспроизведения. Свежезаписаный пресет будет в формате YYYY.mm.dd HH:MM
  • Нажимаем на пресет или нажимаем на 99_blackout чтоб выйти и погасить все огни

Исходники

https://github.com/Virusmater/dmx-priest

ссылка на оригинал статьи https://habr.com/ru/post/512734/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *