1.RPi.GPIO 模块使用基础

导入模块

导入 RPi.GPIO 模块:

import RPi.GPIO as GPIO

通过该操作,您可以将模块名称映射为 GPIO,以便接下来您其它脚本进行使用。

导入模块并检查它是否导入成功,可以尝试:

try:
    import RPi.GPIO as GPIO
except RuntimeError:
    print( "导入 RPi.GPIO 时出现错误!这可能由于没有超级用户权限造成的。您可以使用 'sudo' 来运行您的脚本。" )

针脚编号

目前有两种方式可以通过 RPi.GPIO 对 Raspberry Pi 上的 IO 针脚进行编号。

第一种方式是使用 BOARD 编号系统。该方式参考 Raspberry Pi 主板上 P1 接线柱的针脚编号。使用该方式的优点是无需考虑主板的修订版本,您硬件始终都是可用的状态。您将无需从新连接线路和更改您的代码。

第二种方式是使用 BCM 编号。这是一种较低层的工作方式 – 该方式参考 Broadcom SOC 的通道编号。使用过程中,您始终要保证主板上的针脚与图表上标注的通道编号相对应。您的脚本可能在 Raspberry Pi 主板进行修订版本更新时无法工作。

指定您所使用的方式(必须指定):

GPIO.setmode(GPIO.BOARD)

或者

GPIO.setmode(GPIO.BCM)

警告

可能您的 Raspberry Pi 的 GPIO 上同时有多个脚本/循环。因此,如果 RPi.GPIO 检测到某个针脚被设置为其它用途而非默认的状态(默认为输入),您会在尝试配置某脚本时得到警告消息。

禁用该警告消息:

GPIO.setwarnings(False)

配置通道

您需要为每个用于输入或输出的针脚配置通道。

配置为输入的通道:

GPIO.setup(channel, GPIO.IN)

(通道编号是基于您所使用的编号系统所指定的(BOARD 或 BCM)。)

更多关于输入通道的进阶信息可以在这里找到。

配置为输出的通道:

GPIO.setup(channel, GPIO.OUT)

(通道编号是基于您所使用的编号系统所指定的(BOARD 或 BCM)。)

您还可以指定输出通道的初始值:

GPIO.setup(channel, GPIO.OUT, initial = GPIO.HIGH)

输入

读取 GPIO 针脚的值:

GPIO.input(channel)

(通道编号是基于您所使用的编号系统所指定的(BOARD 或 BCM)。)这将返回 0 / GPIO.LOW / False 或者 1 / GPIO.HIGH / True。

输出

设置 GPIO 针脚的输出状态:

GPIO.output(channel, state)

(通道编号是基于您所使用的编号系统所指定的(BOARD 或 BCM)。)

状态可以为 0 / GPIO.LOW / False 或者 1 / GPIO.HIGH / True。

清理

在任何程序结束后,请养成清理用过的资源的好习惯。使用 RPi.GPIO 也同样需要这样。恢复所有使用过的通道状态为输入,您可以避免由于短路意外损坏您的 Raspberry Pi 针脚。注意,该操作仅会清理您的脚本使用过的 GPIO 通道。

在您的脚本结束后进行清理:

GPIO.cleanup()

Raspberry Pi 修订版本和 RPi.GPIO 版本

检测 Raspberry Pi 主板的修订版本:

GPIO.RPI_REVISION

检测 RPi.GPIO 的版本:

GPIO.VERSION

2.使用 RPi.GPIO 模块的输出(Output)功能

1、首先对 RPi.GPIO 进行设置(根据这里的描述)

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(12, GPIO.OUT)

2、设置某个输出针脚状态为高电平:

GPIO.output(12, GPIO.HIGH)
# 或者
GPIO.output(12, 1)
# 或者
GPIO.output(12, True)

3、设置某个输出针脚状态为低电平:

GPIO.output(12, GPIO.LOW)
# 或者
GPIO.output(12, 0)
# 或者
GPIO.output(12`, False)

4、程序结束后进行清理

GPIO.cleanup()

注意,您可以读取使用 input() 函数设置的输出通道的当前状态。例如对输出进行切换:

GPIO.output(12, not GPIO.input(12))

3.使用 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 停止。

以下为使 LED 每两秒钟闪烁一次的示例:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
p = GPIO.PWM(12, 0.5)
p.start(1)
input('点击回车停止:')   # 在 Python 2 中需要使用raw_input
p.stop()
GPIO.cleanup()

以下为使 LED 在亮/暗之间切换的示例:

import time 
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
p = GPIO.PWM(12, 50)  # 通道为 12 频率为 50Hz
p.start(0)
try:
	while 1:
		for dc in range(0, 101, 5):
            p.ChangeDutyCycle(dc
            time.sleep(0.1)
		for dc  in range(100, -1, -5):
            p.ChangeDutyCycle(dc)    
            time.sleep(0.1)
exceptKeyboardInterrupt:
	pass
p.stop()
GPIO.cleanup()