-
-
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.AppleUSBFTDI
Help?