我通过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.0
,23.023.0
,{{1 }和22..0
。这些都在变化,很少以理想的格式出现。
似乎来自串行的数据是重叠的,即使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中的屏幕截图。