def __exit__(self, *args): self.close() def demo_fade(): """Demo: smooth RGB fade on channels 1,2,3.""" with LixadaDMX() as dmx: dmx.start_continuous_sending(fps=30)
from lixada_dmx import LixadaDMX dmx = LixadaDMX() # auto-finds COM port dmx.start_continuous_sending(fps=44) dmx.set_channel(1, 255) # full brightness channel 1 dmx.close() 6. Important notes for Windows 10 | Issue | Fix | |-------|-----| | Driver not loading | Disable driver signature enforcement temporarily (not recommended) or use official CH340/CP210x drivers | | No DMX output | Some dongles need 5-12V power on DMX line (fixture provides it) | | Wrong baud rate | Lixada requires 250000 – verify in code | | Timing sensitive | The _send_break() method works on most Windows 10 PCs. If unstable, use QL+ or Freestyler instead | If you need a real Windows kernel driver (not a userspace script) or a signed .inf driver package , that is a much larger task requiring Microsoft certification and hardware testing. For 99% of users, the Python script + standard USB-serial driver is the correct solution.
def stop_continuous_sending(self): """Stop background DMX transmission.""" self.running = False if hasattr(self, '_sender_thread'): self._sender_thread.join(timeout=0.5) lixada usb dmx 512 driver windows 10
def send_frame(self): """Send current DMX data immediately.""" with self.lock: data_copy = bytes(self.dmx_data) self._send_dmx_frame(data_copy)
def __enter__(self): return self
class LixadaDMX: """Controls Lixada USB DMX512 dongle on Windows 10."""
def find_lixada_port(self): """Auto-detect CP2102 or CH340 serial port.""" ports = serial.tools.list_ports.comports() for port in ports: # CP2102 or CH340 typically used in Lixada dongles if 'CP210' in port.description or 'CP210' in port.product or \ 'CH340' in port.description or 'CH34' in port.vid: return port.device # Fallback: any USB serial port (user confirms) if 'USB Serial' in port.description or 'UART' in port.description: print(f"Possible DMX port found: port.device - port.description") # Return first candidate return port.device return None def __exit__(self, *args): self
def _open_serial(self): """Open serial port with DMX timing parameters.""" try: self.serial = serial.Serial( port=self.com_port, baudrate=250000, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_TWO, timeout=0, write_timeout=0 ) print(f"✅ Lixada DMX connected on self.com_port") except Exception as e: raise RuntimeError(f"Failed to open self.com_port: e")