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

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

3天内不再提示

通过RPi.GPIO Python库使用Raspberry Pi GPIO引脚

王银喜 来源:hgimtk 作者:hgimtk 2023-02-25 17:36 次阅读
这篇文章来源于DevicePlus.com英语网站的翻译稿。在2016年推出GPIO Zero之前,新用户通常使用另一个Python模块(RPi.GPIO)来使用GPIO引脚
使用RPi.GPIO需要学习更多的相关知识,但是事实证明花费这些精力是值得的。

为什么不直接使用GPIO Zero?

GPIO Zero并不是作为RPi.GPIO的替代品而创建的。它其实构建在RPi.GPIO之上,旨在帮助初学者能够尽可能轻松地使用RPi.GPIO。
通过直接使用RPi.GPIO,您可以更好地了解内部的运行操作,并且为之后的项目开发出更精细的控制功能。
通过GPIO Zero的API您可以对上拉和下拉电阻、高态动作和低态动作引脚等进行修改。但是如果您过于频繁的使用它,那么就失去GPIO在简易性方面的优势了。

使用RPi.GPIO的另一个原因是骇客和制造商们分享了许多使用了RPi.GPIO的很棒的项目。一旦您掌握了这个模块,就意味着这个领域的大门将会向您敞开!
也许有一天您会想使用诸如C或C++这样的语言。这些语言更高级一些,但是会提供更多的控制功能以及使硬件的使用更加高效的功能。使用RPi.GPIO无法让您直接实现这个目的,但是它可以帮助您朝这个方向迈进。
目前不用担心会消耗过多CPU周期。每个Raspberry Pi的处理能力都远远超过本项目所需。镜像:Raspberry Pi。

导入RPi.GPIO库

导入RPi.GPIO模块的语法是:
import RPi.GPIO as GPIO
官方文档和大多数已发布的项目都遵循该语法。如果您也使用该语句,可以直接借用他们的代码。

RPi.GPIO 可让您选择引脚编号模式

有两种对引脚进行编号的方法。您可以通过它们在GPIO接头中的放置位置来描述这些引脚,这种方法称为“板编号”。
您也可以通过它们连接到Raspberry Pi核心中Broadcom芯片的顺序来对其进行描述。如果您觉得GPIO引脚编号与其在接头中的位置无关,可以使用该方法。
您可以使用RPi.GPIO’s setmode函数来对这两种编号系统进行选择:
GPIO.setmode(GPIO.BOARD)
GPIO.setmode(GPIO.BCM)
如果在设置模式之前就分配引脚,那么Python会返回错误信息
我个人更喜欢Broadcom编号模式。因为在这种模式下,哪些引脚是GPIO、接地或电源会更清晰。我还使用了GPIO扩展板来构建面包板原型,并且在该板上根据GPIO编号对每个引脚进行标记。
有人可能觉得板编号模式更容易一些。如果该模式适用于您的项目,那也很好!您可以自行选择。
在本文的剩余部分,我们将会使用Broadcom编号模式。
如果您使用过解释器,并且忘记了设置的是哪种模式,请使用以下指令:
GPIO.getmode()

设置及使用引脚

设置编号模式后,使用setup函数来将引脚分配为输入或输出引脚:
GPIO.setup(11, GPIO.OUT)
GPIO.setup(12, GPIO.IN)
对于输入引脚,您通常需要设置一个上拉或下拉电阻来防止浮动。您可以用以下方式来设置这些电阻:
GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
要读取输入引脚的当前状态,请使用:
GPIO.input(12)
您可以使用output函数来将输出引脚设置为高电平或低电平,如下所示:
GPIO.output(11, True)
GPIO.output(11, False)

为引脚命名

如果您将引脚编号分配给描述性命名的变量,您的代码将更具可读性,如下所示:
redLED = 11
button = 12
GPIO.setup(redLED, GPIO.OUT)
GPIO.setup(button, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.output(redLED, True)
GPIO.input(button)
用这种代码可以更清楚地显示所执行的操作,不是吗?
您可能觉得即使不使用这些实用标签,项目也会进行得很容易,但是最好养成这种习惯。当您需要构建更复杂的项目时,以及暂时中止正在进行的项目时,或者其他人查看您的代码的时候,这个习惯会给您带来很大的便利。

完成后清除

如果您保留了对这些引脚的分配设置,很容易造成意外短路从而烧坏电路板。
当脚本运行结束或者您退出解释器时,GPIO Zero会自动进行重置。在RPi.GPIO中,我们使用以下函数:
GPIO.cleanup()
该清除函数只会对您在RPi.GPIO中分配的引脚进行重置,所以如果有另一个进程正在使用其他引脚,则不会受到干扰。
您也可以重置特定的引脚,将这些引脚作为一个参数传递到函数中:
GPIO.cleanup(redLED)
GPIO.cleanup([redLED, button])

使用以上设置创建一个简单的LED序列

对于本项目,您将需要:

一个带电源的Raspberry Pi以及一个安装了Raspbian的SD installed
一个面包板
一个GPIO扩展板
一个绿色LED, 一个红色LED, 以及一个黄色LED

您还需要一个可以让您输入指令的设备,例如SSH连接或者USB键盘和鼠标,几根跨接电缆以及三个阻值在220Ω~1000Ω之间的电阻。

连接我们的红色LED

首先,将GPIO扩展板连接到您的Raspberry Pi GPIO接头和面包板(如果尚未连接的话)。然后使用跨接电缆将接地引脚连接到面板板底部的负电源轨。
pYYBAGPzHZeAAGGIAADTzKamKic707.png
现在连接LED。D代表的是二极管,也就是说电流只能沿一个方向通过LED。
您可以识别出应该如何连接LED,因为LED的一个引脚比另一个稍长。较长的引脚是阳极,连接到正极,较短的是阴极,连接到负极。
在这个电路中,我们将把较长的引脚—阳极—连接到GPIO引脚,把较短的引脚—阴极—连接到负电源轨。
首先将红色LED放在您的面包板上,距离扩展板不远。水平放置LED引脚,使阳极更靠近扩展板。然后将GPIO引脚(我使用的是引脚13)连接到阳极。
pYYBAGPzHZmAb37dAAFNXxgevxs356.png
现在使用一个电阻来将阴极连接到负电源轨。使用电阻很重要,否则LED将会使用过大的电流从而烧坏您的Raspberry Pi。
pYYBAGPzHZyAEmXeAAFPbVWndEs728.png

测试红色LED

首先启动Python解释器,输入:
python3
让我们加载RPi.GPIO,并设置引脚编号模式,请记得Python对大小写很敏感。
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
还记得之前为引脚编号提供实用名称的建议吗?在这里我们也这样做。
redLED = 13
现在,将该引脚分配为输出引脚,输入以下指令:
GPIO.setup(redLED, GPIO.OUT)
如果一切连接正确,您将能够使用以下指令来打开和关闭LED:
GPIO.output(redLED, True)
GPIO.output(redLED, False)
如果没有正常工作,请检查LED的连接方向是否正确,以及所有连接是否正确。也许是因为电阻线接触不良造成电路没有接通。

连接并测试黄色和绿色LED

在红色LED的右侧放置黄色LED。以及,再次将引脚水平放置,并使阳极更靠近扩展板。
poYBAGPzHZ-Af5v2AAEWAxFZYSY606.png
然后将跨接电缆从GPIO引脚(我使用的是引脚16)连接到黄色LED的阳极。像之前所做的那样,使用电阻将阴极连接到负轨。
现在为该引脚命名,将其分配为输出引脚,并且测试是否可以打开和关闭LED:
yellowLED = 16
GPIO.setup(yellowLED, GPIO.OUT)
GPIO.output(yellowLED, True)
GPIO.output(yellowLED, False)
一切正常吗?如果不是的话,请检查LED的方向是否正确,以及所有的连接是否正确。
接下来是绿色LED。
poYBAGPzHaKAanflAAEk3uSmn1s066.png
将它并排放置在面包板上,引脚以一定的间隔水平放置,阳极靠近扩展板。使用跨接线将阳极连接到GPIO引脚(我使用的是引脚21),然后使用一个电阻将阴极连接到负轨,接着输入一些Python代码:
greenLED = 21
GPIO.setup(greenLED, GPIO.OUT)
GPIO.output(greenLED, True)
GPIO.output(greenLED, False)
就是这样!

编写程序使LED按照顺序点亮

为了防止运行得太快而看不到点亮过程,我们将会使用sleep指令,输入:
from time import sleep
现在,让我们将所有引脚编号放入一个可以循环遍历的元组中:
LEDs = (redLED, yellowLED, greenLED)
最后,编写一个for循环语句来遍历这个元组,从而打开和关闭LED。请记住Python对缩进很敏感!
for i in range(100):
GPIO.output(LEDs[i % 3], True)
sleep(2)
GPIO.output(LEDs[i % 3], False)
再次按下回车键运行该循环。
如果一切正常,您将会看到LED按照顺序一个接一个亮起2秒钟。这需要花费几分钟来运行,您也可以按ctrl+C来结束该程序。
如果您不明白该循环的工作原理,以下链接可能会有所帮助:
• for 循环
• range 函数
• 取模运算(%)
pYYBAGPzHaSAZTDTAACj2KfHwaI748.jpg

清除

完成之后不要忘记清除引脚设置!输入:
GPIO.cleanup()
您可以按ctrl+D退出解释器。镜像:Finished Product

这是简单而强大的产品

您可以使用这些基本原理来完成很多事情,尤其是在加入输入引脚之后。请继续关注后续工作!

审核编辑:汤梓红

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

    关注

    16

    文章

    1135

    浏览量

    50578
  • python
    +关注

    关注

    51

    文章

    4677

    浏览量

    83467
  • Raspberry Pi
    +关注

    关注

    1

    文章

    552

    浏览量

    22054
收藏 人收藏

    评论

    相关推荐

    什么是GPIOGPIO组成原理

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

    T507开发板如何将占用引脚配置为普通GPIO

    根据T5用户手册描述,只有在不使用多路复用功能的情况下,这些端口才可以配置为GPIO,所以我们需要把引脚的复用功能关闭。将被占用引脚配置为普通GPIO方法思路1.查看
    的头像 发表于 12-08 11:50 227次阅读
    T507开发板如何将占用<b class='flag-5'>引脚</b>配置为普通<b class='flag-5'>GPIO</b>

    如何通过GPIO驱动配置实现控制i.MX8芯片引脚电平变化

    本文我们要讲的是如何通过 GPIO 驱动配置实现控制 i.MX8 芯片引脚电平变化。
    的头像 发表于 12-04 11:41 576次阅读
    如何<b class='flag-5'>通过</b><b class='flag-5'>GPIO</b>驱动配置实现控制i.MX8芯片<b class='flag-5'>引脚</b>电平变化

    Purple Pi OH(Debian/Ubuntu)使用python控制gpio

    本文分享的是PurplePiOH开源主板搭载Debian/Ubuntu系统如何使用python控制gpio。PurplePiOH作为一款兼容树莓派的开源主板,采用瑞芯微RK3566
    的头像 发表于 09-09 08:35 582次阅读
    Purple <b class='flag-5'>Pi</b> OH(Debian/Ubuntu)使用<b class='flag-5'>python</b>控制<b class='flag-5'>gpio</b>

    基于51单片机通过GPIO口点亮LED灯

    在之前的教程中,我们成功搭建了开发环境,初步对开发板的GPIO口有了一定的了解,在本教程中,我们将带领大家制作第一个工程,就是通过GPIO口来点亮一盏LED小灯!
    发表于 07-17 14:18 2981次阅读
    基于51单片机<b class='flag-5'>通过</b><b class='flag-5'>GPIO</b>口点亮LED灯

    GPIO的八种工作模式

    GPIO是通用输入/输出端口的简称,GPIO引脚与外部设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。GPIO的8种输入模式:包括4种输入模式和4种输出模式(2种
    的头像 发表于 07-02 16:38 6497次阅读
    <b class='flag-5'>GPIO</b>的八种工作模式

    GPIO读取按钮状态

    树莓派的GPIO可以控制发光二极管,这是GPIO的Output(输出)能力,它也具有input(读取)的能力,所以才能叫做I/O(输入/输出)端口。今天我们就来用GPIO引脚来读取按
    的头像 发表于 07-02 15:06 910次阅读
    用<b class='flag-5'>GPIO</b>读取按钮状态

    通过USB对Raspberry Pi进行编程

    电子发烧友网站提供《通过USB对Raspberry Pi进行编程.zip》资料免费下载
    发表于 06-30 10:24 0次下载
    <b class='flag-5'>通过</b>USB对<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>进行编程

    STM32的GPIO在实际开发设计的使用配置和技巧

    相关的理论知识,这样在应用GPIO开发过程中,能更好的理解GPIO的特点,应用起来会更加的得心应手。 后续将从以下图1中所示的几个方面对GPIO应用设计中的步骤展开介绍。本篇先介绍GPIO
    的头像 发表于 06-22 10:22 522次阅读
    STM32的<b class='flag-5'>GPIO</b>在实际开发设计的使用配置和技巧

    一文详解GPIO的输出配置

    引言:GPIO,即General purpose input output,通用输入输出端口,是可以根据实际使用场景需求来用软件来配置的引脚。需要注意的是,一款芯片的引脚分为其实分为很多域,比如仅为
    发表于 06-14 16:41 1913次阅读
    一文详解<b class='flag-5'>GPIO</b>的输出配置

    一文详解GPIO的输入配置

    引言:GPIO,即General purpose input output,通用输入输出端口,是可以根据实际使用场景需求来用软件来配置的引脚。需要注意的是,一款芯片的引脚分为其实分为很多域,比如仅为
    发表于 06-14 16:41 2969次阅读
    一文详解<b class='flag-5'>GPIO</b>的输入配置

    如何通过SPI使用Raspberry PI零与FPGA通信

    电子发烧友网站提供《如何通过SPI使用Raspberry PI零与FPGA通信.zip》资料免费下载
    发表于 06-13 15:52 0次下载
    如何<b class='flag-5'>通过</b>SPI使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>PI</b>零与FPGA通信

    使用PythonRaspberry Pi的实时图表

    电子发烧友网站提供《使用PythonRaspberry Pi的实时图表.zip》资料免费下载
    发表于 06-13 10:47 0次下载
    使用<b class='flag-5'>Python</b>和<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>的实时图表

    PSOC6-GPIO的控制

    GPIO是一种具有输入和输出功能的数字引脚,简称IO口。
    的头像 发表于 06-07 09:04 812次阅读
    PSOC6-<b class='flag-5'>GPIO</b>的控制

    如何将RPi Python代码移植到ESP-01?

    努力尝试将我很久以前写的几行 RPi Python 代码移植到 ESP-01。 该代码预计会向 Pushover 发送事件警报并且它有效(到目前为止)。 由于 Micropython 中似乎缺少
    发表于 06-05 12:11