我正在尝试从超声波距离传感器读取串行数据。我得到的唯一输出是像这样的白色方块:
我有来自ebay的覆盆子pi 2和ME007-ULS v1超声波传感器,我从手册中得到了这个:
当触发引脚“2.Trigger”处于下降沿且为低电平时 水平保持在0.1到10毫秒,这将触发控制器工作 一次然后输出引脚“3.TX / PWM”将输出一帧3.3V TTL级串行数据
并且传感器的输出帧格式为:
这是我写的代码:
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个针脚:
答案 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']
它仍然不是我应该得到的阅读,但它越来越近了。我认为它与串口的错误读数有关,一旦我弄明白,我就会更新这个答案。我认为这是一个新问题的主题。