电子说
这篇文章来源于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卡 | |
一个面包板 |
一个GPIO扩展板 |
您还需要一个压电蜂鸣器、下推式开关、几根跨接电缆以及某种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 编辑团队
设备升级版适用于所有热爱电子和机电一体化的人。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !