【问题标题】:how to read sensor data from serial port using python and raspberry pi 2如何使用 python 和树莓派 2 从串口读取传感器数据
【发布时间】:2017-01-29 16:33:51
【问题描述】:

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

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

当触发引脚“2.Trigger”处于下降沿且低电平时 电平保持在0.1到10ms,这将触发控制器工作 一次,然后输出引脚“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个引脚:

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

【问题讨论】:

    标签: python serial-port raspberry-pi


    【解决方案1】:

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

    data_output = []
    
    def uss_function():
    
    (...)
    
    #read from rx
    data_output.append(ser.read(6))
    ser.close()
    

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

    【讨论】:

    【解决方案2】:

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

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

    然后看看你有什么尝试:

    print(repr(test_output))
    

    【讨论】:

    • 嘿@stephen,谢谢你的帮助。我确实知道 Serial.read() 只读取一个字节。首先,我只想正确读取一次,然后尝试获取所有字节。我的实际问题是我只能取回那个被蓝框包围的空白盒子(见上图)。 test_output = ser.read(size=6)根本没有返回任何东西。我想我确实通过首先创建一个空列表找到了解决方案(看看我的答案),但它似乎仍然不是 100% 正确。
    • @tintin13,刚刚编辑了我的答案以帮助显示您实际拥有的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 2015-07-19
    • 2015-04-26
    • 1970-01-01
    相关资源
    最近更新 更多