Skip to content

Instantly share code, notes, and snippets.

@BCadet
Last active February 10, 2024 20:09
Show Gist options
  • Save BCadet/7ce29a5c32da552d96c1ef48f5111147 to your computer and use it in GitHub Desktop.
Save BCadet/7ce29a5c32da552d96c1ef48f5111147 to your computer and use it in GitHub Desktop.
simple python driver to communicate with USB relay module. It handles several versions with differents numbers of relays
import serial
import argparse
import logging
class USBRelays():
class Relay():
index = ...
header = 0xA0
def __init__(self, index, log):
self.index = index+1
self.log = log
def setOutput(self, serial, value):
chksum = self.header + self.index + value
frame = bytearray()
frame.append(self.header)
frame.append(self.index)
frame.append(value)
frame.append(chksum)
self.log.debug(f'{frame=}')
serial.write(frame)
def __init__(self, port, baud, relaysNum):
self.log = logging.getLogger("USBRelays")
self.log.addHandler(logging.StreamHandler())
self.serial = serial.Serial(port, baud)
self.relays = [self.Relay(i, self.log) for i in range(relaysNum)]
def setOutput(self, relayNum, value):
self.log.debug(f'set relay {relayNum} to {value}')
self.relays[relayNum].setOutput(self.serial, value)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-p", "--port", help="serial port", default="/dev/ttyUSB0")
parser.add_argument("-b", "--baud", help="serial port baudrate", type=int, default=9600)
parser.add_argument("-n", "--relayNum", help="number of available relays", type=int, default=1)
parser.add_argument("-r", "--relay", help="selected relay (start at 0)", type=int, default=0)
parser.add_argument("-v", "--value", help="value to apply to the relay", type=int, default=1)
parser.add_argument("-d", "--debug", help="print debug", action='store_true')
args = parser.parse_args()
USB = USBRelays(args.port, args.baud, args.relayNum)
if args.debug:
USB.log.setLevel(logging.DEBUG)
USB.setOutput(args.relay, args.value)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment