python 来自序列的重叠值

python overlapping values from serial

我的 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() 函数将其放在新的一行。如果有人能告诉我如何更正此问题,将不胜感激。

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

我非常怀疑当你阅读时你得到了

"23.0\r"

\r returns 你的光标到行首

如果你这样做 print "23.0\rB" 你会看到 "B3.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