How to Fix TypeError: an integer is required in python 3.4, pyserial 2.7 virtual serial port
How to Fix TypeError: an integer is required in python 3.4, pyserial 2.7 virtual serial port
已编辑
你好程序员社区,
我在 Python 3.4 中处理 pyserial 时遇到一些问题
首先我没有串行端口,所以我使用 "Virtual Serial Port Driver 7.2 by Eltima Software" 成对创建虚拟串行端口,这意味着我可以尝试从这些端口发送和接收数据,在我的例子中我只是创建连接到 COM2 的 COM1,然后我安装了 HW 组的 Hercules SETUP 实用程序来监视这些串口,
所以理论上,如果我在 PYTHON 中发送(写入)数据,我可以在 HERCULES 中看到它,因为 LINK 显示 https://www.youtube.com/watch?v=DItyttmpRtY
我正在尝试创建自己的代码
def mInitizalise():
set_ser = serial.Serial(port="COM1", baudrate=9600,
parity = serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize = serial.EIGHTBITS,
timeout=1)
set_ser.close()
set_ser.open()
if set_ser.isOpen():
print ('Open: ' + set_ser.portstr)
temp = input('Type what you want to send, hit enter:\r\n')
set_ser.write(temp)
set_ser.close()
购买有误
>>>
>>> Open: COM1
Type what you want to send, hit enter:
hello
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python34\lib\idlelib\run.py", line 121, in main
seq, request = rpc.request_queue.get(block=True, timeout=0.05)
File "C:\Python34\lib\queue.py", line 175, in get
raise Empty
queue.Empty
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\me\Downloads\SerialTest.py", line 25, in <module>
ser.write(temp)
File "C:\Python34\lib\site-packages\serial\serialwin32.py", 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
有人可以帮助我吗
预先感谢您的帮助
你在 windows ...这个例子是 linux
试试 serial.Serial("COM1",9600)
(它可能实际上不在 "com1" 你需要它的实际 comN 名称)
通信端口在windows中被枚举为COM1..99 你可以在设备管理器中看到它是什么
我想出来了,------------棘手python---------请拉我上来,看看我的其他问题(当然有答案)
ok 先单线分配串口效果不如
#Method 1
set_ser = serial.Serial(port="COM1", baudrate=9600, parity = serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize = serial.EIGHTBITS, timeout=1)
这样写
#Method 2
set_ser = serial.Serial()
set_ser.port="COM1"
set_ser.baudrate=9600
set_ser.parity = serial.PARITY_NONE
set_ser.stopbits=serial.STOPBITS_ONE
set_ser.bytesize = serial.EIGHTBITS
set_ser.timeout=1
然后使用方法 2
第二个棘手的部分是这一行
set_ser.write(temp1.encode('utf-8'))
当Python分配命令.write时,它必须有.endcode()或.encode('utf-8')或('hex')或('ascii')等检查这个 link
https://docs.python.org/2/library/codecs.html#standard-encodings
和这个
http://www.tutorialspoint.com/python/string_encode.htm
现在最终代码是
def mSend():
global set_ser, a
set_ser = serial.Serial()
set_ser.port="COM1"
set_ser.baudrate=9600
set_ser.parity = serial.PARITY_NONE
set_ser.stopbits=serial.STOPBITS_ONE
set_ser.bytesize = serial.EIGHTBITS
set_ser.timeout=1
print ('Open: ' + set_ser.portstr)
a = 0
while a==0:
temp = input('write open\r\r')
if (temp == "open"):
set_ser.close()
set_ser.open()
while set_ser.isOpen():
temp1 = input('Type what you want to send, hit enter:\r\n')
set_ser.write(temp1.encode('utf-8'))
if (temp1 == "close"):
set_ser.close()
print ('\n\nClosed')
a = 1
elif (temp == "close"):
set_ser.close()
a = 1
else:
print ('unless you write open or close you can not move')
一个按钮可以调用这个函数(这段代码),它会打开串口,发送数据,直到用户写入"close"
只放整数,所以 COM7 set_ser.port= 7 ,但实际上你必须做 N-1 所以在设备管理器 Windows 你看到 COM7 => pythoncode: set_ser.port= 6
已编辑
你好程序员社区,
我在 Python 3.4 中处理 pyserial 时遇到一些问题
首先我没有串行端口,所以我使用 "Virtual Serial Port Driver 7.2 by Eltima Software" 成对创建虚拟串行端口,这意味着我可以尝试从这些端口发送和接收数据,在我的例子中我只是创建连接到 COM2 的 COM1,然后我安装了 HW 组的 Hercules SETUP 实用程序来监视这些串口,
所以理论上,如果我在 PYTHON 中发送(写入)数据,我可以在 HERCULES 中看到它,因为 LINK 显示 https://www.youtube.com/watch?v=DItyttmpRtY
我正在尝试创建自己的代码
def mInitizalise():
set_ser = serial.Serial(port="COM1", baudrate=9600,
parity = serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize = serial.EIGHTBITS,
timeout=1)
set_ser.close()
set_ser.open()
if set_ser.isOpen():
print ('Open: ' + set_ser.portstr)
temp = input('Type what you want to send, hit enter:\r\n')
set_ser.write(temp)
set_ser.close()
购买有误
>>>
>>> Open: COM1
Type what you want to send, hit enter:
hello
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python34\lib\idlelib\run.py", line 121, in main
seq, request = rpc.request_queue.get(block=True, timeout=0.05)
File "C:\Python34\lib\queue.py", line 175, in get
raise Empty
queue.Empty
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\me\Downloads\SerialTest.py", line 25, in <module>
ser.write(temp)
File "C:\Python34\lib\site-packages\serial\serialwin32.py", 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
有人可以帮助我吗
预先感谢您的帮助
你在 windows ...这个例子是 linux
试试 serial.Serial("COM1",9600)
(它可能实际上不在 "com1" 你需要它的实际 comN 名称)
通信端口在windows中被枚举为COM1..99 你可以在设备管理器中看到它是什么
我想出来了,------------棘手python---------请拉我上来,看看我的其他问题(当然有答案)
ok 先单线分配串口效果不如
#Method 1
set_ser = serial.Serial(port="COM1", baudrate=9600, parity = serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize = serial.EIGHTBITS, timeout=1)
这样写
#Method 2
set_ser = serial.Serial()
set_ser.port="COM1"
set_ser.baudrate=9600
set_ser.parity = serial.PARITY_NONE
set_ser.stopbits=serial.STOPBITS_ONE
set_ser.bytesize = serial.EIGHTBITS
set_ser.timeout=1
然后使用方法 2
第二个棘手的部分是这一行
set_ser.write(temp1.encode('utf-8'))
当Python分配命令.write时,它必须有.endcode()或.encode('utf-8')或('hex')或('ascii')等检查这个 link https://docs.python.org/2/library/codecs.html#standard-encodings 和这个 http://www.tutorialspoint.com/python/string_encode.htm
现在最终代码是
def mSend():
global set_ser, a
set_ser = serial.Serial()
set_ser.port="COM1"
set_ser.baudrate=9600
set_ser.parity = serial.PARITY_NONE
set_ser.stopbits=serial.STOPBITS_ONE
set_ser.bytesize = serial.EIGHTBITS
set_ser.timeout=1
print ('Open: ' + set_ser.portstr)
a = 0
while a==0:
temp = input('write open\r\r')
if (temp == "open"):
set_ser.close()
set_ser.open()
while set_ser.isOpen():
temp1 = input('Type what you want to send, hit enter:\r\n')
set_ser.write(temp1.encode('utf-8'))
if (temp1 == "close"):
set_ser.close()
print ('\n\nClosed')
a = 1
elif (temp == "close"):
set_ser.close()
a = 1
else:
print ('unless you write open or close you can not move')
一个按钮可以调用这个函数(这段代码),它会打开串口,发送数据,直到用户写入"close"
只放整数,所以 COM7 set_ser.port= 7 ,但实际上你必须做 N-1 所以在设备管理器 Windows 你看到 COM7 => pythoncode: set_ser.port= 6