본문 바로가기
파이썬

파이썬 PySerial 비 차단 읽기 루프

by º기록 2021. 1. 13.
반응형

다음과 같은 직렬 데이터를 읽고 있습니다.

connected = False
port = 'COM4'
baud = 9600

ser = serial.Serial(port, baud, timeout=0)

while not connected:
    #serin = ser.read()
    connected = True

    while True:
        print("test")
        reading = ser.readline().decode()

문제는 bottle py 웹 프레임 워크를 포함하여 다른 것이 실행되는 것을 방지한다는 것입니다. sleep () 추가는 도움이되지 않습니다.

"while True" "를"while ser.readline () : "으로 변경하면"test "가 출력되지 않습니다. 이것은 Python 2.7에서 작동했기 때문에 이상합니다. 무엇이 잘못 될 수 있는가?

이상적으로는 가능한 경우에만 직렬 데이터를 읽을 수 있어야합니다. 1,000ms마다 데이터가 전송됩니다.

 

해결 방법

 

예를 들어, 별도의 스레드에 넣으십시오.

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()


 

참조 페이지 https://stackoverflow.com/questions/17553543

 

 

반응형

댓글