如何在没有USB转串口适配器的情况下将串行设备连接到Raspberry Pi?

时间:2016-06-06 18:31:38

标签: python serial-port raspberry-pi usb pyserial

我正在尝试将一个串行设备(特别是气溶胶粒子计数器)连接到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

由于

1 个答案:

答案 0 :(得分:0)

可能存在问题的一个问题是PI串行引脚可以使用3v3逻辑而不是5v。如果您的传感器以5v逻辑发送数据,则可能会弄乱PI。

如果你在ttyAMA0上启用了linux终端会话,你应该检查另一件事。这是您可以在/boot/cmdline.txt

中设置的选项

您可能会看到console=ttyAMA0,115200之类的条目。删除它并重新启动。