搜索
热搜: ROHM 模拟 车载
查看: 1513|回复: 7

【R课堂】使用GPIO Zero让GPIO变得更容易

  [复制链接]
回帖奖励 465 ROHM金币 回复本帖可获得 5 ROHM金币奖励! 每人限 1 次

该用户从未签到

4339

主题

5178

帖子

13

精华

管理员

最后登录
2024-5-1
发表于 2022-9-14 11:11:47 | 显示全部楼层 |阅读模式
这篇文章来源于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_________)
Tips:点击阅读原文,获得答案
请规范答题,连续答错将无法获得奖励哦~

回复

使用道具 举报

  • TA的每日心情
    开心
    2022-8-31 10:36
  • 签到天数: 1 天

    [LV.1]初来乍到

    8

    主题

    6455

    帖子

    0

    精华

    论坛元老

    最后登录
    2024-5-5
    发表于 2022-9-14 12:39:38 | 显示全部楼层

    回帖奖励 +5 ROHM金币

    此帖仅作者可见

    使用道具 举报

    该用户从未签到

    3

    主题

    3935

    帖子

    0

    精华

    论坛元老

    最后登录
    2024-4-30
    发表于 2022-9-14 13:51:02 | 显示全部楼层

    回帖奖励 +5 ROHM金币

    此帖仅作者可见

    使用道具 举报

    该用户从未签到

    1

    主题

    3763

    帖子

    0

    精华

    论坛元老

    最后登录
    2024-4-30
    发表于 2022-9-14 13:58:13 | 显示全部楼层

    回帖奖励 +5 ROHM金币

    此帖仅作者可见

    使用道具 举报

    该用户从未签到

    2248

    主题

    1万

    帖子

    1

    精华

    论坛元老

    最后登录
    2024-5-5
    发表于 2022-9-14 14:56:42 | 显示全部楼层

    回帖奖励 +5 ROHM金币

    此帖仅作者可见

    使用道具 举报

  • TA的每日心情
    开心
    2022-9-1 14:42
  • 签到天数: 1 天

    [LV.1]初来乍到

    2

    主题

    3255

    帖子

    0

    精华

    论坛元老

    最后登录
    2024-5-5
    发表于 2022-9-14 17:40:59 | 显示全部楼层

    回帖奖励 +5 ROHM金币

    此帖仅作者可见

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-9-12 09:26
  • 签到天数: 1 天

    [LV.1]初来乍到

    1

    主题

    2336

    帖子

    0

    精华

    论坛元老

    最后登录
    2024-5-5
    发表于 2022-9-14 20:22:38 | 显示全部楼层

    回帖奖励 +5 ROHM金币

    此帖仅作者可见

    使用道具 举报

    该用户从未签到

    205

    主题

    1万

    帖子

    0

    精华

    论坛元老

    最后登录
    2023-6-10
    发表于 2022-9-14 23:07:05 | 显示全部楼层

    回帖奖励 +5 ROHM金币

    此帖仅作者可见

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    Archiver|手机版|小黑屋|罗姆半导体技术社区

    GMT+8, 2024-5-6 03:03 , Processed in 0.128996 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表