MattIPv4 / PyDMXControl

A Python 3 module to control DMX using OpenDMX or uDMX - Featuring fixture profiles, built-in effects and a web control panel.
https://pypi.org/project/PyDMXControl/
GNU General Public License v3.0
114 stars 22 forks source link

Node-RED Controller #40

Open pdawcewicz opened 1 year ago

pdawcewicz commented 1 year ago

Hi Matt.

I'm looking for way to control my DMX decoder using RS485 hat on Rpi. I'd love to control it in Node-RED environment. Shield's manufacturer supplied a sample python code, sending a simple test string over RS485, and it works, but I'm wandering how can I modify this code, making it send DMX frames. Maybe you could give me some tips how to do it, because unfortunately, I don't know python.

Here is the code which I've simplified a little bit, and original one in the link below.

import serial import os import sys import logging

logging.basicConfig(level=logging.INFO) libdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(file))), 'lib') if os.path.exists(libdir): sys.path.append(libdir)

import RPi.GPIO as GPIO import time from waveshare_2_CH_RS485_HAT import config

TXDEN_1 = 27 TXDEN_2 = 22

ser = config.config(dev = "/dev/ttySC0") data = '' GPIO.output(TXDEN_1, GPIO.LOW) ser.Uart_SendString('Waveshare 2-CH RS485 HAT\r\n') time.sleep(0.005)#Waiting to send GPIO.output(TXDEN_1, GPIO.HIGH)

https://www.waveshare.com/wiki/2-CH_RS485_HAT

Regards, Paweł

MattIPv4 commented 1 year ago

Hey! it sounds like this is a serial device? If so, the serial controller in the project might be what you want?

https://github.com/MattIPv4/PyDMXControl/blob/master/PyDMXControl/controllers/_SerialController.py

If it isn't a true serial device, you might be able to use that controller as a basis for implementing your own controller that makes the right calls to send each DMX frame

pdawcewicz commented 1 year ago

Hey. Thanks. That is what I was looking for. I was wandering how to get this >88 usec break and >8 usec idle before sending the pocket, and you are doing it at the very end of the code:

    self.__device.send_break(100e-6)
    sleep(10e-6)
    self.__device.write(data)

It seems I will be able to handle DMX protocol this way, using your python code, but maybe you could give me some ideas how to achieve that in Node-RED, if you have any experience with this environment.

MattIPv4 commented 1 year ago

Unfortunately, I'm not familiar with Node-RED, sorry.