2基本方法(Basic Recipes)
Posted little-kwy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2基本方法(Basic Recipes)相关的知识,希望对你有一定的参考价值。
官网地址:http://gpiozero.readthedocs.io/en/stable/recipes.html
环境:UbuntuMeta-16.04
树莓派:3代B型
2、基本方法(Basic Recipes)
下面演示了GPIO Zero库的一些功能,注意的是这些方法都是在python3下编写的,在python2下可能有用也可能没有用!
2.1 导入GPIO Zero
使用GPIO Zero库有两种方式
2.1.1 单独导入GPIO Zero库的某个类
导入 GPIO Zero 的 Button :
from gpiozero import Button
现在 Button 就可以直接在脚本中使用:
button = Button(2) #2为Button的引脚
2.1.2 完整导入GPIO Zero库
或者,导入整个GPIO Zero库:
import gpiozero
在这种情况下,GPIO Zero中对项目的所有引用都必须加上前缀(gpiozero):
button = gpiozero.Button(2) #2为Button的引脚
2.2. Pin 编号
该库使用Broadcom(BCM)引脚编号作为GPIO引脚,而不是物理(BOARD)编号。 与RPi.GPIO库不同,这是不可配置的。
2.3 开关一个LED
不断的打开和关闭LED灯
from gpiozero import LED from time import sleep red = LED(17) #led的正极接GPIO17 while True: red.on() #开灯 sleep(1) red.off() #关灯 sleep(1)
或者也可以两一种写法:
from gpiozero import LED from signal import pause red = LED(17) #led的正极接GPIO17
red.blink() #闪烁
pause()
2.4 改变LED的亮度
任何常规LED都可以使用PWM(脉冲宽度调制)设置其亮度值。 在GPIO Zero中,可以使用PWMLED来实现,PWMLED的值从0到1:
from gpiozero import PWMLED from time import sleep led = PWMLED(17) while True: led.value = 0 # 灭 sleep(1) led.value = 0.5 # 半亮 sleep(1) led.value = 1 # 全亮 sleep(1)
类似于连续闪烁,PWMLED可以脉冲(连续淡入和淡出),以下实现呼吸灯的效果:
from gpiozero import PWMLED from signal import pause led = PWMLED(17) led.pulse() #呼吸灯的效果 pause()
2.5 加入一个按钮
按钮的连接如下图
检查是否按下了按钮:
from gpiozero import Button button = Button(2) while True: if button.is_pressed: print("按钮已经按下") else: print("按钮没有被按下")
一直等待按钮被按下:
from gpiozero import Button button = Button(2) button.wait_for_press() #等待按钮被按下
print("按钮已经按下")
每次按下按钮的时候运行一个方法:
from gpiozero import Button from signal import pause def say_hello(): print("Hello!") button = Button(2) button.when_pressed = say_hello #当被按下时执行 say_hello 方法,注意不能写为say_hello()
pause()
同样的,按钮被释放时也可以执行一个方法:
from gpiozero import Button from signal import pause def say_hello(): print("Hello!") def say_goodbye(): print("Goodbye!") button = Button(2) button.when_pressed = say_hello #当被按下时执行 say_hello 方法
button.when_released = say_goodbye #当被释放时执行 say_goodbye 方法
pause()
2.6 使用一个按钮控制led灯
按下按钮时打开LED:
from gpiozero import LED, Button from signal import pause led = LED(17) #定义一个led灯 button = Button(2) #定义一个button button.when_pressed = led.on #开灯 button.when_released = led.off #关灯 pause()
或者:
from gpiozero import LED, Button from signal import pause led = LED(17) #定义一个led灯
button = Button(2) #定义一个button
led.source = button.values
pause()
2.7 按钮控制摄像头
当按下按钮时触发 PiCamera 拍照,使用 when_pressed = camera.capture 的写法是无效,因为capture()方法需要输出参数。
但是,这可以使用不需要参数的自定义函数来实现:
from gpiozero import Button from picamera import PiCamera from datetime import datetime from signal import pause button = Button(2) camera = PiCamera() def capture(): datetime = datetime.now().isoformat() camera.capture(‘/home/pi/%s.jpg‘ % datetime) #保存图片 button.when_pressed = capture pause()
另外可以使用一个按钮来启动和停止相机预览,另一个按钮用来拍照:
from gpiozero import Button from picamera import PiCamera from datetime import datetime from signal import pause left_button = Button(2) right_button = Button(3) camera = PiCamera() def capture(): datetime = datetime.now().isoformat() camera.capture(‘/home/pi/%s.jpg‘ % datetime) left_button.when_pressed = camera.start_preview left_button.when_released = camera.stop_preview right_button.when_pressed = capture pause()
2.8 实现按钮关机
Button类还提供了在按钮按住一段给定时间后运行函数的功能。
下面的示例是,当按钮按住2秒时,将关闭树莓派:
from gpiozero import Button from subprocess import check_call from signal import pause def shutdown(): check_call([‘sudo‘, ‘poweroff‘]) #运行shell shutdown_btn = Button(17, hold_time=2) #定义按钮,以及持续时间 shutdown_btn.when_held = shutdown pause()
持续更新中...
以上是关于2基本方法(Basic Recipes)的主要内容,如果未能解决你的问题,请参考以下文章