0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用GPIO Zero让GPIO变得更容易

李中宏 来源:DevicePlus 作者:DevicePlus 2023-03-01 10:51 次阅读

这篇文章来源于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 pYYBAGPzHTCAPeTzAAAZXrMS0tI642.jpg
一个面包板

poYBAGPy0t6AI3TuAAAWaY2q8tc733.jpg

一个GPIO扩展板

poYBAGPzHXeARu3AAAApSEMweUA937.jpg

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

连接压电蜂鸣器

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

poYBAGPzHYWAPsplAACRmxEckW8987.jpg


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

pYYBAGPzHYiAXPgtAAFCNLisIO0755.jpg

让这个小器件尖叫起来

为此,需要打开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构建和学习项目的乐趣吧!

pYYBAGPbhjqAbi1JAAAGd6_rQT0867.png

DevicePlus 编辑团队

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


审核编辑黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • GPIO
    +关注

    关注

    16

    文章

    1204

    浏览量

    52105
收藏 人收藏

    评论

    相关推荐

    GPIO内部电路的原理

    前言 笔者近日在B站刷到了一个视频,使我对GPIO的I/O口内部基本结构以及工作原理有了恍然大明白的理解,现在对此做一个总结,并为大家推荐该视频Keysking 【STM32】GPIO内部电路
    的头像 发表于 11-20 09:24 309次阅读
    <b class='flag-5'>GPIO</b>内部电路的原理

    STM32 GPIO的八种工作模式

    GPIO (general purpose input output)是通用输入输出端口的简称,简单来说就是软件可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。
    的头像 发表于 11-06 09:40 622次阅读
    STM32 <b class='flag-5'>GPIO</b>的八种工作模式

    SOC GPIO操作

    sapphire Soc提供了两个GPIO组每组有4个GPIO,定义为GPIO[3:0],其中只有GPIO[1:0]可以支持中断。中断在程序中打开了
    的头像 发表于 11-01 11:06 144次阅读

    树莓派gpio有什么用,树莓派gpio接口及编程方法

    一、树莓派GPIO的用途 树莓派(Raspberry Pi)是一款小巧、功能强大的单板计算机,广泛应用于编程教育、物联网项目、家庭媒体中心等领域。GPIO(General Purpose Input
    的头像 发表于 10-22 18:09 870次阅读

    gpio接口是干什么的 gpio四种输入输出模式怎么选择

    GPIO接口的作用 GPIO(General Purpose Input/Output)接口,即通用输入输出接口,是一种用于连接和控制各种外部设备的数字接口。它由一组引脚组成,可以通过编程的方式控制
    的头像 发表于 10-06 16:07 2776次阅读

    TPS6598x GPIO事件

    电子发烧友网站提供《TPS6598x GPIO事件.pdf》资料免费下载
    发表于 09-30 10:32 0次下载
    TPS6598x <b class='flag-5'>GPIO</b>事件

    TPS65987D GPIO事件

    电子发烧友网站提供《TPS65987D GPIO事件.pdf》资料免费下载
    发表于 09-23 11:09 0次下载
    TPS65987D <b class='flag-5'>GPIO</b>事件

    GPIO转换电压

    电子发烧友网站提供《为GPIO转换电压.pdf》资料免费下载
    发表于 09-21 11:05 0次下载
    为<b class='flag-5'>GPIO</b>转换电压

    GPIO静电放电防护方案

    GPIO静电放电防护方案 方案简介 GPIO的全称是General Purpose Input Output (通用输入/输出端口),简称为GPIO或总线扩展器,是一种在微控制器、微处理器、以及
    的头像 发表于 09-19 17:02 354次阅读
    <b class='flag-5'>GPIO</b>静电放电防护方案

    GPIO引脚提供ESD保护

    电子发烧友网站提供《为GPIO引脚提供ESD保护.pdf》资料免费下载
    发表于 08-28 11:01 0次下载
    为<b class='flag-5'>GPIO</b>引脚提供ESD保护

    STM32 GPIO八种模式及工作原理详解

    一. 前言   GPIO全称General Purpose Input Output,是微控制数字输入/输出的基本模块,可以实现微控制器与外部环境的数字进行交换。借助GPIO微控制器可以实现对外
    的头像 发表于 07-22 09:32 6406次阅读
    STM32 <b class='flag-5'>GPIO</b>八种模式及工作原理详解

    快速搞懂GPIO控制器的六种模式

    在嵌入式系统和单片机开发中,GPIO(通用输入输出)控制器是一个非常重要的组件。GPIO引脚的灵活性使它们能够执行多种功能,从简单的输入输出到复杂的通信任务。为了帮助大家快速了解和掌握GPIO控制器
    的头像 发表于 05-18 08:04 1505次阅读
    快速搞懂<b class='flag-5'>GPIO</b>控制器的六种模式

    什么是GPIOGPIO组成原理

    GPIO全拼叫General Purpose Input Output(通用输入输出)简称IO口也叫总线扩展器,GPIO口是由引脚,功能寄存器组成,不同的架构中的GPIO封装不同,所使用的引脚数与寄存器数不同,具体可以参考芯片手
    发表于 04-28 12:30 6987次阅读
    什么是<b class='flag-5'>GPIO</b>?<b class='flag-5'>GPIO</b>组成原理

    MCU启动失败竟因GPIO先上电?

    由于 RT1060 上 GPIO_AD_Bx 和 GPIO_Bx 两组 PAD 供电均来自于 NVCC_GPIO,当其中任何一个 GPIO 有电压时,均可能会漏电到 NVCC_
    发表于 03-28 10:32 785次阅读
    MCU启动失败竟因<b class='flag-5'>GPIO</b>先上电?

    深入理解GPIO原理和运用

    GPIO允许我们的单片机与外部世界进行通信,它是我们控制外部设备和接收外部信号的接口。
    的头像 发表于 02-19 16:12 1913次阅读
    深入理解<b class='flag-5'>GPIO</b>原理和运用