目录
导入 RPi.GPIO 模块:
引脚编号
设置channel
设置多个通道
获取输入
设置输出
输出到多个通道
清理
RPi 板信息和 RPi.GPIO 版本
try:
import RPi.GPIO as GPIO
except RuntimeError:
print("Error importing RPi.GPIO! This is probably because you need superuser privileges. You can achieve this by using 'sudo' to run your script")
通过这种方式,您可以在脚本的其余部分将其称为 GPIO。
有两种方法可以在 RPi.GPIO 中对 Raspberry Pi 上的 IO 引脚进行编号。首先是使用 BOARD 编号系统。这是指 Raspberry Pi 板的 P1 接头上的引脚编号。使用这种编号系统的优势在于,无论 RPi 的电路板版本如何,您的硬件都将始终工作。您无需更改代码。
第二个编号系统是 BCM 编号。这是一种较低级别的工作方式 - 它指的是 Broadcom SOC 上的通道号。您必须始终使用图表,说明哪个通道号连接到 RPi 板上的哪个引脚。您的脚本可能会在 Raspberry Pi 板的修订之间中断。
GPIO.setmode(GPIO.BOARD) # 或者 GPIO.setmode(GPIO.BCM)
要检测已设置的引脚编号系统(例如,通过另一个 Python 模块):
模式 = GPIO.getmode() 模式将为 GPIO.BOARD、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(通道,GPIO.OUT,初始=GPIO.HIGH)
您可以为每次通话设置多个频道(从 0.5.8 版本开始)。例如:
chan_list = [11,12] # 添加任意数量的频道!
# 你可以用元组代替,即:
# chan_list = (11,12)
GPIO.setup(chan_list, GPIO.OUT)
要读取 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。
您可以在同一个调用中输出到多个通道(从 0.5.8 版本开始)。例如:
chan_list = [11,12] # 也适用于元组
GPIO.output(chan_list, GPIO.LOW) # 将所有设置为 GPIO.LOW
GPIO.output(chan_list, (GPIO.HIGH, GPIO.LOW)) # 设置第一个 HIGH 和第二个 LOW
在任何程序的最后,清理您可能使用过的任何资源都是一个好习惯。这与 RPi.GPIO 没有什么不同。通过将您使用过的所有通道返回到输入而不上拉/下拉,您可以通过短接引脚来避免意外损坏您的 RPi。请注意,这只会清理脚本使用的 GPIO 通道。请注意,GPIO.cleanup() 还会清除正在使用的引脚编号系统。
在脚本结束时进行清理:
GPIO.cleanup()
当您的程序退出时,可能不想清理每个通道而留下一些设置。您可以清理单个频道、频道列表或频道元组:
GPIO.cleanup(channel1)
GPIO.cleanup((channel1,channel2))
GPIO.cleanup([channel1,channel2])
要发现有关您的 RPi 的信息:
GPIO.RPI_INFO
要发现 Raspberry Pi 板修订版:
GPIO.RPI_INFO['P1_REVISION']
下面代码控制蜂鸣器发出声音,其中用到的PWM功能会在后面文章讲解
import time
import random
try:
import RPi.GPIO as GPIO
except RuntimeError:
print("Error importing RPi.GPIO! This is probably because you need superuser privileges. You can achieve this by using 'sudo' to run your script")
# GPIO.setwarning(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(32, GPIO.OUT)
# use
p = GPIO.PWM(32, 300)
p.start(1)
# input('Press return to stop:') # use raw_input for Python 2
try:
while True:
for dc in range(0, 101, 5):
p.ChangeFrequency(random.randrange(300, 2000))
p.ChangeDutyCycle(dc)
time.sleep(0.5 * random.random())
except KeyboardInterrupt:
pass
p.stop()
GPIO.cleanup()