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

    文章

    1218

    浏览量

    52649
收藏 人收藏

    相关推荐

    GPIO使用教程 GPIO接口应用

    GPIO(General-Purpose Input/Output,通用输入/输出)接口是电子设备中的一个重要组成部分,主要用于控制和读取设备的数字信号。它通过简单的高(1)或低(0)电平来与系统
    的头像 发表于 01-31 10:10 585次阅读

    GPIO模块与其他外设的连接方法

    在嵌入式系统设计中,GPIO模块是实现设备与外部世界交互的关键接口。它们提供了一种灵活的方式来控制和监测外部设备。 GPIO模块的基本概念 GPIO模块由一组引脚组成,每个引脚都可以被独立地配置为
    的头像 发表于 01-09 09:48 337次阅读

    GPIO错误排查与解决

    在嵌入式系统和微控制器编程中,通用输入输出(GPIO)是最常见的接口之一。然而,在使用GPIO时,我们可能会遇到各种错误。 1. 理解GPIO GPIO是微控制器上的一组引脚,可以被配
    的头像 发表于 01-09 09:46 719次阅读

    GPIO在嵌入式系统中的作用

    在现代电子系统中,嵌入式系统因其小型化、低成本和高效率而变得越来越流行。这些系统广泛应用于从简单的家用电器到复杂的工业自动化设备。在这些系统中,GPIO(通用输入/输出)接口是连接微控制器与外部世界
    的头像 发表于 01-09 09:45 285次阅读

    GPIO在物联网中的应用

    个过程中,通用输入输出(GPIO)接口扮演着重要的角色。 1. GPIO简介 通用输入输出(GPIO)是一种数字接口,用于微控制器和其他集成电路。GPIO可以配置为输入或输出,允许微控
    的头像 发表于 01-09 09:43 193次阅读

    如何配置GPIO引脚

    在嵌入式系统设计中,GPIO(通用输入/输出)引脚是连接微控制器与外部世界的重要桥梁。它们可以被配置为输入或输出模式,用于读取传感器数据、控制LED灯、驱动电机等。 GPIO引脚的基本概念 GPIO
    的头像 发表于 01-09 09:39 217次阅读

    GPIO内部电路的原理

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

    SOC GPIO操作

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

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

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

    TPS6598x GPIO事件

    电子发烧友网站提供《TPS6598x GPIO事件.pdf》资料免费下载
    发表于 09-30 10:32 0次下载
    TPS6598x <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 474次阅读
    <b class='flag-5'>GPIO</b>静电放电防护方案

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

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

    什么是GPIOGPIO组成原理

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