我想知道是否可以通过 Python shell 控制连接到 Enttec Open DMX USB 的灯光。如果是的话怎么办?
开放照明项目(以前称为opendmx)提供了Python API,作为其开放照明架构(OLA)的一部分,以便在OSX和Linux上使用OpenDMX USB。如果您使用的是 Windows,那么除了 Enttec 网站上使用 FTD2XX.DLL 库的代码之外,我没有找到任何其他内容。
但是应该注意的是,不能使用普通的基于串行的库(pyserial 等)。基本上,OLA 要么需要在 Linux 上使用特殊的内核模块,要么在 Mac 或 Linux 上使用通用 FTDI 非串行内核驱动程序与 libftdi 结合使用 - 有关详细信息,请参阅其设备特定页面。现在 OLA 网站上已预先构建了 对 Raspberry Pi 的支持。
使用的通信和协议与 Enttec Pro 系列完全不同(可以使用简单的串行命令和 pyserial 等进行控制,尽管 OLA 也可以与它们对话)。
我遇到了完全相同的问题,所以我为所有运行 Windows 的程序编写了一个简单的 python 程序;看看:https://github.com/Coronon/PyOpenDmxUsb
它使用 C# 服务器(因为他们的 C# 接口是唯一适合我的接口)和 Python 客户端,并且非常易于使用。
它也与非专业版兼容。 (专业版更容易使用,我会使用 AcceptedAnswer [但不支持普通版本])
编辑:这可能是“广告”,但我的项目是开源的并且超级易于使用,所以我相信这对其他人有用:)
我知道这是一篇相当老的帖子,但是 DmxPy 在过去几个月对我来说非常有效。它仅适用于 Python 2,但我知道有一些 Python 3 端口。
使用起来非常简单。我个人在我公司的质量控制软件中使用它。虽然它只适用于 DMX(不适用于 RDM),但我认为它比 OLA 的 Python Wrapper 更容易使用。它也能与我们的 ENTTEC 完美配合!
更新:这是我的 Python 3 端口:https://github.com/trevordavies095/DmxPy
ENTTEC Open DMX 是一个相当简单的设备,所需要做的就是打开其串行端口,然后继续发送所有 512 个通道,并在循环中添加一个中断和 0 起始字节,发送之间有轻微的暂停。这是类和一小段在单独线程中启动它的代码:
import sys, time
import pyftdi.serialext
class DmxPy:
def __init__(self, serialPort):
try:
self.serial = pyftdi.serialext.serial_for_url(serialPort, baudrate=250000, stopbits=2)
except:
print("Error: could not open Serial Port")
sys.exit(0)
self.dmxData = [bytes([0])] * 513
self.dmxData[0] = bytes([0])
def setChannel(self, chan, intensity):
if chan > 512: chan = 512
if chan < 0: chan = 0
if intensity > 255: intensity = 255
if intensity < 0: intensity = 0
self.dmxData[chan] = bytes([intensity])
def blackout(self):
for i in range(1, 512, 1):
self.dmxData[i] = bytes([0])
def render(self):
sdata = b''.join(self.dmxData)
self.serial.send_break(duration=0.001)
self.serial.write(sdata)
def display_universe(self):
while True:
self.render()
time.sleep(0.005)
dmx = DmxPy('ftdi://ftdi:232:A10NHECY/1') # note device serial in the connect string
dmx_thread = threading.Thread(target=dmx.display_universe)
dmx_thread.start()
dmx.setChannel(5,128)