我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

树莓派内含一个GPIO接口,可以连接各种各样的硬件,为我们提供了很多方便的接口来扩展树莓派的功能。

那么,什么是GPIO接口?

GPIO的定义

GPIO是(Input)的缩写,意为通用输入输出,是一种用来表示开关量的通用硬件接口。

下图列出了 Pi整个系列的图片,引脚为GPIO接口:

树莓派GPIO引脚定义

Pi 接口常见的有 26 针和 40 针两种,大家可以根据自己手上的 Pi 选择,我手上是第三代 Model B+,引脚定义如下:

GND 代表接地

V表示电源

绿色 GPIO.* 是我们可以用于编程的引脚。

其他接口:TxD/RxD是一组,用于串口通信,连接另外一台树莓派(或者其他支持串口通信的模块)(TxD接对方的RxD,Rxd接对方的TxD)设置相同的波特率,即可实现串口通信。SDA/SCL是一组,用于IIC协议通信,连接另外一台树莓派(或者,支持IIC的模块等),支持IIC协议,通过IIC协议进行通信 MOSI、MISO、SCLK、CE0、CE1用于SPI通信协议,连接使用SPI通信的模块看情况 来源知乎

无论如何,如果您对硬件不太了解并且不打算 root 硬件,那么就忽略它们吧。

连接到树莓派后,可以通过命令打印出引脚定义:

1GPIO接口

不知道是不是因为我的系统太旧,还是我的外接扩展板不支持,这里没有pin码输出,只是说不是支持的型号:

至 。我明白了: :

- 或者 。

如果这是 Pi,那么这个

到。如果这不是 Pi,那么你

是你自己

仅限 Pi。

不过这没关系,并不影响我们的测试。

Pi 扩展板

这里使用了集成扩展板,因此无需连接额外的电线。

扩展板引脚图:

通用输入输出

这个库更准确的名字是 -gpio-,这是 Pi 官方文档中推荐的,使用起来也很简单。GPIO 是一个小库,可以帮助用户完成相关的 IO 端口操作。不过,GPIO 库还不支持 SPI、I2C 或 1-wire 等总线接口。除了 GPIO 之外,还有很多扩展库(例如),这些扩展库无疑非常适合 Pi, Pi 也非常适合。

两个密码

董事会编号

这对应于 Pi 板上的物理引脚编号。使用此编号的好处是,无论 Pi 版本如何,您的硬件始终都能正常工作。因此,升级主板后,您无需重写连接器或代码。

BCM 规则

是比较底层的工作方式,对应片上系统中的通道号,使用引脚时需要找到通道号和物理引脚号的对应关系,针对不同的树莓派版本,编写的脚本文件可能不通用。

您可以使用以下代码指定编号方案(强制):

1GPIO.(GPIO.板)#.(GPIO.BCM)

以下代码将返回设置的编号序列

1模式 = GPIO.()

警告

如果 RPi.GRIO 检测到引脚已设置为非默认值,您将看到一条警告消息。您可以使用以下代码禁用警告:

1GPIO.(假)

引脚设置

在使用引脚之前,需要先将其设置为输入或输出。配置引脚的代码如下:

将引脚设置为输入模式 1GPIO.setup(, GPIO.IN)

将引脚设置为输出模式 1GPIO.setup(, GPIO.OUT)

为输出引脚设置默认值1 GPIO.setup(, GPIO.OUT, =GPIO.HIGH)

发布

一般来说,需要在程序结束时释放资源。这个好习惯可以避免意外损坏树莓派。释放脚本中使用的引脚:

1GPIO.()

注意,GPIO.() 只会释放脚本中使用的 GPIO 引脚,并清除设置的引脚编号规则。

实验一:控制LED灯闪烁

要点亮LED或者驱动某个设备,需要给它们提供电流和电压。这一步也很简单,只要设置一下引脚的输出状态即可。代码如下:

1> GPIO.(,状态)

状态可以设置为:

0 / GPIO.低 / 假

1 / GPIO.高 / 真

如果编码规则是GPIO.BOARD,那么它就是对应引脚的编号。

如果想一次性设置多个引脚,可以使用如下代码:

= [11,12]

GPIO.(,GPIO.LOW)GPIO.(,(GPIO.HIGH,GPIO.LOW))

您还可以使用 Input() 函数读取输出引脚的状态并将其用作输出值,例如:

1GPIO.(12,不是GPIO.input(12))

我们还经常需要读取引脚的输入状态,获取引脚输入状态的代码如下:

1GPIO.输入()

低水平回报

0 / GPIO.低 / 假

高水平回报

1 / GPIO.高 / 真

如果输入引脚悬空,则该引脚的值将悬空。换句话说,读取的值是未知的,因为它在按下按钮或开关之前未连接到任何信号。由于干扰,输入值可能会反复变化。使用以下代码可以解决问题:

2GPIO.设置(,GPIO.IN,=GPIO。)

GPIO.设置(,GPIO.IN,=GPIO。)

需要注意的是,上述读取代码只是获取当前时刻的引脚输入信号。

如果你需要实时监控引脚的状态变化,有两种方法。最简单、最原始的方法是每隔一段时间检查输入信号值,这称为轮询。如果你的程序在错误的时间读取,则很可能丢失输入信号。轮询以循环方式进行,这会占用更多处理器资源。响应 GPIO 输入的另一种方法是使用中断(边沿检测),其中边沿指的是信号从高到低(下降沿)或从低到高(上升沿)的变化。

轮询方法 1

GPIO.输入()==GPIO.低:

经过

边缘检测

边沿是信号状态的变化,从低到高(上升沿)或从高到低(下降沿)。通常,我们更关心输入状态的边沿,而不是输入信号的值。这个状态的边沿称为事件。首先,我们介绍两个函数:

() 功能

() 用于阻止程序继续执行,直到检测到边缘。换句话说,上面等待按钮按下的示例可以重写为:

= GPIO。(,,=5000)

如果为无:

打印(' ')

别的:

打印('边缘开启',)

() 功能

该函数监控一个引脚,一旦引脚输入状态发生变化,call()函数就会返回true,如下代码所示:

4GPIO.(, GPIO.) # 在()上添加边

# 下面的代码放在线程循环中执行。

如果是GPIO.():

打印(' ')

上述代码需要你新建一个线程来循环遍历()的值,比较麻烦。

不过还有另外一种方式可以轻松检测状态,那就是直接传递回调函数:

6def():

print('这是一个边缘事件!')

打印('边缘在 %s'%)

print('这是在你的主程序中运行的')

GPIO.(,GPIO.,=)

如果要设置多个回调函数,可以这样做:

9def():

打印(‘一’)

定义():

打印(‘二’)

GPIO。(,GPIO。)

GPIO.(,)

GPIO.(,)

注意:触发回调时,各个回调函数并不会同时执行,而是按照设置的顺序依次调用。

说了这么多,下面我们开始点亮我们的LED灯吧:

编写脚本:

10

11

12

十三

14

15

16

17

18

19

20

21

22

23

24#:utf-8

RPi.GPIO 作为 GPIO

时间

GPIO.(GPIO.BCM)

GPIO。(假)

# 控制 LED 闪烁

发光二极管 = 12

GPIO.设置(led,GPIO.OUT)

尝试:

while(真):

打印“明亮”

GPIO.(LED,1)

时间.睡眠(1)

打印‘熄灭’

GPIO.(LED,0)

时间.睡眠(1)

例如:

打印(e)

GPIO.()

将其上传到 Pi 并运行:

实验二:获取开关信号

实验1采用轮询方式实现。在本实验中,我们将使用边缘检测来获取开关信号的变化。

从扩展板的电路图我们可以看到这里有3个按钮,对应的BCM代码分别是17、18、27。

我们在这里使用 17 作为开关。

轮询方法

先给出轮询的方法,代码:

10

11

12

十三

14

15

16

17

18

19

20

21

22# :utf-8

RPi.GPIO 作为 GPIO

时间

GPIO.(GPIO.BCM)

GPIO。(假)

# 检测开关

# 3个集成开关17、18、27的位置默认为1,按下后信号为0

= 17

GPIO.设置(,GPIO.IN,GPIO。)

尝试:

while(真):

如果 GPIO.input() == True:

print'获取开关 1 信号:%s'% GPIO.input()

时间.睡眠(1)

例如:

打印(e)

GPIO.()

输出:

10 获取开关1信号:1

获取开关1信号:1

获取开关1信号:1

获取开关1信号:1

获取开关1信号:1

获取开关1信号:0

获取开关1信号:0

获取开关1信号:0

获取开关1信号:1

获取开关1信号:1

当信号为 0 时,就是我们按下按钮的时候。但是,因为这里是轮询,所以有可能取不到任何值。也就是说,当我们按下按钮的那一刻, Pi 并没有获得这个变化。

边缘检测方法

通过边缘检测可以轻松检测到开关的变化:

10

11

12

十三

14

15

16

17

18

19

20

21

22

23

24

25# :utf-8

RPi.GPIO 作为 GPIO

时间

GPIO.(GPIO.BCM)

GPIO。(假)

# 检测开关

# 3个集成开关17、18、27的位置默认为1,按下后信号为0

= 17

GPIO.设置(,GPIO.IN,GPIO。)

定义():

打印('按下按钮...')

GPIO.(,GPIO.,=)

尝试:

while(真):

时间.睡眠(1)

例如:

打印(e)

GPIO.()

输出:

7 按下按钮...

按下按钮...

按下按钮...

按下按钮...

按下按钮...

按下按钮...

按下按钮...

好了,希望对看到这篇文章的你们有帮助(^_^)

二维码
扫一扫在手机端查看

本文链接:https://by928.com/6196.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线