【问题标题】:python overlapping values from serialpython从串行重叠值
【发布时间】:2015-04-14 15:59:43
【问题描述】:

我的 arduino 通过 USB 连接到 pi,它使用下面的简单程序从 DHT 传感器发送读数(这个位在 arduino 串行监视器中按预期工作):

int chk = DHT.read11(DHT_PIN);
Serial.println(DHT.temperature,1);
delay(2000);

然后我有一个 python 程序应该从串口获取数据:

import serial
conn = serial.Serial('/dev/ttyACM0',9600)
temp = conn.readline()

print temp

然后在 php 中使用 $temp = shell_exec('python temp.py 2>&1'); 调用此脚本,该脚本工作正常,但我从序列中得到的值是错误的。

预期的输出应该类似于23.0,但是当我刷新页面(甚至在终端中运行python 脚本)时,我会得到2323.023.023.022..02 之类的值。这些内容一直在变化,很少以所需的格式出现。

似乎串行数据重叠,即使Serial.println() 函数将其放在新行上。如果有人能告诉我如何纠正这个问题,将不胜感激。

【问题讨论】:

    标签: php python arduino raspberry-pi pyserial


    【解决方案1】:

    试试print repr(temp) ...甚至print temp.strip()+" . "

    我非常怀疑当你读到你得到

    "23.0\r"
    

    \r 将光标返回到行首

    如果你这样做print "23.0\rB",你会看到"B3.0"

    (即我认为您看到重叠只是因为您正在打印它......)

    【讨论】:

    • 使用rep(temp) 方法只是给出'222.0\r\n' 并且值变化的问题仍然存在。 temp.strip()+" . " 只是增加了一个小数点和数字的结尾。
    【解决方案2】:

    已解决

    我浏览了一些网站,发现此页面http://www.elinux.org/Serial_port_programming 很有帮助。我查看了一些代码,发现在serial.Serial(...) 中使用我的原始代码时,我只是在逗号后输入了波特率,而没有指定baudrate=9600

    import serial
    port = serial.Serial('/dev/ttyACM0',baudrate=9600,timeout=3.0)
    temp = port.readline()
    
    print data
    

    此代码似乎已解决问题!这是它的截图http://gyazo.com/22e7801fd0d7cdf2873e627bb8b88fdc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-04
      • 2019-07-09
      • 2014-11-01
      • 2018-11-26
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2015-11-23
      相关资源
      最近更新 更多