树莓派 GPIO Python 编程全攻略:从引脚认知到实战项目
GPIO(通用输入输出)引脚是所有树莓派单板计算机的核心扩展接口,通过它可连接传感器、执行器、显示屏等外设,赋予树莓派感知与控制物理世界的能力。本教程将系统讲解 GPIO 引脚定义、硬件接线、Python 编程环境搭建及经典实战项目,助您快速上手物理计算开发。
GPIO 基础认知

图 1:40 引脚 GPIO 排布
GPIO 即 General Purpose Input/Output,是树莓派 SoC 直接引出的可编程数字信号引脚,支持 3.3V 电平。通过软件配置,每个引脚可动态切换为输入(读取按键、传感器)或输出(驱动 LED、继电器、电机驱动模块)模式。树莓派 Zero / 3B+/4B/5 均采用标准 40Pin 排针(早期 Model A/B 为 26Pin),引脚功能定义完全兼容。
40Pin 功能详解(BCM 编号模式)

图 2:树莓派 4B 主板
| 物理引脚 | BCM 编号 | 功能别名 | 备注 |
|---|---|---|---|
| 1 | - | 3.3V 电源 | 最大 50mA |
| 2 | - | 5V 电源 | 直通电源输入,电流取决于适配器 |
| 3 | GPIO 2 | I2C1 SDA | 内置 1.8kΩ 上拉 |
| 4 | - | 5V 电源 | - |
| 5 | GPIO 3 | I2C1 SCL | 内置 1.8kΩ 上拉 |
| 6 | - | GND | - |
| 7 | GPIO 4 | GPCLK0 | 可作 1-Wire 总线 |
| 8 | GPIO 14 | UART0 TXD | 串口发送 |
| 9 | - | GND | - |
| 10 | GPIO 15 | UART0 RXD | 串口接收 |
| 11 | GPIO 17 | - | 通用 I/O |
| 12 | GPIO 18 | PWM0 / PCM_CLK | 硬件 PWM |
| 13 | GPIO 27 | - | 通用 I/O |
| 14 | - | GND | - |
| 15 | GPIO 22 | - | 通用 I/O |
| 16 | GPIO 23 | - | 通用 I/O |
| 17 | - | 3.3V 电源 | - |
| 18 | GPIO 24 | - | 通用 I/O |
| 19 | GPIO 10 | SPI0 MOSI | SPI 主出从入 |
| 20 | - | GND | - |
| 21 | GPIO 9 | SPI0 MISO | SPI 主入从出 |
| 22 | GPIO 25 | - | 通用 I/O |
| 23 | GPIO 11 | SPI0 SCLK | SPI 时钟 |
| 24 | GPIO 8 | SPI0 CE0 | SPI 片选 0 |
| 25 | - | GND | - |
| 26 | GPIO 7 | SPI0 CE1 | SPI 片选 1 |
| 27 | GPIO 0 | ID_SD | EEPROM 数据(HAT 识别) |
| 28 | GPIO 1 | ID_SC | EEPROM 时钟(HAT 识别) |
| 29 | GPIO 5 | - | 通用 I/O |
| 30 | - | GND | - |
| 31 | GPIO 6 | - | 通用 I/O |
| 32 | GPIO 12 | PWM0 | 硬件 PWM |
| 33 | GPIO 13 | PWM1 | 硬件 PWM |
| 34 | - | GND | - |
| 35 | GPIO 19 | PCM_FS / SPI1 | 音频/第二 SPI |
| 36 | GPIO 16 | - | 通用 I/O |
| 37 | GPIO 26 | - | 通用 I/O |
| 38 | GPIO 20 | SPI1 MOSI | 第二 SPI |
| 39 | - | GND | - |
| 40 | GPIO 21 | SPI1 MISO | 第二 SPI |
注意:GPIO 电平为 3.3V,严禁直接接入 5V 信号,否则烧毁 SoC。驱动大电流负载请使用晶体管、MOSFET 或光耦隔离模块。
Python 编程环境搭建

图 3:Python 编程概念
硬件准备清单
- 树莓派开发板(已烧录 Raspberry Pi OS)
- MicroSD 卡(≥16GB Class 10)
- 面包板、公母杜邦线、330Ω 电阻、LED、按键、PIR 人体红外传感器
- (可选)Pi Wedge T 型扩展板或 GPIO 转接板,便于面包板接线
软件库选择:GPIO Zero vs RPi.GPIO
| 特性 | GPIO Zero(推荐新手) | RPi.GPIO(底层控制) |
|---|---|---|
| API 风格 | 面向对象、声明式 | 过程式、寄存器级 |
| 内设驱动 | LED、Button、PWMLED、MotionSensor 等 | 无,需自行实现 |
| 并发支持 | 内置事件回调、线程安全 | 需自行处理线程/中断 |
| 安装命令 | sudo apt install python3-gpiozero | 系统预装 import RPi.GPIO as GPIO |
本教程以 GPIO Zero 为主,兼顾 RPi.GPIO 关键设置。
RPi.GPIO 基础初始化代码
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM) # 采用 BCM 编号
GPIO.setwarnings(False) # 关闭重复配置警告
GPIO.setup(17, GPIO.OUT) # 设置 GPIO17 为输出
GPIO.output(17, GPIO.HIGH) # 输出高电平点亮 LED
GPIO Zero 典型用法示例
from gpiozero import LED, Button, MotionSensor
from signal import pause
led = LED(17) # GPIO17 接 LED
btn = Button(2) # GPIO2 接按键(内部上拉)
pir = MotionSensor(4) # GPIO4 接 PIR 传感器
btn.when_pressed = led.on
btn.when_released = led.off
pir.when_motion = led.on
pir.when_no_motion = led.off
pause() # 保持主线程运行,响应事件
进阶实战项目推荐

图 4:树莓派 4B
| 项目 | 核心外设 | 关键知识点 | 难度 |
|---|---|---|---|
| 智能夜灯 | 光敏电阻 + LED | ADC 读取(需 MCP3008)、阈值判断 | ⭐ |
| 人体感应报警 | PIR + 蜂鸣器 + 推送通知 | 中断回调、HTTP 请求、系统服务化 | ⭐⭐ |
| 温湿度监测看板 | DHT22 / SHT30 + OLED | I2C/单总线通信、数据可视化 | ⭐⭐ |
| 舵机云台追踪 | 2×SG90 + 摄像头 | 硬件 PWM、OpenCV 人脸检测、PID 控制 | ⭐⭐⭐ |
| 家庭自动化网关 | 继电器模块 + MQTT + Home Assistant | 网络编程、设备抽象、OTA 固件更新 | ⭐⭐⭐⭐ |
常见坑点避雷指南
- 引脚编号混淆:代码中统一使用 BCM 模式,并在原理图标注物理引脚号;
- 缺少上下拉电阻:输入模式建议启用内部上拉
GPIO.PUD_UP或外接 10kΩ 电阻; - 电流超限:单个 GPIO 最大 16mA,总和 ≤50mA,大功率负载必须外接驱动电路;
- 未清理资源:程序退出前调用
GPIO.cleanup()或 GPIO Zero 的device.close(); - 权限问题:非 root 运行需将用户加入
gpio组:sudo usermod -a -G gpio $USER后重登。
结语
掌握 GPIO 编程是树莓派从“会跑 Linux 的小电脑”进化为“物理计算核心”的关键一步。建议从 GPIO Zero 入手,逐步深入底层寄存器与中断机制,结合传感器融合、边缘计算、容器化部署等现代技术栈,构建属于您的智能硬件生态。如有疑问,欢迎随时交流探讨。
工业技术