During these times I decided to start playing with DMX. I bought a the Lumeri Wash 7.10. It has RGBW leds, 9 or 16 channels, and a moving head. It uses DMX512. The DMX in DMX512 stands for Digital Multiplex (protocol). Lights like this have a DMX input and output. so they can be chained. A collection of DMX devices is called a universe.

DMX is super simple. It is a serial interface at 250.000 bits per second. The electrical interface is RS-485. The 512 in DMX512 stands for the number of data bytes that can be sent. If a device uses one channel, it can support 512 devices. The above device already uses 9 or 16 channels, so I guess that can quickly become filled.

To steer the UART from the PI requires it to run at this speed of 250kbaud. This is possible with some tricks. See this article on someone creating OLA support. These instructions can be found at different other locations as well.

Adjust /boot/config.txt and add this line at the end:

init_uart_clock=16000000

Also adjust the kernel to use serial at boot (see here.

sudo raspi-config

Disable here the boot messages, but not the device itself.

Also in /boot/cmdline.txt remove the console parameter. I don’t know if this is actually necessary, because it already has plymouth.ignore-serial-consoles. I also didn’t find getty on the serial line and no /etc/inittab file. None of the processes was using ttyAMA0 (quick check with ps). I’ve executed the following anyway:

sudo systemctl disable [email protected]

When reading here it states that GPIO 14/15 is used by the Bluetooth device. It can be disabled. The instructions in /boot/overlays/README are actually quite clear.

Name:   disable-bt
Info:   Disable onboard Bluetooth on Pi 3B, 3B+, 3A+, 4B and Zero W, restoring
        UART0/ttyAMA0 over GPIOs 14 & 15.
        N.B. To disable the systemd service that initialises the modem so it
        doesn't use the UART, use 'sudo systemctl disable hciuart'.
Load:   dtoverlay=disable-bt
Params: <None>

Indeed sudo systemctl disable hciuart sounds like something that should be done then as well.

If we need Bluetooth later on, we might want to use core_freq_min=500 to prevent core scaling. This is namely the issue. The GPIO pins get the clock from the system bus clock. The latter changes depending on the system load.

DMX interface

I got a DMX interface for the Raspberry PI. You can buy also a case, really neat.

First I’ve been trying QLC+.

When trying OLA, adjust /etc/ola/ola-uartdmx.conf.

/dev/ttyAMA0-break = 100
/dev/ttyAMA0-malf = 24000
device = /dev/ttyAMA0
enabled = true

Following the instructions on the site, I tried to set the board to output mode.

The gpio utility doesn’t seem to be maintained anymore. THere is raspi-gpio however. Display the configuration:

raspi-gpio get

Set it like described:

raspi-gpio set 18 op
raspi-gpio set 18 dh
raspi-gpio set 14 a0
raspi-gpio set 15 a0

The result is:

GPIO 14: level=1 fsel=4 alt=0 func=TXD0 pull=NONE
GPIO 15: level=1 fsel=4 alt=0 func=RXD0 pull=UP
...
GPIO 18: level=1 fsel=1 func=OUTPUT pull=DOWN

In this post it states that all this is too complicated.

OLA

Installing OLA was very simple, just:

sudo apt install ola

Navigate to something like 192.168.86.246:9090 where you change the IP address to that of your PI.

UART driver

Now I’ll browse forums to make this work….