PySerial不与Arduino交谈

问题描述 投票:8回答:5

我已经编写了一些代码来模拟正在使用的某些硬件,并将其上载到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

超级终端配置:

“超级终端中的COM4配置”“>

编辑

[我发现,如果我将超时时间增加到10秒并在发送任何内容之前添加sp.readline(),那么我会收到对这两个命令的响应。

PySerial与Arduino或USB RS-232端口之间的硬件握手通常需要多长时间?

Python版本:2.6.6 PySerial版本:2.5 Arduino开发板:Duemilanove 328我已经编写了一些代码来模拟正在使用的某些硬件,并将其上传到Arduino开发板。此代码有效。我...

python windows serial-port arduino pyserial
5个回答
5
投票

无法验证,但可能是您尝试读取之前没有任何数据,因此您没有得到回复。


3
投票

暂时而言,我正在使用一种解决方法。我已将timeout设置为1.5秒,并在首次写入之前进行了readline调用。


2
投票

我最近也遇到了这个问题,这是我的解决方案:


0
投票

在打开端口后增加延迟,因为Arduino复位并且引导程序开始监听新固件。如果此时发送了某些内容,则MCU仍停留在引导加载程序中。延迟导致引导加载程序超时。


0
投票

您可以使用兼容的库SerialTransfer.hpySerialTransfer轻松强大地在Python和Arduino板之间进行连接和通信。这些库使用开始/结束标记,循环冗余检查,一致的开销字节填充和动态有效载荷长度来自动打包和解析串行数据包。

© www.soinside.com 2019 - 2024. All rights reserved.