시리얼 포트로 들어오는 데이터 처리하는 가운데 Blocking 때문에 발생하는 이슈가 있음
우선은 단순히 non-blocking 모드로 serial 오픈하고, 정해진 byte 만 읽어오는 방식으로 수정해서 돌아는 가는데 좀더 fancy 한 방법이 보여서 스크랩
Readline을 별도의 스레드로 빼는 방법인데, 이렇게하면 정해진 바이트가 아니어도 데이터 처리하는데 문제가 없을듯.. 나중에 수정해보자
출처는 https://stackoverflow.com/questions/17553543/pyserial-non-blocking-read-loop
import threading
import serial
connected = False
port = 'COM4'
baud = 9600
serial_port = serial.Serial(port, baud, timeout=0)
def handle_data(data):
print(data)
def read_from_port(ser):
while not connected:
#serin = ser.read()
connected = True
while True:
print("test")
reading = ser.readline().decode()
handle_data(reading)
thread = threading.Thread(target=read_from_port, args=(serial_port,))
thread.start()
Leave a Reply