2017-06-13 28 views
0

私は血圧計から、ラズベリーpi3のpythonを使ってデータを取得しようとしています。私はグーグルとpythonを使用してデータを取得するいくつかの例が見つかりました。Pythonシリアルに関する問題:ValueError:開いていないポートを使用しようとしています

マイコード:

#!/usr/bin/python 
import serial 
neo = serial.Serial(
    port='/dev/ttyUSB0', 
    baudrate=9600, 
    parity=serial.PARITY_NONE, 
    stopbits=serial.STOPBITS_ONE, 
    bytesize=serial.EIGHTBITS, 
    timeout=0 
) 
print("connected to: " + neo.portstr) 

#neo.open()  #opens port 
print "Is port open ? ",neo.isOpen() #returns true? 

#ser.write("help\n"); 
while True: 
    dataline = neo.readline(); 
    if dataline: 
     print(dataline), neo.close() 

私は "sudoのパイソンpyusb.py" コマンドを使用して、コードの上に走ったとき、それは次のエラーを返すさ:非コメントしている場合

connected to: /dev/ttyUSB0 
Is port open ? True 
None 
Traceback (most recent call last): 
    File "pyusb.py", line 18, in <module> 
    dataline = neo.readline(); 
    File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 443, in read 
    if not self._isOpen: raise portNotOpenError 
ValueError: Attempting to use a port that is not open 

neo.open() "それは別のエラーを投げています:

connected to: /dev/ttyUSB0 
Traceback (most recent call last): 
    File "pyusb.py", line 13, in <module> 
    neo.open()  #opens port 
    File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 271, in open 
    raise SerialException("Port is already open.") 
serial.serialutil.SerialException: Port is already open. 

私は同様の問題hereを見ました。しかし、 "serial.Serial(")メソッドのオーバーライドに問題があります。上記のコードで何が間違っているのかを正確に特定することはできません。誰かが私を助けてくれる、私が間違ってやっていることはありますか?

答えて

1

pyserialのドキュメントを見る場合、http://pyserial.readthedocs.io/en/latest/shortintro.html#readlineは、readline()を使用するときにタイムアウトを指定する必要があると言います。これは、readline()が各送信の終了時にEOL文字を待つためです。

import serial 
neo = serial.Serial(
    port='/dev/ttyUSB0', 
    baudrate=9600, 
    parity=serial.PARITY_NONE, 
    stopbits=serial.STOPBITS_ONE, 
    bytesize=serial.EIGHTBITS, 
    timeout=1 
) 
print("connected to: " + neo.portstr) 

while True: 
    dataline = neo.readline(); 
    print dataline 
+0

ありがとうNick Hale次のようなものを使用して、タイムアウトを1に増やしてみてください。タイムアウト= 1が働いた。しかし、私はまだデータを受け取ってもポートが開かれている問題ではない。私が "neo.close()"という行にコメントした場合、そのエラーは消えます。何が間違っている?ポートを不適切に閉じようとしていますか? – Kiran

+0

だから 'neo.close'はポートを完全に閉じ、再オープンするには' neo.open'を使う必要があります。なぜそれを閉じる必要がありますか? Pythonスクリプトが終了すると終了します。読み込みの間に閉じる必要はなく、 'file.open()'や 'file.close()'のようには動作しません。 –

+0

明示するために、 'neo = serial.Serial( ...) ')し、好きなだけ何度でも読むことができます。好きなときにポートが開いたら、開いたままにして、いつでも読み書きができます。 –

関連する問題