树莓派如何输出高低电平

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树莓派如何输出高低电平相关的知识,希望对你有一定的参考价值。

参考技术A 树莓配如何输出高低电平这个距离的要看他的各方面的热熔布的情况才知道它的输出电平是多少。 参考技术B 这个你可以直接使用一个锂电池,然后放在上面,这样的话就可以进行输出来高低电平的,而且这个电瓶使用起来都是非常的方便。

如何使用 python 和树莓派 2 从串口读取传感器数据

【中文标题】如何使用 python 和树莓派 2 从串口读取传感器数据【英文标题】:how to read sensor data from serial port using python and raspberry pi 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个引脚:

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

【问题讨论】:

【参考方案1】:

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

data_output = []

def uss_function():

(...)

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

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

【讨论】:

将它添加到列表中并没有改变任何东西,除了 python 向您显示数据的方式。看到这个帖子:***.com/questions/41763295/…【参考方案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,刚刚编辑了我的答案以帮助显示您实际拥有的内容。

以上是关于树莓派如何输出高低电平的主要内容,如果未能解决你的问题,请参考以下文章

树莓派-语音聊天机器人+语音控制引脚电平高低

树莓派wiringPi经常使用的函数介绍

【原创】树莓派3B开发Go语言(四)-自写库实现pwm输出

树莓派控制mg995舵机如何控制

实时指令控制继电器(树莓派)

树莓派——步进电机+驱动器 篇