値をシリアルポート (USB) に継続的にダンプし続ける arduino ボードがあります。このデータは、pySerial ライブラリを使用する python スクリプトを使用して、マシンによって読み込まれます。私が使用したコードは次のとおりです。
import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1)
while True:
ser.flushInput() #Clear the serial input buffer
print "Value:"
print ser.readline()
print ser.readline()
print ser.readline()
time.sleep(30) #Wait for 30 seconds
これは完全に機能し、次の出力が得られます。
Value:
162
162
162
Value:
162
162
162
しかし、ループで 30 秒よりもはるかに大きな遅延を与える場合は、1 分以上と言います。
time.sleep(60) #Wait for 60 seconds
問題が発生し始めます。値の最初のセットが出力されています。それ以降、ser.readline() は常にタイムアウトになり、null 値が返されます!
出力:
Value:
162
162
162
Value:
Value:
シリアル モジュールがこの動作を示すのはなぜですか?
最初にシリアル値を読み取るために使用したマシンは、Raspian Linux を実行する Raspberry Pi ボードでした。この問題は、アイドル期間が発生したときに RPi が USB を低電力スリープに延期したことが原因である可能性があると考えました。しかし、ラップトップで同じコードをテストしたところ、同じ問題があり、他の問題である可能性があります.
24 時間 365 日稼働し、特定のイベントの発生時にシリアル値を読み取る必要があるシステムを構築したかったため、この動作は受け入れられません。
この問題に光を当ててください。