电源设计技术信息网站

FAQ   订阅电子杂志   English   繁體中文   日本語   한국어

下载中心

TECH INFORaspberry Pi初学者指南

使用GPIO Zero让GPIO变得更容易

这篇文章来源于DevicePlus.com英语网站的翻译稿。

为儿童和年轻人开发的用于GPIO控制的简单Python库

如果您有过为Raspberry Pi的GPIO 引脚编写代码的经验,那么估计您已经使用过Python以及GPIO Zero模块了,因为这是最简单的入门方式。
但是模块的简单不意味着其缺乏灵活性和功能性。

GPIO Zero 完成所有工作细节的处理

GPIO Zero并不是之前Raspberry Pi上用于GPIO的Python模块的替代品,而是构建在那些模块之上。
GPIO使用RPi.GPIO来进行大多数操作,同时会混合使用PiGPIO和RPIO。

为什么不直接使用这些模块?

因为GPIO Zero已经为您完成了很多工作细节的处理,您在项目中只需输入几行代码就可以了。
来看一下这些代码:
pir = MotionSensor(4)
pir.when_motion = myFunction

第一个指令表示引脚4上有一个运动传感器,第二个指令设置了一个在传感器产生脉冲信号时运行的函数。真的很简单,对吧?

它是面向对象的

GPIO Zero通过为您可能连接到GPIO引脚的常见组件提供一系列配置好的类来进行工作。您可以使用这些类来创建与连接到GPIO引脚的特定组件相关联的对象。
您在刚开始最感兴趣的类应该是输入类和输出类,它们包括了一系列标准输入和输出组件。
除此之外还有其他多种类,比如用于将数据流式传输到其他组件的SPI类,以及您可以用来创建自己的类的基类和通用类。暂时不用为这些类的使用担心,目前您只要知道有这些类存在就可以了。

安装和导入GPIO Zero

GPIO Zero已经安装在了标准Raspbian映像上。如果您使用的是Raspbian Lite,或者更特别的Linux,那么您需要对其进行安装。
您可以使用以下指令将整个模块导入到Python中:
import gpiozero

然后,您可以通过在类前加上“gpiozero”来对其进行引用,如下所示:
button = gpiozero.Button(11)
greenLED = gpiozero.LED(13)
pir = gpiozero.MotionSensor(15)

只导入您正在使用的特定组件所需要的类会更方便一些:
from gpiozero import Button, LED, MotionSensor

这样,您就可以在不带前缀的情况下对其进行引用了,如下所示:
button = Button(11)
greenLED = LED(13)
pir = MotionSensor(15)

如此一来,您的代码就不会因为冗余信息而变得杂乱无章,从而变得更具有可读性。

使用GPIO Zero,通过按下按钮播放声音

让我们通过将按钮连接到GPIO引脚来尝试在压电蜂鸣器上播放一系列声音,感受一下GPIO Zero的使用有多么简单。
为此,您将需要:

一个带电源的Raspberry Pi以及一个安装了Raspbian的SD卡 raspberry pi
一个面包板 breadboard
一个GPIO扩展板 gpio extension

您还需要一个压电蜂鸣器下推式开关、几根跨接电缆以及某种Raspberry Pi的输入设备,例如SSH连接或者USB键盘和鼠标。准备好了吗?让我们开始吧!

连接压电蜂鸣器

如果您的GPIO扩展板尚未连接到Raspberry Pi和面包板,请将它们连接在一起。然后将接地引脚连接到负电源轨。
您的压电蜂鸣器应该有一根红线和一根黑线。红线连接到来自GPIO引脚的正电压,黑线接地。

我使用跨接电缆将蜂鸣器连接到面包板,您也可以直接将其插入。将蜂鸣器的黑色导线连接到负电源轨,红色导线连接到面包板中间的某处。
现在,将面包板的这一排连接到GPIO引脚。我使用的是引脚13。

让这个小器件尖叫起来

为此,需要打开Python解释器。输入:
python3

现在,我们需要为压电蜂鸣器导入一个类,并使用它来创建一个对象。实际上有两个类:Buzzer,只发出简单的哔哔声;以及TonalBuzzer,可以让您改变音调。
我们将要播放几种不同的音调,因此需要导入TonalBuzzer并将其设置为引脚13。
from gpiozero import TonalBuzzer
piezo = TonalBuzzer(13)

如果所有连接都正确,当您输入以下内容时将会发出尖锐的声音:
piezo.play(‘A4’)

并且在您停止程序之前将会持续下去,停止程序的代码为:
piezo.stop()

您也可以播放其他音调的声音!请尝试以下指令:
piezo.play(‘C4’)
piezo.play(‘D4’)
piezo.play(‘E4’)

编写播放一系列声音的程序

现在让我们把所有的指令放入同一个函数中,从而实现以不同的音调发出哔哔声。我们将在一开始从time模块中导入sleep函数,这样就可以避免播放过快而错过了某个声音。

from time import sleep

现在让我们来定义一个简单的函数,该函数的功能是播放特定音调的蜂鸣声一秒钟。请记住Python对缩进很敏感。
def playTone(pitch):
piezo.play(pitch)
sleep(1)
piezo.stop()

再次按回车键,让Python知道您已经完成了函数的编写。检查一下是否工作正常也是个不错的主意。
playTone(‘A4’)
playTone(‘C4’)

每个指令运行后应会各自发出不同音调的哔哔声。如果不是的话,请检查输入的内容是否正确。
现在我们可以定义另外一个便捷的函数,该函数的功能是以不同的音调播放三次哔哔声。
def playTones():
playTone(‘A4’)
playTone(‘D4’)
playTone(‘E4’)

再次按下回车键完成该函数,然后检查是否工作正常。
playTones()

一切正常吗?太棒了。

与按钮连接

剩下的工作就是连接一个按钮并进行编程,以使其能够控制声音的播放。
将按钮放置在面包板上,并跨越中心沟槽。
然后使用跨接电缆将按钮的一个角连接到负电源轨,对角线相对的角连接到GPIO引脚,我使用的是引脚12。
现在,我们导入GPIO Zero中的Button类,并将其设置为引脚12:
from gpiozero import Button
button = Button(12)

接下来要做的就是使程序在按下按钮时运行我们的函数。
button.when_pressed = playTones

现在按下按钮。如果所有操作正确,此时将会播放声音。
GPIO Zero 让一切变得简单
是不是很简单?我们只用了三行代码就配置了按钮。
虽然表面看上去很简单,但其实其中涉及了很多内容:上拉和下拉电阻以及高电平有效和低电平有效信号。不同的音调是使用一种被称为“脉冲宽度调制”的技术生成的,其中引脚通过在启动和关闭之间快速转换来模仿模拟电压。GPIO Zero已经完成了所有这些工作的预配置。
当您掌握了基本要领后,就可以开始尝试进行所有这些内容了。
与此同时,敬请享受通过GPIO Zero构建和学习项目的乐趣吧!

DevicePlus 编辑团队
DevicePlus 编辑团队

设备升级版适用于所有热爱电子和机电一体化的人。

分享到社交媒体