2016-04-20 24 views
0

私はPythonを使ってArduinoと通信しようとしています。私はserialモジュールを使用して接続できました。これはコードです:PythonでArduinoと通信する

import serial 

while True: 
    print "Opening port" 
    arduinoData = serial.Serial("com7", 9600) 
    print "The port is open" 

    while (arduinoData.inWaiting()==0): #I wait for data 
    print "There is no data" 

    print "Reading data" 
    arduinoString = arduinoData.readline() 
    print arduinoString 

私がデータを読みたいときにはarduinoString = arduino.readline()を言うラインで、ぶら下がっているようです。

何が問題なのですか?

答えて

1

代わりにメインwhileループのwhileループを使用すると、if elseステートメントを使用できます。また、データを読み取るには、arduinoData.inWaiting()でread関数を使用して、arduinoData.read(arduinoData.inWaiting())のようなパラメータを使用できます。私は、このコードはあなたを助けることを願っています:

arduinoData = serial.Serial("com7", 9600) 

while True: 

    if arduinoData.inWaiting() > 0: # check if there is data available 
     print "Reading data" 
     arduinoString = arduinoData.read(arduinoData.inWaiting()) '''read and decode data''' 
     print arduinoString 

    else: 
     print "There is no data" 
+0

ありがとうございました。私はこのエラーを受け取ります: 'AttributeError: 'Serial'オブジェクトには 'ser'属性がありません。しかし、 'ser'を削除すると、ポートは開かれません。何か間違っているのですか? –

+0

申し訳ありませんが、この質問はgoofyと思われますが、まずシリアルモジュールをインポートしましたか? – mekoda

+0

はいまずシリアルをインポートしました。私はちょうどコードのその部分にそれを掲示しなかった。 –

0

さてさて、現実にserarduinoDataオブジェクトに存在しないので、あなたがAttributeError: 'Serial' object has no attribute 'ser'エラーを取得しています。私のプログラムで作成したクラスを考えていたので、これは私のせいです。これは、別のシリアルオブジェクトであるserを含んでいます。これを修正するにはarduinoData.serarduinoDataと置き換えます。

追加するには、arduinoDataをwhileループの外に宣言する必要があります。シリアルオブジェクトを作成するたびにArduinoに接続するのに時間がかかるため、これを行う必要があります。このため、プログラムがデータを読み取ることができない場合があります。

この回答がお役に立てば幸いです。

1

コードの構造が奇妙です。グローバルにすることなく、関数内でSerialオブジェクトを作成することで同様の問題が発生しました。おそらくループの外にこの線を置くべきでしょう:

arduinoData = serial.Serial("com7", 9600)

また、あなたの初期化は少し明るいようです。私は通常より多くのパラメータを使用しますが、ハードウェアによって異なります。

ser = serial.Serial( 
    port = 'com4', \ 
    baudrate = 19200, \ 
    parity=serial.PARITY_NONE, \ 
    stopbits=serial.STOPBITS_ONE, \ 
    bytesize = serial.EIGHTBITS, \ 
    timeout = 0.25) 

回避策は、あなたのreadlineのための()の問題ではなく、読み取り()機能を使用して、データが含まれているかどうかをチェックすることcoud。

希望すると助かります!

+0

返事が遅れて申し訳ありません。はい、あなたは正しいです。私は最高のためにより多くのパレーメータを設定しなければならない。あなたの答えと助けてくれてありがとう。 –

関連する問題