2017-07-14 12 views
2

私は配列[0, 100, 150, 175, 255]をシリアル経由でPythonで送信しようとしています。私はbytearrayに変換して送信します。シリアルポート経由で小数点配列を送受信する方法は?

データIが

['\x00', 'd', '\x96', '\xaf', '\xff']のようなルックスを受けていると私は[0, 100, 150, 175, 255]に戻ることはできません。

このようなデータを送受信するより良い方法はありますか?私はPythonには新しく、いくつかの方法には慣れていません。

これは私が使用しているコードです。

SEND

import serial 
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=10) 
elements= [0,100,150,175,255] 
data2=bytearray(elements) 

while True: 
     ser.write(data2) 

はありがとう

import serial 
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=10) 
vect = [] 

while True: 
     vect.extend(ser.read()) 

を受けます。

答えて

0

あなたは[0, 100, 150, 175, 255]に戻ることができます!あなたはbytearrayからデータを送信していますが、データを受け取るにはbytearrayも使用する必要があります。受信したバイトを整数に変換するには、bytearraylist()に渡すだけです。

elements = [0, 100, 150, 175, 255] 

# Buffer for sending data 
data2 = bytearray(elements) 

# Buffer for reading data 
rdata = bytearray() 

# Simulate sending data over the serial port 
rdata.extend(data2[0:2]) 
rdata.extend(data2[2:5]) 

vect = list(rdata) 
print(vect) 

出力

[0, 100, 150, 175, 255] 

このコードは、Python 2と真剣にPythonの3

0

ここはeval()を使用したくなります

while True: 
     vect = eval(ser.read().decode('unicode_escape')) 

しかし、はそれを使用しないでください。一般にeval()を使用することは悪いです。私は@ PM2Ringの答えが良いと思います。

+0

の両方で正常に動作する:ここで

デモですか? 'eval'と' 'unicode_escape'' ??? –

+0

@ PM2Ringその問題は何ですか? –

+1

'eval'は他のオプションがない場合にのみ使用してください。 'eval'は遅いだけでなく、' eval'と 'exec'はセキュリティリスクの可能性があるので避けるべきです。任意のunsanitisedデータを 'eval'に渡すことは、非常に安全です。詳細は、SOベテランNed Batchelderの[Eval really dangerous](http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html)を参照してください。 –

0

はintにあなたが受け取る文字を変換しよう:もちろん

vect.extend([ord(ch) for ch in ser.read()]) 
関連する問題