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)的主要内容,如果未能解决你的问题,请参考以下文章

PAT Basic 1078

PAT Basic 1049

Guava 2:Basic utilities基本工具

21天学通Visual.Basic pdf

Golang basic_leaming基本数据类型之间的转换

Golang basic_leaming基本数据类型之间的转换