【问题标题】:pySerial writes to Arduino Uno get bufferedpySerial 写入 Arduino Uno 得到缓冲
【发布时间】:2014-09-11 22:52:57
【问题描述】:

我有一个 Python 脚本,它使用 pySerial 将短消息写入我的 Arduino Uno 板上的串行端口。有一个循环,根据某些条件,循环内可能会发生多次写入,如下所示:

while True:
    #Conditions block 1
    if <CONDITION1>:
        serial.writelines("INIT")
    elif <CONDITION2>:
        serial.writelines("NEW")
    ...

    #Conditions block 2
    if <CONDITION1>:
        # Fetch something from the Internet
        serial.writelines("CHECK")
    elif <CONDITION2>:
        # Fetch something from the Internet
        serial.writelines("STOP")
    ...

但是,当我的 Arduino 板收到此消息时,它会收到第一条消息作为 INIT,但第二条消息被读取为 INITSTOP 或 INITCHECK,第三条消息与之前的消息连接。我的 arduino 程序以这种方式检查特定消息:

if(msg.equals("CHECK")) {
    // Do something
}
else if(msg.equals("INIT")) {
    // Do Something else
}

有人可以指导我吗?顺便说一句,我认为问题不在于 Arduino,因为当我使用 IDE 提供的串行监视器对其进行测试时,它可以完美运行。

我尝试在每次写入前添加长达 10 秒的睡眠,但没有成功。

【问题讨论】:

    标签: serial-port arduino pyserial


    【解决方案1】:

    试试这个:

    serial.write("INIT\r")
    

    writelines 可能需要一个列表(但我现在无法检查)。

    【讨论】:

    • 感谢负载。我正在使用的 pySerial 版本中没有 writeline(),但我使用 write() 来实现相同的效果。出于某种原因,它只是奏效了。我猜它与行尾字符有关......
    • 好的,编辑了我的回复。我也那么认为。您需要明确地编写行终止符,就像您键入它一样。
    • 我不这么认为,通常另一端是在 CR 上定界,只是刷新会给它字符,它仍然会等待定界符。
    • 我正在检查 Arduino 程序中的“\n”字符。无论 writelines 使用的是 \n 还是 \r\n,它都应该可以正常工作。我从来没有怀疑过并且很惊讶 writelines 是问题所在。我仍然认为它与串行连接有关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-18
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多