Python树莓派GPIO接口 python控制树莓派gpio_Python树莓派GPIO接口


目录

导入 RPi.GPIO 模块:

引脚编号

设置channel

设置多个通道

获取输入

设置输出

输出到多个通道

清理

RPi 板信息和 RPi.GPIO 版本


导入 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。

引脚编号

Python树莓派GPIO接口 python控制树莓派gpio_机器学习_02

有两种方法可以在 RPi.GPIO 中对 Raspberry Pi 上的 IO 引脚进行编号。首先是使用 BOARD 编号系统。这是指 Raspberry Pi 板的 P1 接头上的引脚编号。使用这种编号系统的优势在于,无论 RPi 的电路板版本如何,您的硬件都将始终工作。您无需更改代码。

第二个编号系统是 BCM 编号。这是一种较低级别的工作方式 - 它指的是 Broadcom SOC 上的通道号。您必须始终使用图表,说明哪个通道号连接到 RPi 板上的哪个引脚。您的脚本可能会在 Raspberry Pi 板的修订之间中断。

Python树莓派GPIO接口 python控制树莓派gpio_嵌入式硬件_03




GPIO.setmode(GPIO.BOARD) # 或者 GPIO.setmode(GPIO.BCM)

要检测已设置的引脚编号系统(例如,通过另一个 Python 模块):

模式 = GPIO.getmode() 模式将为 GPIO.BOARD、GPIO.BCM 或无

警告

您的 Raspberry Pi 的 GPIO 上可能有多个脚本/电路。因此,如果 RPi.GPIO 检测到引脚已配置为默认值(输入)以外的内容,则在尝试配置脚本时会收到警告。要禁用这些警告:

GPIO.setwarnings(False)

设置channel

您需要将您使用的每个通道设置为输入或输出。要将通道配置为输入:

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 板信息和 RPi.GPIO 版本

要发现有关您的 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()