树莓派引脚介绍与GPIO的初步认识与应用

树莓派引脚介绍与GPIO的初步认识

一.认识GPIO

所谓GPIO,就是“通用输入/输出”接口,树莓派系统中已经编译自带了GPIO的驱动。树莓派的基本外观,最上面的引脚处左下角为1号引脚

树莓派GPIO的编号方式:

1. 功能物理引脚(physical):
从左到右,从上到下。左边为奇数,右边为偶数。共计40个引脚,计数为1-40。
2. BCM:
编号侧重于CPU寄存器,根据BCM2835的GPIO寄存器编号。具体编号参照上图中BCM一栏。
3.wiringPi
编号侧重实现逻辑,把GPIO端口从0开始编号,这种编号方便编程,参考上图wPi一栏。

三种编号的方式均指代的对象相同,只是编码方式不同。

其中
GPIO.**: 通用输入输出接口,GPIO端口,可通过软件分别配置成输入或输出。
3.3V/5.0V(VCC):提供3.3V/5.0V的固定电压
0V(GND):接地
SDA*:SDA 是I2C 数据传输口。
SCL:I2C时钟信号。
RXD:接收数据的引脚。
TXD:发送数据的引脚。
MOSI:为主输出从输入。
MISO:为主输入从输出。
SCLK: 系统时钟,指晶振频率。
CE*:片选(芯片有效)-表示低电平有效

二.Python GPIO

默认的python GPIO均已集成入raspbian系统,不需要另外安装。
如果需要安装,请按以下顺序:
1、先安装python-dev,输入以下指令。
sudo apt-get install python-dev
2、安装RPi.GPIO,依次输入以下指令。
1)下载:wget http://raspberry-gpio-python.googlecode.com/files/RPi.GPIO-0.5.3a.tar.gz
2)解压缩:tar xvzf RPi.GPIO-0.5.3a.tar.gz
3)进入解压之后的目录: cd RPi.GPIO-0.5.3a
4)启动安装 : sudo python setup.py install

三.应用

导入模块

import RPi.GPIO as GPIO

设置引脚引用模式:

GPIO.setmode(GPIO.BOARD)
#or
GPIO.setmode(GPIO.BCM)

检测使用的哪种模式可以使用:

mode=GPIO.getmode()
#mode的取值有GPIO.BOARD, GPIO.BCM, None

以下代码如无特殊说明,均使用GPIO.BOARD引脚映射模式。

设置引脚方向(输入,输出):

如 设置40号引脚为输入方向:

pin = 40
GPIO.setup(pin,GPIO.IN)

输出同理:

GPIO.setup(pin,GPIO.OUT)
#输出还可以加初始电平:
GPIO.setup(pin,GPIO.OUT,initial=GPIO.HIGH)
如果要同时设置多个引脚:
list=[11,12]
GPIO.setup(list,GPIO.OUT)

如果要同时设置多个引脚:

list=[11,12]
GPIO.setup(list,GPIO.OUT)

释放
一般来说,程序到达最后都需要释放资源,这个好习惯可以避免偶然损坏树莓派。释放脚本中的使用的引脚:

GPIO.cleanup()

警告
如果RPi.GRIO检测到一个引脚已经被设置成了非默认值,那么你将看到一个警告信息。你可以通过下列代码禁用警告:

GPIO.setwarnings(False)

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

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

GPIO.input(channel)
#低电平返回0 / GPIO.LOW / False,高电平返回1 / GPIO.HIGH / True。

如果输入引脚处于悬空状态,引脚的值将是漂动的。
换句话说,读取到的值是未知的,因为它并没有被连接到任何的信号上,直到按下一个按钮或开关。
由于干扰的影响,输入的值可能会反复的变化。
使用如下代码可以解决问题:

GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP)  
# or
GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
#需要注意的是,上面的读取代码只是获取当前一瞬间的引脚输入信号。

如果需要实时监控引脚的状态变化,可以有两种办法。
最简单原始的方式是每隔一段时间检查输入的信号值,这种方式被称为轮询。
如果你的程序读取的时机错误,则很可能会丢失输入信号。
轮询是在循环中执行的,这种方式比较占用处理器资源。
轮询方式

while GPIO.input(channel) == GPIO.LOW:
    time.sleep(0.01)  # wait 10 ms to give CPU chance to do other things

另一种响应GPIO输入的方式是使用中断(边缘检测),这里的边缘是指信号从高到低的变换(下降沿)或从低到高的变换(上升沿)。
边缘检测
边缘是指信号状态的改变,从低到高(上升沿)或从高到低(下降沿)。通常情况下,我们更关心于输入状态的该边而不是输入信号的值。这种状态的该边被称为事件。

wait_for_edge() 函数
wait_for_edge()被用于阻止程序的继续执行,直到检测到一个边缘。

channel = GPIO.wait_for_edge(channel, GPIO_RISING, timeout=5000)

add_event_detect() 函数
该函数对一个引脚进行监听,一旦引脚输入状态发生了改变,调用event_detected()函数会返回true,

GPIO.add_event_detect(channel, GPIO.RISING)
if GPIO.event_detected(channel):
	print('Button pressed')

RPI.GPIO 模块的脉宽调制(PWM)功能
脉宽调制(PWM)是指用微处理器的数字输出来对模拟电路进行控制,是一种对模拟信号电平进行数字编码的方法。在树莓派上,可以通过对GPIO的编程来实现PWM。
创建一个 PWM 实例:

p = GPIO.PWM(channel, frequency)

启用 PWM:

p.start(dc)   # dc 代表占空比(范围:0.0 <= dc <= 100.0)

更改频率:

p.ChangeFrequency(freq)   # freq 为设置的新频率,单位为 Hz

更改占空比:

p.ChangeDutyCycle(dc)  # 范围:0.0 <= dc >= 100.0

停止 PWM:

p.stop()
#注意,如果实例中的变量“p”超出范围,也会导致 PWM 停止。
  • 16
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在树莓派上使用Python控制GPIO,你需要安装RPi.GPIO库。这个库可以帮助你轻松地控制GPIO引脚,可以设置引脚为输入或输出,设置引脚电平,等等。 以下是使用Python控制GPIO的基本步骤: 1. 安装RPi.GPIO库 在终端中输入以下命令安装RPi.GPIO库: ``` sudo apt-get update sudo apt-get install rpi.gpio ``` 2. 导入RPi.GPIO库 在Python脚本中导入RPi.GPIO库: ```python import RPi.GPIO as GPIO ``` 3. 设置GPIO模式 在使用GPIO之前,你需要设置GPIO模式。有两种模式可供选择:BCM模式和BOARD模式。在BCM模式下,你使用GPIO引脚的编号(如GPIO17)来引用它们。在BOARD模式下,你使用引脚所在的物理位置(如Pin11)来引用它们。 ```python GPIO.setmode(GPIO.BCM) # 设置BCM模式 # 或者 GPIO.setmode(GPIO.BOARD) # 设置BOARD模式 ``` 4. 设置GPIO引脚 在设置GPIO引脚之前,需要确定你要使用哪些引脚。可以根据引脚物理位置或编号来确定它们。 ```python GPIO.setup(17, GPIO.OUT) # 设置GPIO17为输出引脚 ``` 5. 控制GPIO引脚 一旦设置了GPIO引脚,你就可以控制它们了。例如,如果你将GPIO17设置为输出引脚,你可以使用以下语句将它设置为高电平: ```python GPIO.output(17, GPIO.HIGH) # 将GPIO17设置为高电平 ``` 如果你将GPIO17设置为输入引脚,你可以使用以下语句读取它的状态: ```python GPIO.input(17) # 读取GPIO17的状态 ``` 这是一个基本的GPIO控制示例,它将GPIO17设置为输出引脚,并将它的状态设置为交替的高低电平: ```python import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(17, GPIO.OUT) try: while True: GPIO.output(17, GPIO.HIGH) time.sleep(1) GPIO.output(17, GPIO.LOW) time.sleep(1) except KeyboardInterrupt: GPIO.cleanup() ``` 这个程序将GPIO17设置为输出引脚,并在无限循环中使它的状态交替变化。当你按下Ctrl + C时,它将清除GPIO引脚的设置并退出程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值