什么是树莓派GPIO?
在探索 树莓派GPIO引脚介绍 之前,我们需要明确GPIO(General Purpose Input/Output,通用输入/输出)的概念。它是树莓派主板边缘那一排针脚的核心功能集合。通过这排针脚,树莓派不再仅仅是一台微型电脑,而是变成了一个可以控制物理世界的控制器。
无论是点亮一颗LED灯,读取温度传感器的数据,还是驱动复杂的LCD屏幕,都依赖于对这排引脚的正确理解与配置。对于开发者而言,熟练掌握GPIO是进入嵌入式开发领域的必经之路。
物理接口
标准的40针排针设计(适用于Pi 2B及后续型号),兼容绝大多数HAT扩展板。引脚排列遵循历史兼容性,确保新旧设备无缝衔接。
电气特性
工作电压为3.3V。这意味着连接到GPIO引脚的外设必须兼容3.3V逻辑电平,直接连接5V设备可能导致树莓派永久损坏。
功能复用
大部分引脚支持多重功能(Alt Modes),如UART、SPI、I2C、PWM等,通过软件配置即可切换引脚的物理行为。
电源引脚与电压规范
在进行任何硬件连接前,理解电源引脚是 树莓派GPIO引脚介绍 中最关键的安全环节。树莓派的GPIO头提供了多种电压输入选项,但必须严格区分。
电压引脚说明
| 引脚编号 | 名称 | 电压值 | 最大电流输出 | 用途说明 |
|---|---|---|---|---|
| 1, 17 | 3.3V | 3.3V DC | ~50mA (总和建议) | 为外部低功耗传感器或模块供电。 |
| 2, 4 | 5V | 5V DC | 取决于电源输入 | 直接连接至USB电源输入,通常用于驱动电机或高功耗设备(需外部电源隔离)。 |
| 6, 9, 14, 20, 25, 30, 34, 39 | GND | 0V | N/A | 接地引脚。务必确保所有连接设备的GND与树莓派GND共地。 |
主流通信协议配置指南
现代树莓派开发极少使用简单的数字IO读写,更多时候我们需要通过标准总线协议与外设通信。以下是三种最常用的总线配置方法。
I2C (Inter-Integrated Circuit)
I2C使用两根线:SDA(数据线)和SCL(时钟线)。它支持多主机和多从机,通过地址区分设备。
物理引脚:
- GPIO 2 (SDA)
- GPIO 3 (SCL)
启用步骤:
sudo raspi-config选择 "Interfacing Options" -> "I2C" -> "Yes"
sudo reboot安装工具检测设备
sudo apt-get install i2c-tools i2cdetect -y 1
SPI (Serial Peripheral Interface)
SPI是一种高速、全双工通信总线,通常用于连接显示屏、SD卡或高速ADC。它需要4根线:MOSI, MISO, SCLK, CE。
物理引脚(SPI0):
- GPIO 10 (MOSI)
- GPIO 9 (MISO)
- GPIO 11 (SCLK)
- GPIO 8 (CE0) / GPIO 7 (CE1)
启用步骤:
sudo raspi-config选择 "Interfacing Options" -> "SPI" -> "Yes"
UART (Universal Asynchronous Receiver-Transmitter)
UART用于串行通信,常用于树莓派的控制台调试或与蓝牙/WiFi模块连接。注意:启用硬件UART后,控制台功能可能会受到影响。
物理引脚(Mini UART / PL011):
- GPIO 14 (TXD) - 发送
- GPIO 15 (RXD) - 接收
启用步骤:
sudo raspi-config选择 "Interfacing Options" -> "Serial Port"
询问 "Login shell accessible over serial?" -> No
询问 "Serial port hardware enabled?" -> Yes
40针 GPIO 引脚定义详解
为了帮助您快速查阅,以下提供了标准的树莓派3B+/4B/5系列通用的40针GPIO引脚表。请注意,引脚编号分为“物理引脚号(Board Pin)”和“BCM编号(GPIO Number)”,编程时通常使用BCM编号。
| 物理Pin | BCM GPIO | 物理Pin | BCM GPIO | 功能描述 |
|---|---|---|---|---|
| 1 | — | 2 | — | 5V Power |
| 3 | 2 | 4 | — | I2C SDA / 5V Power |
| 5 | 3 | 6 | — | I2C SCL / GND |
| 7 | 4 | 8 | 14 | GPIO4 / UART TXD |
| 9 | — | 10 | 15 | GND / UART RXD |
| 11 | 17 | 12 | 18 | GPIO17 / SPI CE1 |
| 13 | 27 | 14 | — | GPIO27 / GND |
| 15 | 22 | 16 | 23 | GPIO22 / GPIO23 |
| 17 | — | 18 | 24 | 3.3V Power / SPI MOSI |
| 19 | 10 | 20 | — | SPI MOSI / GND |
| 21 | 9 | 22 | 25 | SPI MISO / GPIO25 |
| 23 | 11 | 24 | 8 | SPI SCLK / SPI CE0 |
| 25 | — | 26 | 7 | GND / SPI CE1 |
| 27 | 0 | 28 | 1 | I2C SDA (Header) / I2C SCL (Header) |
| 29 | 5 | 30 | — | GPIO5 / GND |
| 31 | 6 | 32 | 12 | GPIO6 / GPIO12 |
| 33 | 13 | 34 | — | GPIO13 / GND |
| 35 | 19 | 36 | 16 | GPIO19 / GPIO16 |
| 37 | 26 | 38 | 20 | GPIO26 / GPIO20 |
| 39 | — | 40 | 21 | GND / GPIO21 |
Python GPIO 编程实战
掌握引脚定义后,下一步是通过代码控制硬件。Python是树莓派最流行的编程语言,得益于 gpiozero 和 RPi.GPIO 库的支持。
示例1:使用 gpiozero 控制LED(推荐新手)
gpiozero 库封装了底层细节,使代码更加简洁易读。
from gpiozero import LED from time import sleep定义LED连接的引脚号 (BCM模式)
led = LED(17) while True: led.on() print("LED 已开启") sleep(1) led.off() print("LED 已关闭") sleep(1)
示例2:使用 RPi.GPIO 读取按钮状态
这是一个更底层的示例,展示了如何配置引脚为输入模式并检测边沿触发。
import RPi.GPIO as GPIO import time使用 BCM 编号系统
GPIO.setmode(GPIO.BCM)定义引脚
btn_pin = 2 led_pin = 17配置引脚
GPIO.setup(btn_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(led_pin, GPIO.OUT) try: while True: # 读取按钮状态 (按下为Low) if GPIO.input(btn_pin) == False: GPIO.output(led_pin, GPIO.HIGH) print("按钮按下,LED点亮") else: GPIO.output(led_pin, GPIO.LOW) time.sleep(0.2) except KeyboardInterrupt: GPIO.cleanup() print("程序退出,清理引脚")