我正在尝试将一个串行设备(特别是气溶胶粒子计数器)连接到Pi。目前,我有一个连接Pi和设备的USB转串口适配器。当我运行此程序以从串行设备读取数据时:
import time
import serial
ser = serial.Serial('/dev/ttyUSB0')
print "connected"
ser.flushInput()
time.sleep(1)
while True:
ser.read(ser.inWaiting())
resp = ser.readline()
print resp
time.sleep(1)
我看到控制台上印有两个数字(气溶胶颗粒数):
56,4
63,2
68,1
42,2
72,9
62,8
74,5
77,7
73,4
54,6
65,6
67,2
65,1
80,4
这些数字根据房间内的颗粒数而波动。换句话说,这段代码工作正常。
但是,我想摆脱这个USB串口适配器。因此,我直接将TX,RX和接地引脚与导线连接(Pi上的TX到器件上的RX,反之亦然)。现在,当我使用/dev/ttyAMA0
代替/dev/ttyUSB0
:
import serial
import time
ser = serial.Serial('/dev/ttyAMA0')
print "connected"
ser.flushInput()
time.sleep(1)
while True:
resp = ser.read(1)
print ord(resp)
time.sleep(1)
我看到这打印到控制台:
100
230
77
166
207
15
0
101
102
154
51
121
61
0
101
153
154
153
158
61
0
当程序运行时,这个六个数字后跟一个零的模式继续。
注意:我运行“类似”程序而不是相同程序的原因是因为readline()函数从设备读取字节直到读取新行字符,因此不能与直接串行连接一起使用因为串行数据中没有换行符。相反,使用直接串行数据,Pi读取每个字节并打印出它的unicode字符编号。另一方面,使用USB串行转换器连接读入的数据确实包含换行符。
我想知道如何通过串行连接(RX / TX)获取USB串行转换器显示的粒子数。
其他信息:
Python 2.7.11
'serial'文档:http://pythonhosted.org/pyserial/pyserial_api.html#classes
两个连接的波特率均为9600
两个连接都没有奇偶校验
read(bytes)函数从设备读取相应的字节数
readline()函数从设备读取字节,直到新的行字符
ord('char')是一个内置的Python函数,它返回作为参数的Unicode字符的相应整数
inWaiting()给出了Pi输入缓冲区中的字节数
Pi模型:A
OS:Raspbian wheezy
由于
答案 0 :(得分:0)
可能存在问题的一个问题是PI串行引脚可以使用3v3逻辑而不是5v。如果您的传感器以5v逻辑发送数据,则可能会弄乱PI。
如果你在ttyAMA0上启用了linux终端会话,你应该检查另一件事。这是您可以在/boot/cmdline.txt
您可能会看到console=ttyAMA0,115200
之类的条目。删除它并重新启动。