我试图将整数发送到Arduino,因此我在Python 2.7版本中编写了以下代码:
import serial
import time
ser = serial.Serial('COM8', 9600, timeout = 1)
# let it initialize
ser.open()
time.sleep(2)
ser.write(1)
while 1:
bytess = ser.readline()
print 'you sent : ' + bytess
在这里,我忘记使用ser.close()
所以现在当我再次尝试运行上面的代码时,它显示错误:
File "D:/python/python to arduino.py", line 20, in <module>
ser.open()
File "C:\Python27\lib\site-packages\serial\serialwin32.py", line 41, in open
raise SerialException("Port is already open.")
serial.serialutil.SerialException: Port is already open.
为了避免这个错误,我拔下我的Arduino电缆并重新启动Python,但它没有帮助。在Matlab中针对同样的问题,如果我们关闭Matlab,问题就解决了,但是Python没有发生同样的事情。我现在想知道如何关闭这个开放端口。即使重启我的笔记本电脑,也会出现同样的错误。
感谢。
答案 0 :(得分:2)
在pySerial documentation about the Serial
class中:
当给出一个 port 时,该端口会在对象创建后立即打开。当 port 是
None
且需要连续调用open()
时,它不会打开。
因此,当您执行ser = serial.Serial('COM8', 9600, timeout = 1)
时,您已经按照指定的'COM8'
打开了端口,因此不必再次打开它。
答案 1 :(得分:0)
我也发现了这个问题。 我的序列号是RS232,只需将设备的Grounding / RX / TX连接到笔记本电脑即可。 我只是忽略了打开步骤,而是直接将cmd写入序列,但是得到了收集反馈。 所以,我想我们在某些情况下不必先打开串行