2016-08-02 1 views
0

私はpyserial Pythonライブラリを使用してArduinoからシリアルデータを読み込みます。新しいデータをポーリングするには、1秒に数回呼び出す必要があるupdate()メソッドを実装する必要があります。これは、通信が行われていないときでさえ、CPUが集中して遅くなります。OnSerialData()Pythonのイベント?

OnSerialData()イベントは利用できますか?新しいシリアルデータがバッファに到着するたびに実行されるルーチン?私が扱った他のほとんどの言語には同等のものがあります。

私はかなりthreadingに慣れていませんが、それが関与していると感じています。

答えて

1

標準的なアプローチはスレッドを使用することです。

この動作するはずのような何か:http://stackoverflow.com/a/:

import threading 
import serial 
import io 
import sys 

exit_loop = False 

def reader_thread(ser): 
    while not exit_loop: 
    ch = ser.read(1) 
    do_something(ch) 

def do_something(ch): 
    print "got a character:", ch 

ser = serial.serial_for_url(...) 
thr = threading.Thread(target = reader_thread, args=[ser]) 
thr.start() 

# when ready to shutdown... 

exit_loop = True 
if hasattr(ser, 'cancel_read'): 
    ser.cancel_read() 
thr.join() 

また(。またpyserialライブラリに含まれている)serial.threadedモジュール

+0

を参照してください。また、このSO答えを見ます17564557/866915 – ErikR

関連する問題