Python Gpiozero 中文API(一) - Input Devices - Button

5 篇文章 0 订阅
5 篇文章 0 订阅

Python Gpiozero 中文API(一) - Input Devices - Button

原文:https://www.cooooder.com/archives/2020122501

GPIO Zero库是一个用于处理GPIO引脚的Python库,旨在直观和“友好”,它简化了大多数常规Raspberry Pi用例的Python代码。

class Button 继承于 DigitalInputDevice,代表一个简单的按钮或者开关
按钮的一端连接地线,另一端连接到任何GPIO引脚;或者按钮的一端连接3V3引脚,另一端连接任何GPIO引脚,然后在Button的初始化构造方法设置pull_up为False

构造方法参数

class gpiozero.Button(pin, *, pull_up=True, active_state=None, bounce_time=None, hold_time=1, hold_repeat=False, pin_factory=None)

  • pin
    • 参数类型:int或者string
    • 表示按钮连接的GPIO引脚号码,引脚号参考 Broadcom
    • 若设置为None,会抛 GPIODeviceError 异常
  • pull_up
    • 参数类型:bool或者None
    • 表示使用内部电阻器上拉该引脚
    • 设置为True(默认)时,上拉电阻将GPIO引脚设置为“高”,按钮另一端需连接地线
    • 设置为Flase时,上拉电阻将GPIO引脚设置为“低”,按钮另一端需连接3V3引脚
    • 设置为None时,GPIO引脚悬空,gpiozero无法猜测活动状态,必须设置active_state
  • active_state
    • 参数类型:bool或者None
    • 设置为True时,当硬件引脚状态为“高”,软件显示引脚状态也为“高”
    • 设置为False时,则输入的极性相反,当硬件引脚状态为“高”,软件显示引脚状态为“低”
    • 当pull_up设置为None时,使用该参数设置未知的引脚活动状态
    • 当pull_up设置为True或者False时,引脚的活动状态被将自动赋值
  • bounce_time
    • 参数类型:float
    • 一般开关在大约20ms内信号不稳定,存在所谓的“开关抖动”
    • 设置为None时,将不执行软件抖动补偿,否则该参数是组件在初始更改后忽略的时间长度(秒),默认1s
  • hold_time
    • 按下按钮后直到 when_held 执行前等待的时间(秒)
  • hold_repeat
    • 参数类型:bool
    • 当设置为True时:每隔hold_repeat秒重复执行 when_held
    • 当设置为False(默认)时:when_held 仅执行1次
  • pin_factory
    • Gpiozero库对很多GPIO相关功能进行了封装,但它自己并不实现GPIO口底层的操作,而是借由一些现有的库来实现,Pin Factory就是用来连接上层和底层库的。
    • 默认情况下大部分Gpiozero库功能都是由RPi.GPIO库来实现的,可以通过Pin Factory来更改所使用的库,参考 Pin Factory
from gpiozero.pins.native import NativeFactory
from gpiozero import Device, LED

Device.pin_factory = NativeFactory()

# 方式一
# led1和led2 均替换为 NativePin
led1 = LED(16)
led2 = LED(17)

# 方式二
# led1使用 NativePin 替换 RPiGPIOPin
# led2使用 RPiGPIOPin
led1 = LED(16, pin_factory=my_factory)
led2 = LED(17)

GPIO PIN Broadcom

Pin Factory

NameFactory classPin class
rpigpiogpiozero.pins.rpigpio.RPiGPIOFactorygpiozero.pins.rpigpio.RPiGPIOPin
rpiogpiozero.pins.rpio.RPIOFactorygpiozero.pins.rpio.RPIOPin
pigpiogpiozero.pins.pigpio.PiGPIOFactorygpiozero.pins.pigpio.PiGPIOPin
nativegpiozero.pins.native.NativeFactorygpiozero.pins.native.NativePin
方法
属性

Button 方法

wait_for_press(timeout=None)

暂停脚本,等待按钮被按下,timeout为超时时间(s)

from gpiozero import Button

# 实现开关按下效果
button = Button(4)
button.wait_for_press()
wait_for_release(timeout=None)

暂停脚本,等待按钮被松开,timeout为超时时间(s)

from gpiozero import Button

# 开关按下
button.wait_for_press() 
# 开关松开
button.wait_for_release() 
when_held

当按钮按下后 hold_time 秒后触发的回调函数,为None则禁用事件

from gpiozero import Button

def btn_held(): # when_held 回调函数
    print('button held')
    
    
button.when_held = btn_held # 注册按钮长按事件回调函数
when_pressed

当按钮按下时触发的回调函数,为None则禁用事件

from gpiozero import Button

def btn_pressed(): # when_pressed 回调函数
    print('button pressed')
    

button.when_pressed = btn_pressed # 注册按钮按下事件回调函数
when_released

当按钮松开时触发的回调函数,为None则禁用事件

from gpiozero import Button

def btn_released(): # when_released 回调函数
    print('button released')
    

button.when_released = btn_released # 注册按钮按下事件回调函数

Button 属性

held_time

when_held 触发开始按钮被持续按下的时间(秒)

hold_repeat

当设置为True时:每隔hold_repeat秒重复执行 when_held,当设置为False(默认)时:when_held 仅执行1次

hold_time

按下按钮后直到 when_held 执行前等待的时间(秒)

is_held

是否正被长按,如果该值为True,则说明按钮至少被按下 hold_time

is_pressed

是否正被按下,按钮被按下该值为True,否则为False

pin

GPIO引脚编号

pull_up

内部电阻器上下拉设置,True为启用上拉,False启用下拉,None不启动上下拉

value

按钮被按下该值为1,否则为0

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OurQueen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值