- Python版本:2.6.6
- PySerial版本:2.5
- Arduino板: Duemilanove 328
我编写了一些代码来模拟我正在使用的硬件,并将其上传到Arduino板。这段代码是有效的。我知道这一点,因为我从HyperTerminal得到了预期的响应。
然而,当我尝试使用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
。HyperTerminal配置:
![COM4 configuration in HyperTerminal](https://istack.dev59.com/AUvAL.webp)
我发现如果将超时时间增加到10秒,并在发送任何内容之前添加
sp.readline()
,那么我将得到两个命令的响应。PySerial和Arduino或USB RS-232端口之间通常需要多长时间进行硬件握手?
\r\n
结尾。虽然常规文本行通常以\r\n
结尾,但是发送的命令通常只以单个字符\r
结尾,就像人类用户输入的一样。如果发送了\n
,它可能会被解释为下一个命令的开始,并且可能会挂起或触发其他不良结果。 - RufusVS