web-dev-qa-db-ja.com

pySerial write()は私の文字列を取りません

Python 3.3およびpySerialをシリアル通信に使用します。

COMポートにコマンドを書き込もうとしていますが、書き込みメソッドは文字列を受け取りません。 (コードの大部分はここからです pySerialパッケージの使用の完全な例

どうしたの?

import time
import serial


ser = serial.Serial(
    port='\\\\.\\COM4',
    baudrate=115200,
    parity=serial.PARITY_ODD,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS
)
if ser.isOpen():
    ser.close()
ser.open()
ser.isOpen()

ser.write("%01#RDD0010000107**\r")
out = ''
# let's wait one second before reading output (let's give device time to answer)
time.sleep(1)
while ser.inWaiting() > 0:
    out += ser.read(40)

if out != '':
    print(">>" + out)


ser.close()

エラーはser.write( "%01#RDD0010000107 **\r")にあり、トレースバックは次のようになります。data = to_bytes(data)b.append(item)TypeError:整数が必要です。

21
Garvin

文字列をバイト配列に変換する必要があり、これを行うにはコードを編集して

ser.write("%01#RDD0010000107**\r".encode())

これで問題が解決しました

29
Garvin

根本原因が見つかりました。または、次のようにします。

ser.write(bytes(b'your_commands'))
7
Murphy Meng

書き込みをしようとしたときに、同じ「TypeError:整数が必要です」というエラーメッセージが表示されました。おかげで、.encode()で解決してくれました。 32ビットWindowsを実行しているDell D530でpython 3.4を実行していますXP Pro。

ここではcomポート設定を省略しています。

>>>import serial

>>>ser = serial.Serial(5)

>>>ser.close()

>>>ser.open()

>>>ser.write("1".encode())

1

>>>
1
user3577539