点亮第一盏灯:从树莓派5的GPIO开始你的硬件之旅
你有没有试过用代码控制现实世界?比如按下键盘上的一个键,房间里的一盏灯就亮了——这听起来像科幻电影的情节,但其实只需要一块树莓派、一根杜邦线和一个小小的LED,就能实现。
今天我们就从最基础、也最具仪式感的项目开始:在树莓派5上点亮第一个LED。别小看这个“Hello World”级别的操作,它背后藏着嵌入式开发的核心逻辑——软硬协同。而这一切的起点,就是你必须搞懂的那个东西:树莓派5的引脚定义。
为什么是 GPIO?因为它连接的是“真实世界”
树莓派本质上是一台微型计算机,运行着完整的 Linux 系统。但它和普通电脑最大的不同在于:它有裸露在外的GPIO(General Purpose Input/Output)引脚,也就是那排40个金属针脚。
这些针脚就像是树莓派伸向物理世界的“手指”,你可以用它们:
- 控制灯光开关
- 读取传感器数据(温度、湿度、运动)
- 驱动电机或继电器
- 实现与其他设备的通信(I²C、SPI)
而所有这一切的前提是:你知道每个针脚是干什么的。
树莓派5的40针GPIO长什么样?
树莓派5延续了自树莓派 B+ 以来的经典布局——40针双排排针,位于主板右侧。虽然性能大幅提升,但这一设计保证了与绝大多数扩展板(HAT)、教程和配件的兼容性。
这40个引脚不是随便排列的,它们的功能分布非常讲究:
| 类型 | 数量 | 功能说明 |
|---|---|---|
| 可编程GPIO | 26个 | 可配置为输入或输出,部分支持PWM等特殊功能 |
| 3.3V电源 | 2个 | 提供稳定3.3V供电(最大50mA) |
| 5V电源 | 2个 | 直接来自电源输入,可提供较大电流 |
| 地线(GND) | 8个 | 共用地回路,减少干扰 |
| 专用通信引脚 | 多组 | I²C、SPI、UART 接口预留 |
🔍 小贴士:引脚编号是从左到右、从上到下按“蛇形”排列的。第1针是第一行第一个(靠近以太网口一侧),然后跳到第二行最后一个,再往回走……记住这一点,接线时才不会数错。
别被术语吓住:BCM 和 BOARD 编号到底有什么区别?
新手最容易混淆的一点就是:同一个物理引脚,怎么会有两个名字?
答案是:编号方式不同。
两种命名体系
| 方式 | 示例 | 说明 |
|---|---|---|
BCM | GPIO18 | 基于博通芯片内部的编号(推荐使用) |
BOARD | Pin 12 | 按照物理位置编号(从1开始) |
举个例子:你在代码里写GPIO18,对应的其实是物理第12号引脚。如果你用的是BOARD模式,就得写成12。
# 使用 BCM 编号(推荐) GPIO.setmode(GPIO.BCM) led_pin = 18 # 对应物理引脚12 # 或者使用 BOARD 编号 GPIO.setmode(GPIO.BOARD) led_pin = 12 # 同样对应 GPIO18📌强烈建议初学者统一使用 BCM 编号。原因很简单:大多数文档、库和社区讨论都默认采用 BCM;而且当你换到其他平台时,逻辑更一致。
安全第一!不了解这些参数可能烧掉你的树莓派
在动手之前,请务必牢记以下关键电气特性:
⚠️ 3.3V 是极限!
树莓派所有 GPIO 引脚的工作电平都是3.3V TTL。这意味着:
- 输出高电平时为 3.3V
- 输入识别高电平的阈值约为 2V 以上
- 绝对不能接入 5V 信号!
否则轻则引脚损坏,重则 SoC 芯片报废。别以为这是危言耸听——每年都有无数开发者因为忽略了这点而“献祭”了心爱的开发板。
💡 电流限制也很严格
- 单个 GPIO 最大输出电流约16mA
- 整个芯片所有 GPIO 总输出建议不超过50mA
所以如果你想驱动大功率设备(比如大灯珠、蜂鸣器、电机),必须通过三极管或继电器进行隔离放大,绝不能直接连。
✅ 正确做法:加一个限流电阻
LED 的工作电流通常在 10~20mA,电压降约 1.8~2.2V(红光常见)。我们用欧姆定律算一下该选多大电阻:
$$
R = \frac{V_{in} - V_f}{I} = \frac{3.3V - 2V}{0.015A} ≈ 87Ω
$$
考虑到安全余量,选择220Ω~330Ω的电阻最合适。既能保证亮度,又不会过载。
🛑 再强调一遍:不要省掉限流电阻!哪怕只是“试一下”。
动手实战:三步点亮你的第一个LED
准备好了吗?现在让我们真正动手。
第一步:硬件连接
你需要准备:
- 树莓派5 + 电源 + SD卡(已装好系统)
- LED ×1
- 220Ω 电阻 ×1
- 面包板 ×1
- 杜邦线(公对母)若干
接线步骤:
- 找到树莓派上的GPIO18引脚(物理第12针)
- 将 LED 插入面包板:
- 长脚(阳极)→ 连接到 GPIO18
- 短脚(阴极)→ 连接到电阻一端 - 电阻另一端 → 连接到任意 GND 引脚(如物理第14针)
✅ 连接完成后应该是这样的路径:
GPIO18 → LED(+) → LED(-) → 电阻 → GND📐 提示:不确定哪个是长脚?可以把LED对着光看内部结构——小金属片连接的是负极,大的碗状反光杯是正极。
第二步:编写控制程序(Python版)
我们将使用 Python 中经典的RPi.GPIO库来控制引脚。
安装依赖
sudo apt update sudo apt install python3-rpi.gpio创建脚本文件
nano blink.py粘贴以下代码:
import RPi.GPIO as GPIO import time # 设置为 BCM 编号模式 GPIO.setmode(GPIO.BCM) # 禁止警告(比如重复初始化) GPIO.setwarnings(False) # 定义使用的引脚 LED_PIN = 18 # 配置为输出模式 GPIO.setup(LED_PIN, GPIO.OUT) try: print("LED 开始闪烁... 按 Ctrl+C 停止") while True: GPIO.output(LED_PIN, GPIO.HIGH) # 3.3V 输出,点亮 time.sleep(1) GPIO.output(LED_PIN, GPIO.LOW) # 0V 输出,熄灭 time.sleep(1) except KeyboardInterrupt: print("\n收到中断信号,退出中...") finally: GPIO.cleanup() # 必须调用!恢复引脚状态保存并退出(Ctrl+O → Enter → Ctrl+X)
运行程序
sudo python3 blink.py🎯 成功标志:LED以一秒一次的频率稳定闪烁!
❗注意要使用
sudo权限运行,因为访问硬件需要系统级权限。
更简单的替代方案:试试 gpiozero
如果你觉得上面的代码有点啰嗦,试试这个更友好的库——gpiozero。
安装:
sudo apt install python3-gpiozero代码仅需几行:
from gpiozero import LED from time import sleep led = LED(18) while True: led.on() sleep(1) led.off() sleep(1)是不是清爽多了?gpiozero会自动帮你处理清理工作,也不用手动设置模式,特别适合教学和快速原型开发。
你甚至可以这样写:
led.blink(on_time=1, off_time=1) # 一行实现闪烁常见问题排查指南(踩坑经验分享)
刚入门时总会遇到各种奇怪的问题,这里列出几个高频“坑点”及解决方案:
❌ LED不亮?
- ✅ 检查电源是否正常启动树莓派
- ✅ 确认接线是否正确(尤其是GND有没有接)
- ✅ 查看LED方向是否插反(短脚必须接地)
- ✅ 测量电阻是否失效或阻值过大
- ✅ 换个GPIO试试(某些引脚可能被占用)
❌ 程序报错:“No module named RPi.GPIO”
- ✅ 确保已安装库:
sudo apt install python3-rpi.gpio - ✅ 检查是否用了
python而不是python3
❌ 程序无法结束,Ctrl+C没反应?
- ✅ 确保终端焦点在运行窗口
- ✅ 检查是否有其他进程占用了GPIO
- ✅ 手动执行
sudo pkill python3结束进程
❌ 多次运行后提示“This channel is already in use”
这是因为上次程序没有正确调用GPIO.cleanup()。解决方法:
sudo python3 -c "import RPi.GPIO as GPIO; GPIO.cleanup()"一键清除所有状态。
进阶思考:这只是开始
你以为这只是为了点亮一盏灯?不,它是通往更大世界的入口。
一旦你掌握了 GPIO 的基本控制,接下来就可以轻松拓展出无数玩法:
- 用 PWM 实现呼吸灯效果(GPIO18 支持硬件PWM)
- 添加按钮实现交互控制
- 接DHT11温湿度传感器做环境监测
- 驱动LCD屏幕显示信息
- 构建一个自动浇花系统
而且你会发现,整个过程中最关键的一步,始终是:准确理解每一个引脚的功能和限制。
工具推荐:让开发更高效
别靠死记硬背,善用工具才是王道。
🧰 命令行神器:pinout
安装gpiozero后,在终端直接输入:
pinout你会看到一张清晰的引脚图,包含当前引脚功能、复用状态和编号对照,支持树莓派全系列!
🌐 在线查询网站: pinout.xyz
一个由社区维护的权威引脚查询站,点击任一引脚即可查看:
- 功能描述
- 是否支持PWM/I²C
- 示例代码
- 常见用途
完全免费,离线可用,强烈推荐收藏。
写在最后:你已经迈出了最重要的一步
从看不懂那一排密密麻麻的针脚,到现在亲手让一个LED按照你的意志闪烁——这种掌控感,正是嵌入式开发的魅力所在。
也许你现在还觉得这些知识零散琐碎,但请相信我:每一个资深工程师,都是从点亮第一盏灯开始的。
而你刚刚完成的,不只是一个简单的实验,而是建立了一个认知闭环:
写代码 → 控制硬件 → 观察结果 → 调试优化
这才是真正的“动手能力”。
下次我们可以聊聊如何用同一个GPIO实现渐变调光,或者如何读取外部按键信号。但在此之前,不妨多花几分钟,试着改改延时时间,看看LED节奏的变化;或者换个引脚重新接一遍,加深记忆。
技术的成长,往往就藏在这些看似微不足道的练习里。
如果你在实现过程中遇到了其他挑战,欢迎在评论区分享讨论。