Do you mean open the port, write data (some bytes), receive data, close connection?
Example:
import sys
import time
from argparse import ArgumentParser
from binascii import hexlify, unhexlify
from pathlib import Path
from serial import Serial, SerialException
def send_receive(port, baudrate, command, delay, timeout):
port = Path("/dev", port)
if not port.exists():
raise ValueError(f"{port} does not exist.")
raw_data = unhexlify(command) # str as hex representation -> bytes
with Serial(port=str(port), baudrate=baudrate, timeout=timeout / 1000) as ser:
ser.write(raw_data)
time.sleep(delay / 1000)
return hexlify(ser.read()).decode()
def get_args():
parser = ArgumentParser()
parser.add_argument("port", help="Name of serial port without /dev/")
parser.add_argument(
"baudrate", default=9600, type=int, help="Baudrate of serial connection"
)
parser.add_argument("command", help="hexadecimal string literal to send.")
parser.add_argument(
"delay", default=1000, type=int, help="Delay in ms to wait after sending data"
)
parser.add_argument(
"timeout", default=5000, type=int, help="Timeout in ms for receiving data"
)
return parser.parse_args()
def main():
args = get_args()
received_data = send_receive(
args.port, args.baudrate, args.command, args.delay, args.timeout
)
if not received_data:
print("No data received...")
else:
print(received_data)
if __name__ == "__main__":
try:
main()
except SerialException as e:
print(" ".join(e.args[1:]), file=sys.stderr)