如何使用python和raspberry pi 2从串口读取传感器数据

时间:2017-01-29 16:33:51

标签: python serial-port raspberry-pi

我正在尝试从超声波距离传感器读取串行数据。我得到的唯一输出是像这样的白色方块:

output example

我有来自ebay的覆盆子pi 2和ME007-ULS v1超声波传感器,我从手册中得到了这个:

  

当触发引脚“2.Trigger”处于下降沿且为低电平时   水平保持在0.1到10毫秒,这将触发控制器工作   一次然后输出引脚“3.TX / PWM”将输出一帧3.3V   TTL级串行数据

并且传感器的输出帧格式为:

output frame

这是我写的代码:

import RPi.GPIO as GPIO
import time
from serial import Serial

#GPIO mode
GPIO.setmode(GPIO.BCM)
#assign GPIO pins
GPIO_TRIGGER = 18
#direction of GPIO-Pins (IN / OUT)
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)

def uss_funct():
    ser = Serial('/dev/ttyAMA0', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=3)

    # set trigger HIGH, sensor is waiting for falling edge
    GPIO.output(GPIO_TRIGGER, True)
    # set trigger LOW after 10ms -> Falling Edge
    time.sleep(0.01000)
    GPIO.output(GPIO_TRIGGER, False)      
    # set trigger back HIGH after 2ms, as LOW is supposed to be between 0.1-10ms
    time.sleep(0.00200)
    GPIO.output(GPIO_TRIGGER, True)

    #read from rx
    test_output = ser.read()
    ser.close()

    #clean up GPIO pins
    GPIO.cleanup()

    print (test_output)

if __name__ == '__main__':
    uss_funct()

我认为我接线正确,但以防万一 - 这就是我连接传感器的方式:

超声波传感器有5个针脚:

  1. 3.3-12V输入(连接到3.3v输出)
  2. 触发器(连接到GPIO 18)
  3. TX输出(连接到GPIO 10)
  4. 数字输出(未连接)
  5. GND(连接到GND)

2 个答案:

答案 0 :(得分:0)

默认情况下,Serial.read()只读取一个字节。你需要阅读6:

# read from rx
test_output = ser.read(size=6)

然后看看你有什么尝试:

print(repr(test_output))

答案 1 :(得分:0)

我能够通过创建一个空列表来解决我的问题并摆脱白色方块,然后附加ser.read()给出的任何输出:

data_output = []

def uss_function():

(...)

#read from rx
data_output.append(ser.read(6))
ser.close()

这给了我这样的输出: ['\x00\xff\x01V\x00\xcc']它仍然不是我应该得到的阅读,但它越来越近了。我认为它与串口的错误读数有关,一旦我弄明白,我就会更新这个答案。我认为这是一个新问题的主题。