Skip to content

Raspberry Pi - GPIO 连接器

Raspberry Pi 的标志性特性之一(最初不包括 Pico 微控制器)是通用输入/输出(General Purpose Input/Output, GPIO)排针。这排引脚允许 Pi 通过连接到电子元件,如 LED、传感器、按钮、电机(通过驱动板)和其他集成电路来与物理世界交互。

所有现代 Raspberry Pi 型号(从 Pi 1 Model B+ 开始)都具有标准的 40 针排针。理解每个引脚的功能对于电子项目至关重要。

关键引脚类型:

  • 电源引脚: 为外部组件提供电源。有 +5V 和 +3.3V 引脚。
  • 接地引脚(GND): 提供电路的通用 0V 参考点。
  • 通用输入/输出引脚(GPIO): 这些是可编程引脚。每个引脚都可以配置为输入(读取传感器/按钮的信号)或输出(发送信号控制 LED/电机)。它们工作在 3.3V 逻辑电平。
  • 特殊功能引脚: 一些 GPIO 引脚具有标准通信协议(如 I2C、SPI 和 UART)的替代功能。

引用引脚有两种常见方式:

  • 物理引脚编号(Board Pin Numbering): 从排针上物理引脚的 1 到 40 进行计数,从左上角开始向下,然后从右上角开始向下(当 USB/以太网端口朝向您时)。
  • BCM(Broadcom)引脚编号(BCM Pin Numbering): 指的是 Broadcom 处理器使用的 GPIO 通道号(例如 GPIO17, GPIO22)。这是在 gpiozero 和 RPi.GPIO 等软件库中最常使用的编号方案。

了解您的代码或图表使用的是哪种编号方案至关重要。您可以在 Pi 上直接打开终端并运行以下命令来查看交互式引脚布局图:

pinout

此命令会显示两种编号方案、当前功能和电压电平。

不遵守这些规则可能会永久损坏您的 Raspberry Pi:

  • 切勿向任何 GPIO 引脚连接超过 3.3V 的电压。 将 5V 直接连接到 GPIO 输入引脚会将其损坏。
  • 不要从 GPIO 引脚抽取过大的电流。 每个配置为输出的引脚只能安全地提供少量电流(通常最高 16mA)。所有 GPIO 引脚的总电流抽取不应超过约 50mA。
  • 为 LED 使用限流电阻。 将 LED 与适当的电阻(例如 220-330 欧姆)串联,以防止它们从 GPIO 引脚抽取过大的电流。
  • 不要从 3.3V 电源引脚抽取过大的电流。 从 3.3V 引脚的总电流抽取通常应保持在 50-100mA 以下(请检查特定型号规格)。功耗大的组件应使用 5V 引脚或外部电源。
  • 不要将引脚短接在一起,特别是电源引脚和接地引脚。 在通电前仔细检查接线。
  • 避免在 Pi 通电时连接/断开电线(防静电措施也很重要)。

Python 是在 Pi 上控制 GPIO 引脚最常用的语言。有几个库可用:

gpiozero 为 LED、按钮、传感器和电机等常见组件提供了简单、面向对象的接口。它自动处理许多底层设置,默认使用 BCM 引脚编号。它通常预装在 Raspberry Pi OS 桌面版中。

安装(如果需要):

sudo apt update
sudo apt install python3-gpiozero

示例:闪烁一个连接在 GPIO17 和 GND 之间(带有电阻)的 LED:

from gpiozero import LED
from time import sleep
led = LED(17) # Use BCM pin number
while True:
led.on() # Turn LED on
sleep(1) # Wait 1 second
led.off() # Turn LED off
sleep(1) # Wait 1 second

此库提供对 GPIO 功能更直接的控制(设置引脚模式、上拉/下拉电阻、检测边缘)。它允许使用 BCM 或物理引脚编号。需要更明确的设置和清理。

安装(如果需要):

sudo apt update
sudo apt install python3-rpi.gpio

示例:使用 RPi.GPIO 闪烁一个 LED(BCM 编号):

import RPi.GPIO as GPIO
import time
LED_PIN = 17
GPIO.setmode(GPIO.BCM) # Use BCM pin numbering
GPIO.setup(LED_PIN, GPIO.OUT) # Set pin as output
try:
while True:
GPIO.output(LED_PIN, GPIO.HIGH) # Turn LED on
time.sleep(1)
GPIO.output(LED_PIN, GPIO.LOW) # Turn LED off
time.sleep(1)
except KeyboardInterrupt: # Allows clean exit with Ctrl+C
pass
finally:
GPIO.cleanup() # Reset GPIO pins

许多传感器和外围设备使用标准通信协议,如 I2C、SPI 或 UART。这些接口在使用前需要启用。

启用这些接口最简单的方法是使用 Raspberry Pi 配置工具:

  1. 从桌面环境:应用程序菜单 -> 首选项 -> Raspberry Pi 配置 -> 接口选项卡。
  2. 从命令行:运行 sudo raspi-config,导航到“接口选项”,选择接口(I2C、SPI、串行端口),然后选择“启用”。
  3. 启用接口后重新启动您的 Pi,以使更改完全生效。

一种两线协议(SDA - 数据线,SCL - 时钟线),常用于传感器(温度、压力、加速度计)、RTC 模块和 OLED 显示屏。多个设备可以共享同一总线,每个设备都有唯一的地址。

  • 引脚: 通常是 GPIO2 (SDA) 和 GPIO3 (SCL)。查看 pinout 命令。
  • 工具: 安装 i2c-tools (sudo apt install i2c-tools)。使用 sudo i2cdetect -y 1 命令扫描总线并查找已连接设备的地址。
  • Python: 使用 smbus2 库 (sudo apt install python3-smbus)。

一种四线协议(MOSI, MISO, SCLK, CE),常用于与 ADC 转换器、SD 卡读卡器和某些显示器等设备进行更快的通信。

  • 引脚: 通常是 GPIO10 (MOSI), GPIO9 (MISO), GPIO11 (SCLK), GPIO8 (CE0), GPIO7 (CE1)。查看 pinout 命令。
  • Python: 使用 spidev 库 (sudo apt install python3-spidev 或 pip install spidev)。

一种两线协议(TX - 发送,RX - 接收),用于点对点串行通信,常用于连接 GPS 模块、其他微控制器或访问 Pi 的控制台。

  • 引脚: 通常是 GPIO14 (TXD) 和 GPIO15 (RXD)。查看 pinout 命令。
  • 配置: 通过 raspi-config 启用时,选择您是否希望通过串行端口访问登录 Shell(这将禁用其用于一般用途),或者仅为您的程序启用硬件串行端口。
  • 设备: 主要硬件 UART 通常显示为 /dev/serial0(根据型号和配置,它通常链接到 /dev/ttyS0 或 /dev/ttyAMA0)。
  • Python: 使用 pyserial 库 (sudo apt install python3-serial)。
  • 测试: 使用 minicom (sudo apt install minicom) 来发送/接收数据,例如 minicom -b 9600 -o -D /dev/serial0(将 9600 替换为正确的波特率)。