Der MiniDMX ist ein preiswerter und einfach aufzubauender DMX-Ausgang für die USB-Schnittstelle.
DMX ist ein digitales Steuerprotokoll, das in der Bühnen- und Veranstaltungstechnik zur Steuerung von Lichttechnik wie Dimmern, "intelligenten" Scheinwerfern, Moving-Heads und Effektgeräten angewandt wird. (Wikipedia)
Er basiert auf dem weit verbreiteten Mikrocontroller ESP8266 mit WLAN-Schnittstelle. Neben dem ESP8266-Modul (hier ein D1 mini) sind nur zwei weitere Bauteile nötig, um das DMX-Signal zu erzeugen.
Als RS485-Treiber für das DMX-Signal wurde hier das IC 75176 verwendet. Der Eingang D (Pin 4) ist am GPIO2 bzw. D4 beim D1 mini anzuschließen:
An einem DMX-Gerät ist meistens eine männliche 3-polige XLR-Buchse als DMX-Eingang zu finden. Ein 3-poliger XLR-Stecker muss dann wie folgt an dem MiniDMX angeschlossen werden:
| Pin am 75176 | DMX-Ausgang (s.o.) | Funktion | 3-poliger XLR-Stecker |
|---|---|---|---|
| 6 | 1 | Signal / DMX+ / "Hot" | 3 |
| 7 | 2 | Invertiertes Signal / DMX- / "Cold" | 2 |
| 5 | 3 | Masse | 1 |
Wenn das DMX-Kabel länger als ein paar Meter ist, dann sollte der DMX-Bus am Ende mit einem 120 Ohm-Widerstand zwischen DMX+ und DMX- terminiert werden.
- Unterstützung des MQTT-Protokolls über WLAN
Das serielle Protokoll wird weiterhin unterstützt, um kompatibel mit dem ursprünglichem MiniDMX zu bleiben. Allerdings wird nicht mehr eine RS232-Schnittstelle am PC vorausgesetzt. Der MiniDMX wird nun über USB mit dem PC verbunden. Es wird automatisch vom Betriebssystem eine virtuelle serielle Schnittstelle eingerichtet.
Im Geräte-Manager vom Windows-Betriebssystem erscheint z.B. folgende virtuelle serielle Schnittstelle nach dem Anschließen:
In einer PC-Software, die den MiniDMX ansteuern will, muss in diesem Fall COM4 konfiguriert werden.
Im Linux-Betriebssystem besitzt die serielle Schnittstelle beispielsweise den Geräte-Pfad /dev/ttyUSB0.
Danach einfach einen der folgenden Datenblöcke mit 115.200 Bits pro Sekunde, 8 Datenbits, ohne Parität, einem Stoppbit und ohne Software- oder Hardware-Flußkontrolle über die virtuelle serielle Schnittstelle senden. Zwischen einzelnen Bytes sind maximal 100ms zulässig, ansonsten wartet der MiniDMX auf einen erneuten Blockstart.
Die DMX-Kanäle 1 bis 96 werden auf die gesendeten Werte gesetzt. Die restlichen Kanäle bleiben unverändert. Dieser Block kann 44 mal in der Sekunde gesendet werden, um die Aktualisierungsrate des DMX-Protokolls voll auszuschöpfen. (Der Buchstabe h hinter einer Zahl kennzeichnet diese als hexadezimal.)
5Ah - Blockstart
A0h - Befehl: DMX-Out mit 96 Kanäle
96 Bytes für die Kanäle 1 bis 96
A5h - Blockende
Die DMX-Kanäle 1 bis 256 werden auf die gesendeten Werte gesetzt. Die restlichen Kanäle bleiben unverändert.
5Ah - Blockstart
A1h - Befehl: DMX-Out mit 256 Kanäle
256 Bytes für die Kanäle 1 bis 256
A5h - Blockende
Es werden alle 512 DMX-Kanäle auf die gesendeten Werte gesetzt.
5Ah - Blockstart
A2h - Befehl: DMX-Out mit 512 Kanäle
512 Bytes für die Kanäle 1 bis 512
A5h - Blockende
Nach max. 100ms sendet der MiniDMX folgenden Datenblock bei erfolgreicher Befehlsbearbeitung zurück:
5Ah - Blockstart
C1h - Befehl erfolgreich ausgeführt
A5h - Blockende
Im Fehlerfall erfolgt keine Rückmeldung und der MiniDMX wartet auf den nächsten gültigen Block.
Beispielprogramme für den PC zur Ansteuerung des MiniDMX sind im Unterordner examples des Repositories in verschiedenen Programmiersprachen zu finden. Im Folgenden sind Minimalbeispiele aufgelistet.
Mit folgendem einfachen Python-Skript können DMX-Kanalwerte gesendet werden. Vorab muss die Bibliothek pyserial mit pip install pyserial installiert werden. Der Quelltext ist auch im Repository unter examples/python/minimal-usb zu finden.
import serial
port = 'COM4'
channels = [255, 64, 255, 64, 0, 0, 0] + [0] * 505 # total 512
ser = serial.Serial(port, 115200, timeout=0.2)
data = bytearray([0x5A, 0xA2] + channels + [0xA5])
ser.write(data)
ser.close()Der Quelltext ist auch im Repository unter examples/groovy/minimal-usb zu finden.
@Grab(group='com.fazecast', module='jSerialComm', version='[2.0.0,3.0.0)')
import com.fazecast.jSerialComm.*
import static com.fazecast.jSerialComm.SerialPort.*
port=SerialPort.getCommPort('COM5')
port.openPort()
port.setComPortParameters(115200, 8, ONE_STOP_BIT, NO_PARITY)
port.setComPortTimeouts(TIMEOUT_READ_BLOCKING | TIMEOUT_WRITE_BLOCKING, 200, 200)
channels=[255, 64, 255, 64, 0, 0, 0] + [0] * 505 // total 512
byte[] buffer=[0x5A, 0xA2] + channels + [0xA5]
port.writeBytes(buffer, buffer.length)
port.closePort()Vor über 25 Jahren, im Juli 2000, wurde das Projekt MiniDMX ins Leben gerufen. Ziel war es damals, einen einfachen und kostengünstigen DMX-Ausgang für den PC bereitzustellen, um in erster Linie die Bühnenlichttechnik eines Freundes mit einigen DMX-Geräten ansteuern zu können. Was als kleines, persönliches Projekt begann, wurde im Laufe der Zeit häufig von anderen nachgebaut.
Die größte technische Herausforderung bestand damals darin, eine zweite serielle Schnittstelle rein softwarebasiert zu implementieren, um das DMX-Signal mit 250 kBit/s zu generieren. Dies erforderte eine besonders präzise Programmierung in Assembler, wobei die Zykluszeiten einzelner Instruktionen berücksichtigt werden mussten.
Im Laufe der Jahre fand der MiniDMX eine weite Verbreitung und diente als Inspiration für zahlreiche andere Projekte im Bereich der Lichtsteuerung mit DMX. Bekannte Programme wie DMXControl und FreeStyler unterstützen bis heute die Ausgabe des DMX-Signals über MiniDMX.
Nach einer langen Phase, in der es ruhig um das Projekt wurde – unter anderem, weil der verwendete Mikrocontroller nicht mehr hergestellt wird – lebt das Interesse an einer einfachen DMX-PC-Schnittstelle wieder auf. Aktuelle Projekte stellen neue Anforderungen, die eine Weiterentwicklung notwendig machen. Der MiniDMX soll daher neu aufgelegt werden: moderner, leistungsfähiger und vielseitiger.
Der wiederbelebte MiniDMX wird nicht nur über die klassischen Funktionen verfügen, sondern auch um zusätzliche Schnittstellen wie USB und WLAN erweitert. Außerdem sollen weitere Protokolle wie MQTT unterstützt und Szenen lokal gespeichert und abgespielt werden können.
Der erste MiniDMX aus dem Jahr 2000 auf einer selbst geätzten Platine:


