La gestion d’une régie d’éclairage DMX se fait généralement à l’aide de pupitre, ou console DMX. De plus en plus d’éclairagistes utilisent des interfaces informatiques (électronique numérique) leur permettant de gérer depuis des logiciels, via des adaptateurs (port série/DMX et surtout USB/DMX) des chaînes de projecteurs DMX.
Le DMX512 (Digital Multiplexing) est une norme de transmission de données essentiellement utilisée pour le contrôle de l’éclairage et des effets de scène dans le monde du spectacle.
Le DMX 512 est à ce jour le protocole le plus répandu et le plus universel, (utilisés partout et par tous les fabricants de matériel d’éclairage scénique).
Le protocole DMX512 utilise généralement une liaison suivant la norme EIA RS 485 et cadencée à 250 kb/s. La transmission numérique unidirectionnelle se fait de façon sérialisée par liaison symétrique. La topologie est de type bus. La norme prévoit la mise en série de maximum 32 appareils sur une même ligne DMX.
Remarque : il est possible de brancher plus de 32 appareils en insérant sur la ligne un ou plusieurs boosters DMX.
Il permet de contrôler 512 canaux (donc 9 bits d’adressage) en affectant à chacun une valeur comprise entre 0 et 255 (donc 8 bits de données par canal).
Chaque appareil reçoit en même temps l’ensemble des 512 valeurs ce qui forme une « trame » DMX.
Remarque : La norme prévoit l’utilisation d’au maximum de 16 canaux par appareil. La réalité en est loin, certains appareils utilisent plus de 60 canaux, tandis que d’autres n’en utilisent qu’un.
Exemple : une lyre configurée pour le canal 81 avec 6 voies :
Ainsi, la lyre va analyser le contenu de la trame DMX, et lire les valeurs des canaux 81 à 86, qu’elle affecte à sa voie 1, et les 5 canaux suivants (qu’elle affecte aux voies suivantes). Chaque constructeur d’appareil fournit ainsi la liste des valeurs et les effets associés.
La transmission se fait :
La fréquence de rafraîchissement est de 44 Hz (ce qui signifie que la trame est envoyée 44 fois par seconde pour 512 canaux).
Remarques :
Le mode de transmission des données tendant à apparaître de plus en plus est l’utilisation de transmissions DMX WIFI.
Une nouvelle norme a été créée en parallèle de DMX512. Cette norme, nommée Art-Net, intègre les trames DMX dans des paquets Ethernet et permet un câblage plus simple (de type réseau informatique) et l’utilisation d’équipements comme les switchs, le Wi-Fi, etc.
Liens :
Le DMX USB PRO est une interface professionnelle pour connecter des ordinateurs PC et MAC afin de piloter des réseaux d’éclairage DMX512. Il est compatible avec une très large gamme de logiciels. Il est commercialisé autour de 125 euros.
Caractéristiques :
Site : www.enttec.com
Il est conseillé de lire ou de s’aider de ce document avant de poursuive.
Avant :
$ lsusb > lsusb-avant.txt
$ lsmod > lsmod-avant.txt
$ dmesg > dmesg-avant.txt
Brancher maintenant un périphérique USB.
Après :
$ lsusb > lsusb-apres.txt
$ lsmod > lsmod-apres.txt
$ dmesg > dmesg-apres.txt
Analyse :
$ diff lsusb-avant.txt lsusb-apres.txt
> Bus 001 Device 009: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART)
$ diff dmesg-avant.txt dmesg-apres.txt
> [31135.339716] usb 1-1.2.2: new full-speed USB device number 9 using ehci-pci
> [31135.438350] usb 1-1.2.2: New USB device found, idVendor=0403, idProduct=6001
> [31135.438355] usb 1-1.2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
> [31135.438358] usb 1-1.2.2: Product: DMX USB PRO
> [31135.438360] usb 1-1.2.2: Manufacturer: ENTTEC
> [31135.438363] usb 1-1.2.2: SerialNumber: EN082570
> [31135.440523] ftdi_sio 1-1.2.2:1.0: FTDI USB Serial Device converter detected
> [31135.440554] usb 1-1.2.2: Detected FT232RL
> [31135.440557] usb 1-1.2.2: Number of endpoints 2
> [31135.440560] usb 1-1.2.2: Endpoint 1 MaxPacketSize 64
> [31135.440562] usb 1-1.2.2: Endpoint 2 MaxPacketSize 64
> [31135.440565] usb 1-1.2.2: Setting MaxPacketSize 64
> [31135.440990] usb 1-1.2.2: FTDI USB Serial Device converter now attached to ttyUSB0
$ diff lsmod-avant.txt lsmod-apres.txt
> ftdi_sio 47922 0
> usbserial 37161 1 ftdi_sio
$ modinfo ftdi_sio
filename: /lib/modules/3.8.0-44-generic/kernel/drivers/usb/serial/ftdi_sio.ko
license: GPL
description: USB FTDI Serial Converters Driver
author: Greg Kroah-Hartman <greg@kroah.com>, ...
srcversion: EE9EA6BA3E0DB16B58328D6
...
alias: usb:v0403p6001d*dc*dsc*dp*ic*isc*ip*in*
...
depends: usbserial
intree: Y
vermagic: 3.8.0-44-generic SMP mod_unload modversions
parm: vendor:User specified vendor ID (default=0x0403) (ushort)
parm: product:User specified product ID (ushort)
parm: ndi_latency_timer:NDI device latency timer override (int)
$ modinfo usbserial
filename: /lib/modules/3.8.0-44-generic/kernel/drivers/usb/serial/usbserial.ko
license: GPL
description: USB Serial Driver core
author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
srcversion: 36E7F356170866E98B422BB
depends:
intree: Y
vermagic: 3.8.0-44-generic SMP mod_unload modversions
parm: vendor:User specified USB idVendor (ushort)
parm: product:User specified USB idProduct (ushort)
$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 nov. 18 16:34 /dev/ttyUSB0
ftdi_sio
(cf. lsmod et modinfo)ftdi_sio
) a été chargé par le système (cf. dmesg et lsmod)ttyUSB0
dans /dev
(cf. ls)Attention : le périphérique ne sera accessible en lecture/écriture que par l’utilisateur propriétaire root
et les membres du groupe dialout
.
Par défaut, le système applique la politique des droits d’accès rw-rw----
pour ce type de périphérique USB :
$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 nov. 18 16:34 /dev/ttyUSB0
Ici, le périphérique sera accessible en lecture/écriture par l’utilisateur propriétaire root
et les membres du groupe dialout
. Tous les autres (other) utilisateurs auront aucun accès.
Pour modifier cette situation, vous avez les possibilités suivantes :
$ sudo chmod 666 /dev/ttyUSB0
toto
) dans le groupe dialout
: $ sudo adduser toto dialout
Pour une gestion automatique, il faudra passer par udev
qui est maintenant le service qui prend en charge le répertoire /dev
.
$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 nov. 18 16:34 /dev/ttyUSB0
$ sudo vim /etc/udev/rules.d/51-ttyusb.rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE="0666"
$ ls -l /dev/ | grep USB
crw-rw-rw- 1 root dialout 188, 0 nov. 18 17:08 ttyUSB0
Il est aussi possible de créer un lien symbolique au choix :
$ sudo vim /etc/udev/rules.d/51-ttyusb.rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE="0666",
SYMLINK+="dmx_pro"
$ ls -l /dev/ | grep "\(USB\|dmx\)"
lrwxrwxrwx 1 root root 7 nov. 18 17:10 dmx_pro -> ttyUSB0
crw-rw-rw- 1 root dialout 188, 0 nov. 18 17:10 ttyUSB0
Ou de fixer le nom du fichier spécial :
$ sudo vim /etc/udev/rules.d/51-ttyusb.rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE="0666",
NAME="ttyUSB1", SYMLINK+="dmx_pro"
$ ls -l /dev/ | grep "\(dmx\|USB\)"
lrwxrwxrwx 1 root root 7 nov. 18 17:12 dmx_pro -> ttyUSB1
crw-rw-rw- 1 root dialout 188, 0 nov. 18 17:12 ttyUSB1
L’objectif est de réaliser une application permettant de commander un ensemble d’appareils (lyres, scanners, lasers etc.) compatibles avec le bus DMX512, bus standard du monde du spectacle.
Pour cela, on vous fournit la classe EnttecDMXUSB
qui prendra en charge la dialogue avec l’interface Enttec DMX USB PRO (ou OPEN DMX USB).
On réalise un programme de test de détection utilisant la classe fournie :
#include <iostream>
#include <iomanip>
#include <string>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "enttecdmxusb.h"
using namespace std;
// Par défaut
#define DMXDEVICE "/dev/ttyUSB0"
int main(int argc, char *argv[])
{
if(argc != 2)
{
printf("Usage : %s peripherique\n", argv[0]);
printf("Exemple : %s /dev/ttyUSB0\n", argv[0]);
return 1;
}
printf("Peripherique : %s\n\n", argv[1]);
EnttecDMXUSB interfaceDMX(DMX_USB_PRO, argv[1]); // ou : EnttecDMXUSB interfaceDMX(DMX_USB_PRO, DMXDEVICE);
string configurationDMX;
if(interfaceDMX.IsAvailable())
{
configurationDMX = interfaceDMX.GetConfiguration();
cout << "Interface " << interfaceDMX.GetNomInterface() << " detectee" << std::endl << configurationDMX << std::endl;
}
else
cout << "Interface non detectee !" << endl;
return 0;
}
Code source fourni : activite-test-enttec.zip
/dev/ttyUSB0
, /dev/ttyUSB1
, …)On vous demande de compléter l’application GUI fournie qui permet de contrôler à partir d’une console logicielle un ensemble d’appareils DMX512.
Le projet Qt contient les classes EnttecDMXUSB
et MySlider
à mettre en oeuvre.
Code source fourni : activite-appareils-dmx.zip
Le principe de commande d’un appareil DMX est assez simple :
EnttecDMXUSB *interfaceDMX;
QString interface = "/dev/ttyUSB0";
// instancie la classe EnttecDMXUSB
interfaceDMX = new EnttecDMXUSB(DMX_USB_PRO, interface.toStdString());
if(interfaceDMX->IsAvailable())
{
// affiche la configuration
std::string configurationDMX = interfaceDMX->GetConfiguration();
qDebug() << "Interface DMX USB PRO detectee" << configurationDMX.c_str();
// remet à zéro les valeurs des 512 canaux
interfaceDMX->ResetCanauxDMX();
// émet les valeurs des 512 canaux
interfaceDMX->SendDMX();
// fixe et émet la valeur du canal 1
int canal = 1;
int valeur = 127;
interfaceDMX->SetCanalDMX(canal, valeur);
interfaceDMX->SendDMX();
}
delete interfaceDMX;