import serial import random from time import sleep START_BYTE = b'\xA5' def calculate_crc(message): return sum(message[0:-1]) % 256 def build_message(message): message_out = bytearray(message) message_out[-1] = calculate_crc(message_out) return message_out serial_port = serial.Serial(port='/dev/ttyUSB1', baudrate=115200) # Building response message response_message = build_message(START_BYTE + b'\x00\x03' + b'\x01' + b'\x00' + b'\x00') # Building Async response message async_message = build_message(START_BYTE + b'\x00\x02' + b'\x02' + b'\x01\x02' + b'\x00') # Building Sync response message sync_message = build_message(START_BYTE + b'\x00\x05' + b'\x02' + b'\x05\x06' + b'\x00') counter = 0 print("") print("o -> response") print(". -> Sync") print("x -> Async") print("") while True: bytes_in_serial_port = serial_port.in_waiting; if bytes_in_serial_port != 0: # This is what we received serial_port.read(bytes_in_serial_port) # Answer immediately serial_port.write(response_message) # Show on the screen print("o", end='', flush=True) sleep(0.05) counter += 1 if counter == 20: counter = 0 # Send Sync Values serial_port.write(sync_message) print(".", end='', flush=True) if random.randint(1, 100) == 69: # Send Async message serial_port.write(async_message) print("x", end='', flush=True)