GPIO是什么?
GPIO(General-Purpose Input/Output)是树莓派上的通用输入输出引脚,相当于树莓派与外部世界的“接口”——你可以用它控制LED亮灭、驱动电机转动,也能读取传感器的数据(比如温湿度、人体红外)。树莓派4B有40个GPIO引脚,每个引脚都有特定功能,但大部分可以作为通用引脚自由使用。

先搞懂引脚编号:BOARD vs BCM
新手最容易栽在“引脚编号”上——树莓派的GPIO有两种编号方式,一定要选一种并坚持用:
BOARD编号(物理引脚) | BCM编号(芯片引脚) | 功能描述 |
---|---|---|
11 | GPIO17 | 通用IO |
12 | GPIO18 | PWM输出 |
13 | GPIO27 | 通用IO |
15 | GPIO22 | 通用IO |
16 | GPIO23 | 通用IO |
18 | GPIO24 | 通用IO |
22 | GPIO25 | 通用IO |
- BOARD:按物理引脚顺序编号(从左到右、从上到下数),适合新手(不用记芯片编号)。
- BCM:按Broadcom芯片的内部编号,编程时更常用(比如Python库默认用BCM)。
举个例子:如果你要接LED到“BOARD 11”引脚,对应的BCM编号是GPIO17——编程时用GPIO.setmode(GPIO.BCM)
,然后指定引脚为17即可。
准备工具:新手必买清单
控制GPIO不需要复杂器材,基础套装就能玩起来:
– 树莓派(推荐4B或Zero W,系统用Raspberry Pi OS)
– 面包板+杜邦线(公对公、公对母,方便连接)
– LED灯(任意颜色,长脚是阳极,短脚是阴极)
– 电阻(220Ω~1kΩ,保护LED不被烧坏)
– 传感器(可选:HC-SR501人体红外、DHT11温湿度)
第一次玩GPIO:控制LED闪烁
先从最简单的“LED闪烁”开始,学会电路连接和基础编程。
电路连接步骤(以BCM 17为例):
- 树莓派断电(重要!避免短路)。
- LED长脚(阳极)接杜邦线,连到树莓派的GPIO17(BOARD 11)。
- LED短脚(阴极)接电阻一端,电阻另一端接树莓派的GND(比如BOARD 6)。
- 通电树莓派,准备编程。
Python代码(用RPi.GPIO库):
先安装库:
sudo apt update && sudo apt install python3-rpi.gpio
然后写一个blink.py
:
import RPi.GPIO as GPIO
import time
# 1. 设置引脚编号方式(选BCM)
GPIO.setmode(GPIO.BCM)
# 2. 定义LED连接的引脚(BCM 17)
LED_PIN = 17
# 3. 设置引脚为输出模式(要控制LED亮灭,所以是OUT)
GPIO.setup(LED_PIN, GPIO.OUT)
try:
print("LED开始闪烁,按Ctrl+C退出...")
while True:
GPIO.output(LED_PIN, GPIO.HIGH) # 输出高电平→点亮LED
time.sleep(1) # 等待1秒
GPIO.output(LED_PIN, GPIO.LOW) # 输出低电平→熄灭LED
time.sleep(1) # 等待1秒
except KeyboardInterrupt:
# 4. 清理GPIO设置(避免下次使用出错)
GPIO.cleanup()
print("程序退出,GPIO已清理")
运行代码(需要sudo权限,因为GPIO需要root访问):
sudo python3 blink.py
看到LED每秒闪烁一次?恭喜你,完成了第一个GPIO项目!
常见问题:新手踩过的坑
1. LED不亮?检查这3点:
- 编号错了:用了BCM 17却接了BOARD 12?重新核对引脚表!
- 正负极反了:LED长脚没接GPIO?把LED反过来试试。
- 没接电阻:直接连LED会短路,赶紧加220Ω电阻!
2. 提示“Permission denied”?
运行脚本时加sudo
——GPIO属于系统资源,需要管理员权限。
3. 按Ctrl+C退出后,LED还亮着?
没加GPIO.cleanup()
!这个函数会把引脚恢复到默认状态,一定要加在except
里。
实战项目1:人体红外传感器控制LED
用HC-SR501人体红外传感器做个“有人来了就亮灯”的小装置,更贴近实际应用。
元件与连接:
- HC-SR501传感器:VCC接树莓派5V,GND接GND,OUT接BCM 18(BOARD 12)。
- LED:连接方式和之前一样(BCM 17)。
Python代码:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
# 定义引脚
PIR_PIN = 18 # 人体红外传感器的OUT引脚
LED_PIN = 17 # LED引脚
# 设置PIR为输入模式(读传感器数据),LED为输出模式
GPIO.setup(PIR_PIN, GPIO.IN)
GPIO.setup(LED_PIN, GPIO.OUT)
try:
print("传感器初始化中...(2秒)")
time.sleep(2) # 传感器需要2秒预热
print("开始检测人体...")
while True:
if GPIO.input(PIR_PIN) == GPIO.HIGH:
print("有人!LED亮5秒")
GPIO.output(LED_PIN, GPIO.HIGH)
time.sleep(5) # 保持亮5秒
else:
GPIO.output(LED_PIN, GPIO.LOW)
time.sleep(0.1) # 减少CPU占用
except KeyboardInterrupt:
GPIO.cleanup()
运行后,走到传感器前,LED会自动亮5秒——是不是很有成就感?
实战项目2:DHT11温湿度检测
用DHT11传感器读取环境温湿度,数据会打印在终端上。
元件与连接:
- DHT11传感器:VCC接5V,GND接GND,DATA接BCM 4(BOARD 7)。
安装库:
sudo pip3 install adafruit-circuitpython-dht
Python代码:
import adafruit_dht
import board
import time
# 初始化DHT11传感器(DATA引脚接board.D4→BCM 4)
dht11 = adafruit_dht.DHT11(board.D4)
try:
while True:
try:
# 读取温湿度
temperature = dht11.temperature
humidity = dht11.humidity
print(f"当前温度: {temperature}°C, 湿度: {humidity}%")
except RuntimeError:
# 传感器偶尔会读错数据,忽略重试
print("读取错误,重试...")
time.sleep(2)
continue
time.sleep(5) # 每5秒读一次
except KeyboardInterrupt:
print("退出程序")
运行后,终端会每隔5秒输出一次温湿度——你可以把数据存到文件里,或者推送到手机(进阶玩法)。
进阶:用GPIO Zero简化编程
如果你觉得RPi.GPIO库太繁琐,可以试试GPIO Zero——它是树莓派官方推荐的简化库,代码更简洁:
比如控制LED闪烁,用GPIO Zero只要3行:
from gpiozero import LED
from time import sleep
led = LED(17) # 直接指定BCM编号
while True:
led.toggle() # 切换LED状态(亮→灭→亮)
sleep(1)
是不是比RPi.GPIO简单多了?新手可以从GPIO Zero入门,再学底层库。
安全提示:别搞坏树莓派!
- 不要接5V到GPIO:GPIO引脚最大承受3.3V,接5V会烧坏芯片!
- 断电再接线:带电插拔元件容易短路,轻则烧元件,重则烧树莓派。
- 用合适的电源:树莓派4B需要5V/3A的电源,用手机充电器可能导致电压不稳。
最后:继续玩点更酷的
学会了基础,可以尝试更复杂的项目:
– 用GPIO控制步进电机(比如让小风扇转起来)。
– 用继电器控制家电(比如自动开关灯)。
– 结合MQTT,用手机远程控制GPIO。
GPIO是树莓派的“灵魂”——通过它,你可以把树莓派变成任何智能设备的核心。慢慢玩,你会发现更多乐趣!
原创文章,作者:,如若转载,请注明出处:https://zube.cn/archives/328