如何修复TypeError:python 3.4、pyserial 2.7虚拟串行端口中需要一个整数
已编辑 你好,程序员社区,如何修复TypeError:python 3.4、pyserial 2.7虚拟串行端口中需要一个整数,python,python-2.7,serial-port,usb,pyserial,Python,Python 2.7,Serial Port,Usb,Pyserial,已编辑 你好,程序员社区, 我在处理Python3.4中的pyserial时遇到了一些问题 首先,我没有串行端口,所以我使用“Eltima软件的虚拟串行端口驱动程序7.2”成对创建虚拟串行端口,这意味着我可以尝试从这些端口发送和接收数据,在我的情况下,我只创建连接到COM2的COM1,然后我通过HW group安装了Hercules SETUP utility来监视这些串行端口 因此,从理论上讲,如果我用PYTHON发送(写入)数据,我可以在HERCULES中看到它,如此链接所示 我试图创建自己
我在处理Python3.4中的pyserial时遇到了一些问题 首先,我没有串行端口,所以我使用“Eltima软件的虚拟串行端口驱动程序7.2”成对创建虚拟串行端口,这意味着我可以尝试从这些端口发送和接收数据,在我的情况下,我只创建连接到COM2的COM1,然后我通过HW group安装了Hercules SETUP utility来监视这些串行端口 因此,从理论上讲,如果我用PYTHON发送(写入)数据,我可以在HERCULES中看到它,如此链接所示 我试图创建自己的代码
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
>
>>>开放:COM1
键入要发送的内容,按enter键:
你好
Tkinter回调中的异常
回溯(最近一次呼叫最后一次):
文件“C:\Python34\lib\idlelib\run.py”,第121行,在main中
seq,request=rpc.request\u queue.get(block=True,timeout=0.05)
get中第175行的文件“C:\Python34\lib\queue.py”
空举
排队,空的
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“C:\Users\me\Downloads\SerialTest.py”,第25行,在
序列写入(临时)
写入文件“C:\Python34\lib\site packages\serial\serialwin32.py”,第283行
数据=到字节(数据)
文件“C:\Python34\lib\site packages\serial\serialutil.py”,第76行,以字节为单位
b、 append(item)#这个函数为我们的仿真处理int和str,为python3.x处理int
TypeError:需要一个整数
谁能帮帮我吗
事先感谢您的帮助您使用的是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')等。请检查此链接
这个呢
现在最后的代码是
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\u ser.port=7,但实际上您必须执行N-1,因此在设备管理器窗口中,您会看到COM7=>pythoncode:set\u ser.port=6谢谢,我的代码行吗,你知道我可以在串口上写的其他例子吗?你是什么意思?它有用吗?没有太多。。。问题是什么?我的意思是它不工作,当我将端口更改为“COM3”时,它表示系统找不到指定的文件,我只想要一个pyserial for Python3.4的简单示例,我可以在我的计算机windows 8上尝试,你完全改变了这个问题。。。这正是您最初问题的答案。我确实这样做了,正如您所说,我已将端口更改为(“COM1”,9600),但我仍然有这个错误,TypeError:需要一个整数