我已经编写了一些代码来模拟正在使用的某些硬件,并将其上载到Arduino板。此代码有效。我知道这一点,因为我从超级终端获得了预期的响应。
但是,当我尝试使用PySerial进行连接时,连接不会出错,但是对发送的命令没有任何响应。
为什么会这样?
Python代码
import serial
def main():
sp = serial.Serial()
sp.port = 'COM4'
sp.baudrate = 19200
sp.parity = serial.PARITY_NONE
sp.bytesize = serial.EIGHTBITS
sp.stopbits = serial.STOPBITS_ONE
sp.timeout = 0.5
sp.xonxoff = False
sp.rtscts = False
sp.dsrdtr = False
sp.open()
sp.write("GV\r\n".encode('ascii'))
value = sp.readline()
print value
sp.write("GI\r\n".encode('ascii'))
value = sp.readline()
print value
sp.close()
if __name__ == "__main__":
main()
注意:Arduino上的代码在对命令的响应结束时发回\r\n
。
超级终端配置:
“>
[我发现,如果我将超时时间增加到10秒并在发送任何内容之前添加sp.readline()
,那么我会收到对这两个命令的响应。
PySerial与Arduino或USB RS-232端口之间的硬件握手通常需要多长时间?
Python版本:2.6.6 PySerial版本:2.5 Arduino开发板:Duemilanove 328我已经编写了一些代码来模拟正在使用的某些硬件,并将其上传到Arduino开发板。此代码有效。我...
无法验证,但可能是您尝试读取之前没有任何数据,因此您没有得到回复。
暂时而言,我正在使用一种解决方法。我已将timeout
设置为1.5秒,并在首次写入之前进行了readline
调用。
我最近也遇到了这个问题,这是我的解决方案:
在打开端口后增加延迟,因为Arduino复位并且引导程序开始监听新固件。如果此时发送了某些内容,则MCU仍停留在引导加载程序中。延迟导致引导加载程序超时。
您可以使用兼容的库SerialTransfer.h和pySerialTransfer轻松强大地在Python和Arduino板之间进行连接和通信。这些库使用开始/结束标记,循环冗余检查,一致的开销字节填充和动态有效载荷长度来自动打包和解析串行数据包。