次のコマンドを送信しようとしていますASCIIコマンド:close1
pySerialを使用して、以下は私の試みです:
import serial
#Using pyserial Library to establish connection
#Global Variables
ser = 0
#Initialize Serial Port
def serial_connection():
COMPORT = 3
global ser
ser = serial.Serial()
ser.baudrate = 38400
ser.port = COMPORT - 1 #counter for port name starts at 0
#check to see if port is open or closed
if (ser.isOpen() == False):
print ('The Port %d is Open '%COMPORT + ser.portstr)
#timeout in seconds
ser.timeout = 10
ser.open()
else:
print ('The Port %d is closed' %COMPORT)
#call the serial_connection() function
serial_connection()
ser.write('open1\r\n')
しかし、その結果、次のエラーが発生します。
Traceback (most recent call last):
, line 31, in <module>
ser.write('open1\r\n')
, line 283, in write
data = to_bytes(data)
File "C:\Python34\lib\site-packages\serial\serialutil.py", line 76, in to_bytes
b.append(item) # this one handles int and str for our emulation and ints for Python 3.x
TypeError: an integer is required
どうすればそれを解決できるかわかりません。 close1は、送信したいASCIIコマンドの例にすぎません。また、ロックが開いているか閉じているかなどを確認するstatus1もあります。
前もって感謝します
この問題は、Python 3が文字列を内部的にユニコードとして保存しているのに、Python 2.xは保存していないために発生します。 PySerialは、bytes
へのパラメーターとしてbytearray
またはwrite
を取得することを期待しています。 Python 2.xでは文字列型で問題ありませんが、Python 3.xでは文字列型がUnicodeであるため、pySerialwrite
が必要とするものと互換性がありません。
Python 3でpySerialを使用するには、 bytearray を使用する必要があります。したがって、コードは代わりに次のように見える必要があります。
ser.write(b'open1\r\n')