pi4j 树莓派 gpio_GPIO零和Raspberry Pi编程入门项目

pi4j 树莓派 gpio

Raspberry Pi上最令人兴奋的入门活动之一是您在常规PC或笔记本电脑上无法做到的事情-使现实世界发生某些事情,例如使LED闪烁或控制电动机。 如果您以前做过类似的事情,则可能是使用RPi.GPIO库通过Python 完成的 ,该库已在无数项目中使用。 现在,有一种与物理组件进行交互的更为简单的方法:一种名为GPIO Zero的新友好Python API。

Programming Raspberry Pi

吉尔斯·布斯摄。 经许可使用

我最近写了有关Raspberry Pi Zero的信息 ,这是5美元的计算机,并且是负担得起的硬件世界的最新版本。 尽管名称相似,但GPIO Zero和Raspberry Pi Zero项目无关,并且没有耦合。 GPIO Zero库可以在所有Raspberry Pi模型上使用,并且与Python 2和Python 3兼容。

RPi.GPIO库是基础知识,它提供了使用Pi的GPIO引脚执行简单操作的所有基本功能-将引脚设置为输入或输出,读取输入,将输出设置为高或低,等等。 GPIO Zero建立在此之上,并为日常组件提供了一系列简单的接口,因此您无需将引脚2设置为高电平来打开LED,而是拥有一个LED对象并打开它。

GPIO端口标签–来自rasp.io/portsplus

入门

使用GPIO零,您可以导入正在使用的接口的名称,例如: from gpiozero import LED此外,您还必须正确连接正在使用的所有组件并将它们连接到GPIO引脚。 注意,有些引脚分配给3V3、5V和GND。 一些是特殊目的,其余是通用。 有关更多信息,请参考pinout.xyz或使用端口标签

GPIO port label

用以下代码闪烁LED:


from gpiozero import LED
from time import sleep

led = LED(17)

while True:
    led.on()
    sleep(1)
    led.off()
    sleep(1)

或者,使用LED的blink()方法,但请确保通过signal.pause()使程序保持活动状态, signal.pause()所示:


from gpiozero import LED
from signal import pause

led = LED(17)

led.blink()

pause()

输出设备

除了基本的LED接口外,使用on()off()toggle()blink() ,GPIO Zero还为Buzzer和Motor提供了类,它们的工作方式类似:


from gpiozero import Buzzer, Motor
from time import sleep

buzzer = Buzzer(14)
motor = Motor(forward=17, backward=18)

while True:
    motor.forward()
    sleep(10)
    motor.backward()
    buzzer.beep()
    sleep(10)
    buzzer.off()

还有用于PWMLED的接口(控制亮度,而不仅仅是打开/关闭),以及用于RGB LED的接口,RGB LED是由红色,绿色和蓝色部分组成的LED,利用它们的亮度来提供全彩色控制。

甚至还有一个用于TrafficLights的界面。 提供连接到红色,琥珀色和绿色指示灯的引脚号,然后使用以下命令进行控制:

traffic lights

lights = TrafficLights(2, 3, 4)

lights.on()
lights.off()
lights.blink()
lights.green.on()
lights.red.on()

等等。

输入设备

最简单的输入设备是按钮,提供的界面使按下按钮即可轻松控制程序:

push button input device

from gpiozero import Button

button = Button(14)

while True:
    if button.is_pressed:
        print("Pressed")

使用按下按钮来控制程序的另一种方法是使用wait_for_press


button.wait_for_press()
print("pressed")

这将暂停程序,直到按下按钮,然后继续。 另外,您可以将动作连接到按钮按下,而不是轮询按钮状态:


button.when_pressed = led.on
button.when_released = led.off

在这里,方法led.on作为按下按钮时要运行的动作传递,而方法led.on在按钮释放时led.off 。 这意味着当按下按钮时,LED点亮,而在释放按钮时,LED熄灭。 除了使用其他GPIO零对象方法外,您还可以使用自定义函数:


def hello():
    print("Hello")

def bye():
    print("Bye")

button.when_pressed = hello
button.when_released = bye 

现在,每次按下按钮时,都会调用hello函数并显示“ Hello”。 释放按钮时,它会打印“再见”。

以这种方式使用自定义功能可能是运行一组GPIO指令的好方法,例如交通信号灯序列:


def sequence():
    lights.green.off()
    lights.amber.on()
    sleep(1)
    lights.amber.off()
    lights.red.on()
    sleep(20)
    lights.amber.on()
    sleep(1)
    lights.green.on()
    lights.amber.off()
    lights.red.off()

lights.green.on()
button.when_pressed = sequence

现在,当按下按钮时,交通灯将从绿色变为红色,然后等待20秒钟,然后以通常的方式变回红色。

感测器

交换另一个输入设备(例如基本传感器)的按钮可以打开一个有趣的项目世界。 代替按钮,使用运动传感器:

motion sensor

from gpiozero import MotionSensor

sensor = MotionSensor(15)

然后使用sensor.if_motionsensor.wait_for_motionsensor.when_motion 。 为LightSensor提供了类似的接口。

模拟设备

Raspberry Pi没有本地模拟输入引脚,但是您可以轻松地连接ADC(模数转换器)并访问模拟输入设备(例如电位计 )并读取其值:


from gpiozero import MCP3008

pot = MCP3008()

while True:
    print(pot.value)

电位计返回的值从0到1,这意味着您可以轻松地将它们连接到输出设备:


from gpiozero import PWMLED, MCP3008

led = PWMLED(4)
pot = MCP3008()

while True:
    led.value = pot.value

现在,LED的亮度直接由电位器值控制。

另外,GPIO零的聪明功能使您可以将两个设备直接连接在一起,而无需在循环内不断更新。 每个输出设备都有一个source属性,它可以读取一个无限的值生成器。 所有设备(输入和输出)都具有一个values属性,该属性是一个无限生成器,始终产生设备的当前值:


from gpiozero import PWMLED, MCP3008

led = PWMLED(4)
pot = MCP3008()

led.source = pot.values

这与前面的示例完全相同,只是不需要while循环。

您可以将多个模拟输入连接到同一个ADC(MCP3008芯片提供8个通道)。 本示例使用三个电位器,使用相同的方法可以控制RGB LED中的每个颜色通道:


led = RGBLED(red=2, green=3, blue=4)
red_pot = MCP3008(channel=0)
green_pot = MCP3008(channel=1)
blue_pot = MCP3008(channel=2)

led.red.source = red_pot.values
led.green.source = green_pot.values
led.blue.source = blue_pot.values

这使您可以将三个电位器用作RGB LED的颜色混合器。

捆绑接口

像TrafficLights界面一样,还有其他用于捆绑组件的组件,尤其是在常用的简单附加板上使用的组件。

通用LED板或LED集合,可一起或单独控制:


from gpiozero import LEDBoard

lights = LEDBoard(2, 3, 4, 5, 6)
lights.on()
lights.off()
lights.leds[1].on()
lights.leds[3].toggle()
lights.leds[5].on()
lights.leds[2].blink()
lights.leds[4].blink()

Ryanteck TrafficHAT:

Ryanteck TrafficHAT

from gpiozero import TrafficHat

hat = TrafficHat()

hat.on()
hat.off()
hat.lights.blink()
hat.buzzer.on()
hat.button.when_pressed = hat.lights.on
hat.button.when_released = hat.lights.off

请注意,TrafficHat接口不需要一组引脚号,因为它们已在类中定义。

连接两个电动机并制成机箱,您将拥有一个Raspberry Pi机器人:

raspberry pi robot

from gpiozero import Robot

robot = Robot(left=(4, 14), right=(17, 18))

robot.forward()
robot.backward()
robot.reverse()
robot.left()
robot.forward()
robot.stop()

将所有东西归零

现在有了一个零名称项目套件,为什么不将它们结合使用? 用GPIO零和PyGame零编程的Pi零动力机器人怎么样?

GPIO Zero和PyGame Zero可以很好地协同工作-完美地为GPIO组件创建屏幕界面。

Pi Zero powered robot programmed with GPIO Zero and PyGame Zero

itsAll_Geek2Me摄 经许可使用。

现在就试试!

自12月以来, Raspbian Jessie映像中已包含GPIO Zero,因此您可以从raspberrypi.org/downloads获取副本。 如果您有较旧的映像,请使用以下命令进行安装:


sudo apt-get update
sudo apt-get install python3-gpiozero python-gpiozero

在REPL中打开IDLE和原型,或创建一个文件来保存脚本。 您也可以使用常规的Python Shell,或安装IPython并使用它。

更多

阅读有关GPIO零的更多信息:

翻译自: https://opensource.com/education/16/2/programming-gpio-zero-raspberry-pi

pi4j 树莓派 gpio

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值