树莓派5引脚定义通俗解释:物理编号与BCM到底怎么用?
你有没有过这样的经历?
接好LED,写完代码,一运行——灯不亮。
反复检查线路、重启树莓派、换电源……最后发现:原来是把“Pin 18”理解错了!
是物理的第18个引脚?还是BCM编号里的GPIO 18?
这两个数字在树莓派上根本不是一回事。
这正是无数初学者踩过的坑,也是很多老手偶尔也会混淆的地方。
尤其在树莓派5发布后,虽然引脚总数仍为40个,但内部SoC换成了全新的BCM2712,部分功能复用和性能优化带来了新的使用注意点。
今天我们就来彻底讲清楚:
什么是物理编号?什么是BCM编号?它们有什么区别?什么时候该用哪个?
别再靠猜了,看完这篇你就全明白了。
从一块板子说起:树莓派的“手脚”在哪?
树莓派不像普通电脑只有USB、HDMI这些标准接口,它还有一排裸露的金属针脚——这就是GPIO(General Purpose Input/Output),中文叫“通用输入输出引脚”。
你可以把它想象成树莓派的“手脚”,用来连接按钮、传感器、电机、显示屏等各种外设。
但问题来了:这么多引脚,怎么知道哪一个是哪一个?
答案就是——编号系统。
而树莓派偏偏有两种不同的编号方式,这就埋下了混乱的种子。
物理编号:按位置数数就能找到的“地图坐标”
我们先看最直观的一种:物理编号(Physical Pin Numbering)。
它是怎么编号的?
很简单:从左上角开始,按实际位置顺序数下去。
树莓派的GPIO排针是2×20 排列,共40个引脚。编号规则如下:
- 第一行:Pin 1 → Pin 2 → … → Pin 20
- 第二行:Pin 21 → Pin 22 → … → Pin 40
排列方式像这样(俯视图):
3V3 | 5V GND | 5V GPIO X | GND GPIO Y | GPIO Z ... ...比如:
- 左上角第一个引脚是Pin 1,它是3.3V 电源
- 它右边那个是Pin 2,是5V 电源
- 下一行左边是Pin 3,对应的是BCM GPIO 2
- 再下一个是Pin 4,又是5V
- 一直到右下角最后一个,是Pin 40
✅ 小贴士:Pin 1通常有一个白色小圆点或方框标记,是定位起点的关键!
为什么说它“直观”?
因为你不需懂编程、也不用看芯片手册,只要拿着杜邦线一根根对过去,就能确认接的是哪个孔。
就像你在地图上找“A3”格子一样,只看位置,不看内容。
这种编号方式特别适合:
- 初学者接线教学
- 面包板快速搭建原型
- 和别人口头沟通:“我把LED接到第11个针上了”
但它有个致命弱点:不能直接用于编程。
你想啊,操作系统怎么知道“第11个针”对应的是哪个寄存器?它得靠芯片内部的逻辑编号才行。
所以就有了第二种编号——BCM。
BCM编号:程序里真正起作用的“身份证号”
BCM,全称是Broadcom SOC GPIO Numbering,也就是博通公司为其SoC(片上系统)设计的一套逻辑编号体系。
树莓派5使用的SoC是BCM2712,所有GPIO的功能控制都由这个芯片决定。
每个引脚都有一个“身份证”:BCM编号
比如:
- 物理 Pin 7 → 对应 BCM GPIO 4
- 物理 Pin 11 → 对应 BCM GPIO 17
- 物理 Pin 12 → 对应 BCM GPIO 18
- 物理 Pin 13 → 对应 BCM GPIO 27
这些对应关系是由硬件设计固定的,不是随便定的。
当你在Python里写GPIO.setup(18, OUT)时,你其实是在告诉系统:“我要操作BCM编号为18的那个引脚”。
如果误以为这是物理Pin 18(其实是BCM 24),那很可能接错功能,甚至烧坏设备。
为什么必须用BCM编号编程?
因为操作系统通过设备树(Device Tree)把BCM编号映射到具体的硬件寄存器。
比如 BCM GPIO 18 支持硬件PWM输出,这意味着你可以用它精确控制舵机角度或LED亮度,而CPU几乎不参与计算。
但如果你用了物理Pin 18(BCM 24),它并不支持PWM,只能做普通IO,效果天差地别。
这就是为什么大多数主流库(如RPi.GPIO、gpiozero、pigpio)默认使用BCM编号。
一张表看懂两种编号的核心差异
| 对比项 | 物理编号(BOARD) | BCM编号(BCM) |
|---|---|---|
| 编号依据 | 引脚在板子上的物理位置 | SoC内部GPIO控制器分配 |
| 是否包含电源/GND | 是(如Pin 1=3.3V, Pin 6=GND) | 否,仅指可编程IO |
| 跨代兼容性 | 好(Raspberry Pi 1~5一致) | 差(不同型号分布不同) |
| 编程支持 | 需显式设置模式才能使用 | 多数库默认使用 |
| 功能支持 | 无法体现复用功能 | 可配置ALT功能(I²C/PWM等) |
| 使用场景 | 接线指导、调试核对 | 程序开发、高级功能调用 |
📌 结论一句话:
接线看物理编号,编程看BCM编号。
实战演示:用BCM编号控制LED
我们来写一段真实的Python代码,点亮一个LED。
假设你把LED正极接到物理Pin 12,负极接地(GND)。
查表可知,Pin 12 对应的是BCM GPIO 18,并且支持PWM。
import RPi.GPIO as GPIO import time # 设置使用BCM编号模式 ← 关键一步! GPIO.setmode(GPIO.BCM) # 定义引脚 LED_PIN = 18 # 注意!这里是BCM编号,不是物理Pin 18 # 设置为输出模式 GPIO.setup(LED_PIN, GPIO.OUT) try: # 闪烁三次 for _ in range(3): GPIO.output(LED_PIN, GPIO.HIGH) print("LED ON") time.sleep(0.5) GPIO.output(LED_PIN, GPIO.LOW) print("LED OFF") time.sleep(0.5) finally: # 清理资源,释放引脚 GPIO.cleanup()📌 如果你把LED_PIN = 18误解为物理Pin 18,那你实际上操作的是BCM GPIO 24,可能没有任何反应,或者影响其他外设。
常见误区与避坑指南
❌ 误区1:以为“Pin XX”就是BCM GPIO XX
这是最常见的错误!
记住:
-物理Pin 7 ≠ BCM 7
- 实际上:物理Pin 7 = BCM GPIO 4
- 而 BCM GPIO 7 在物理Pin 26上
建议随时备一张对照图,或者直接在终端输入:
pinout前提是安装了gpiozero库:
sudo apt install python3-gpiozero执行后会输出一个清晰的ASCII图形,标明每个引脚的物理编号、BCM编号、功能和电压等级,非常实用。
❌ 误区2:随便占用I²C/SPI专用引脚
有些引脚天生就带着“任务”出生,比如:
| BCM编号 | 功能 | 默认用途 |
|---|---|---|
| GPIO 2 / 3 | I²C SDA/SCL | 连接OLED、温湿度传感器 |
| GPIO 9 / 10 / 11 | SPI MOSI/MISO/SCLK | 连接ADC、RF模块 |
| GPIO 14 / 15 | UART TX/RX | 串口通信 |
如果你把这些引脚当成普通IO来用,可能会导致:
- I²C设备无法识别
- SPI传输失败
- SSH串口登录失效
💡 解决方案:
- 查阅官方文档《 Raspberry Pi GPIO Pinout 》
- 使用raspi-config启用/禁用特定接口
- 在代码中避免冲突配置
❌ 误区3:过度依赖3.3V供电引脚
虽然物理Pin 1是3.3V电源,但它能提供的电流有限(一般不超过50mA)。
如果你接了个大功率模块(如蜂鸣器、继电器、RGB灯带),可能导致:
- 电压下降,系统不稳定
- 树莓派自动关机或重启
✅ 正确做法:
- 高功耗设备使用外部电源(如5V USB电源)
- 地线共地即可
- 必要时加三极管或光耦隔离
如何选择编号模式?实战建议
✅ 教学场景 → 优先用物理编号(BOARD)
对学生来说,“第7个针脚接按钮”比“BCM GPIO 4”更容易理解。
代码中只需改一行:
GPIO.setmode(GPIO.BOARD) BUTTON_PIN = 7 # 直接使用物理编号优点:直观、易教、少出错。
缺点:无法利用功能复用,移植性差。
✅ 工程项目 → 必须用BCM编号
因为你要用到:
- PWM调光
- I²C读取传感器
- SPI驱动屏幕
- 中断检测按键
这些都依赖于具体引脚的硬件能力,只有BCM编号才能准确表达。
而且现在大多数开源项目、教程、HAT扩展板都是基于BCM编号开发的,统一标准更利于协作。
✅ 最佳实践:两者同时标注
无论是画电路图、写文档,还是做标签,我都建议你同时写出物理编号和BCM编号。
例如:
LED阳极 → 物理Pin 12 (BCM GPIO 18)
按钮信号线 → 物理Pin 13 (BCM GPIO 27)
这样一目了然,后期维护也轻松得多。
高级技巧:查看当前引脚状态
除了pinout命令,你还可以用工具动态查看引脚配置。
方法1:使用gpio readall
安装wiringpi(注意:已不再维护,仅作参考):
git clone https://github.com/WiringPi/WiringPi cd WiringPi ./build然后运行:
gpio readall输出类似:
+-----+-----+---------+------+---+-Model B--+---+------+---------+-----+-----+ | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM | +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+ | | | 3.3V | | | 1 || 2 | | | 5V | | | | 2 | 8 | SDA.1 | ALT0 | 1 | 3 || 4 | | | 5V | | | | 3 | 9 | SCL.1 | ALT0 | 1 | 5 || 6 | | | 0V | | | | 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 0 | IN | TxD | 15 | 14 | +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+可以清楚看到每个引脚的当前模式(IN/OUT/ALT)、电平状态、复用功能等。
方法2:使用 Python + gpiozero 查看信息
from gpiozero import Device from gpiozero.pins.native import NativePin # 打印所有可用引脚信息 for i in range(1, 28): # BCM GPIO 1~27 try: pin = NativePin(i) print(f"BCM GPIO {i}: Function={pin.function}, Pull={pin.pull}") except: print(f"BCM GPIO {i}: Not accessible")有助于调试引脚是否被占用或配置错误。
总结:掌握引脚定义,才算真正入门树莓派
回到最初的问题:
“树莓派5的引脚定义到底该怎么理解?”
现在你应该有了清晰的答案:
- 物理编号是你手上那块板子的“地理坐标”,用来接线、查手册、和人交流;
- BCM编号是芯片内部的“身份证号”,用来编程、调功能、控硬件;
- 二者必须配合使用,缺一不可。
别再凭感觉接线了。
也别再复制粘贴代码却不看引脚定义了。
真正的嵌入式开发,是从认清每一个引脚的身份开始的。
附加建议:养成好习惯,少走十年弯路
每次项目开始前,画一张引脚连接图
- 用 Fritzing、Draw.io 或手绘都可以
- 标明物理编号 + BCM编号 + 功能说明在代码开头明确声明编号模式
python GPIO.setmode(GPIO.BCM) # 或 GPIO.BOARD使用彩色杜邦线建立视觉规范
- 红色:5V
- 橙色:3.3V
- 黑色:GND
- 黄色/白色:信号线保留一份打印版引脚图贴在工作台
- 推荐网站: https://pinout.xyz遇到问题先运行
pinout命令
- 它能帮你快速定位当前配置
如果你正在学习树莓派,或是准备做一个物联网项目,不妨把这篇文章收藏起来。
下次当你拿起杜邦线的时候,你会感谢现在认真读完它的自己。
👉 互动时间:你在使用树莓派引脚时踩过哪些坑?欢迎在评论区分享你的故事!