-
-
Save evantahler/9755268 to your computer and use it in GitHub Desktop.
| #!/usr/bin/env node | |
| // A simple DMX example which will turn all the lights on and off every second | |
| // You can use this as a fork within another application as well (cluster-awareness) | |
| //////////// | |
| // dmx.js // | |
| //////////// | |
| var ftdi = require('ftdi'); | |
| var cluster = require('cluster'); | |
| var settings = { | |
| // 'baudrate': 250000, | |
| // 'baudrate': 250000 / 4, | |
| 'baudrate': 115200 / 2, | |
| 'databits': 8, | |
| 'stopbits': 2, | |
| 'parity' : 'none', | |
| }; | |
| var sleepTime = 0.026 * 1000; | |
| var device; | |
| var universe = new Buffer(512, 'binary'); | |
| var on = false; | |
| var loopTimer; | |
| function writeLoop(){ | |
| clearTimeout(loopTimer); | |
| // device.write([]); | |
| setTimeout(function(){ | |
| device.write([0x00]); | |
| device.write(universe); | |
| if(cluster.isMaster){ process.stdout.write("."); } | |
| loopTimer = setTimeout(writeLoop, sleepTime); | |
| }, 88); | |
| } | |
| function set(k,v){ | |
| universe[parseInt(k) - 1] = parseInt(v); | |
| console.log('[DMX] ' + k + ':' + v); | |
| } | |
| function setAll(v){ | |
| var i = 0; | |
| while(i < universe.length){ | |
| universe[i] = parseInt(v); | |
| i++; | |
| } | |
| console.log('[DMX] all:' + v); | |
| } | |
| var flop = function(){ | |
| if(on === true){ | |
| setAll(0); | |
| }else{ | |
| setAll(250); | |
| } | |
| on = !on; | |
| }; | |
| //////// | |
| // GO // | |
| //////// | |
| setAll(0); | |
| ftdi.find(function(err, devices){ | |
| console.log(devices); | |
| device = new ftdi.FtdiDevice(devices[0]); | |
| device.open(settings, function(){ | |
| writeLoop(); | |
| if(cluster.isMaster){ | |
| setInterval(flop, 500); | |
| }else{ | |
| process.on('message', function(message){ | |
| message = JSON.parse(message); | |
| if(message.all === true){ | |
| setAll(message.power); | |
| }else{ | |
| set(message.channel, message.power); | |
| } | |
| }); | |
| } | |
| }); | |
| }); |
Here's some C code that seems to work https://github.com/mcallegari/qlcplus/blob/master/plugins/dmxusb/src/enttecdmxusbopen.cpp
@mcallegari I believe you are a DMX expert from your qlcplus project. Any advice?
Solved! Code updated above with a simple CLI tool to set channels on your DMX universe
Oh man, timing couldn't be any better on this!
Sweet! Now I can go buy one. W00T!!!
Updated. Note: this method seems to only work for odd-numbered channels. Also, the ftdi package only compiles for node v0.10
Thank you very much for this script, it's awesome ! 👍
I have a tip for future users: on osx 10.11.3, I had to do sudo kextunload -bundle-id com.FTDI.driver.FTDIUSBSerialDriver to resolve the FT_DEVICE_NOT_OPENED error. (And do not forget to ``sudo kextload -bundle-id com.FTDI.driver.FTDIUSBSerialDriver` when you're done)
Do you have an updated version of the above code or maybe a better solution? I'm at the same problem as you two years ago: I can only control odd numbered channels (and to be honest: I have not a single clue why)
Hi, any updates on the odd numbered channels?
I need help talking to the Enttec Open DMX USB DMX controller. I feel that I'm very close, and only have trouble with forming the DMX buffer itself (starting on line 101)
sudo kextunload -b com.apple.driver.AppleUSBFTDIHelp?