2

Arduino からシリアルに送信されたデータを印刷しようとしていますが、印刷できません。私の試みたコードはこれです:

import serial
import time
s = serial.Serial('/dev/tty.usbmodemfd141',9600)

while 1:
   if s.inWaiting():
      val = s.readline(s.inWaiting())
      print val

それでも、約 30 行ほど吐き出された後、次のエラー メッセージが表示されます。

Traceback (most recent call last):
  File "py_test.py", line 7, in <module>
    val = s.readline(s.inWaiting())
  File "build/bdist.macosx-10.8-intel/egg/serial/serialposix.py", line 460, in read
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected?)

inWaiting を間違って使用していると思いますが、他の方法で使用する方法がわかりません。

4

3 に答える 3

1

readline を try/except SerialException ブロックでラップしようとしましたか? 次に、SerialException を渡すだけです。受信バッファにデータがない場合、シリアル ドライバ レポート データに問題がある可能性があります。この場合、コードは実行され続けます。大した修正ではありませんが、正しい解決策につながる可能性があります。

try:
    s.read(s.inWaiting())
except serial.serialutil.SerialException:
    pass # or maybe print s.inWaiting() to identify out how many chars the driver thinks there is
于 2012-10-05T01:03:40.233 に答える
0

readline() ではなく関数 read() を使用したいと思います。バッファ内の文字数を取得していますが、必ずしも改行で終わるとは限りません

ループは次のようになります。

while 1:
   if s.inWaiting():
      val = s.read(s.inWaiting())
      print val
于 2012-10-05T01:29:30.113 に答える
0

シリアル接続されたデバイスから出力されるデータを単純に印刷したい場合は、readline()を使用して簡単に実行できます。最初にopen()を使用してポートを開き、次にreadline()を使用する必要があります。

注: /dev/ttyUSB0 は Linux のポート番号で、com0 は Windows のポート番号です。

ここにコードがあります

import serial 

BAUDRATE = 115200
device_name = "ttyUSB0"
tty = device_name
s = serial.Serial("/dev/" + tty, baudrate=BAUDRATE)

s.open()
print s

try:
    while True:
        line = s.readline()   //after this you can give the sleep time also as time.sleep(1) before that import time module.
        print line
finally:
    s.close()
于 2014-04-21T04:22:08.270 に答える