python重叠来自串行的值

时间:2015-04-14 15:59:44

标签: php python arduino raspberry-pi pyserial

我通过usb将我的arduino连接到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

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

预期输出应该类似于23.0,但是当我刷新页面(甚至在终端中运行python脚本)时,我得到的值是2323.023.023.0,{{1 }和22..0。这些都在变化,很少以理想的格式出现。

似乎来自串行的数据是重叠的,即使2函数将它放在一个新行上。如果有人能告诉我如何纠正这一点,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

当你读到你时,我非常怀疑

"23.0\r"

\r将光标返回到行的开头

如果您执行print "23.0\rB",则会看到"B3.0"

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

答案 1 :(得分:0)

<强>解决

我在几个网站上环顾四周,发现此页面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中的屏幕截图。