news 2026/2/18 10:40:39

使用Python控制树莓派5 GPIO引脚完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用Python控制树莓派5 GPIO引脚完整指南

从零开始玩转树莓派5 GPIO:用Python点亮你的第一个LED

你有没有想过,让一块小小的电路板“感知”世界?比如检测温度变化、控制灯的明暗、甚至驱动一台小车前进——这些看似复杂的操作,其实都始于一个最基础的动作:控制GPIO引脚

而树莓派5,正是实现这一切的理想起点。它不仅性能更强、接口更稳,还保留了广受欢迎的40针GPIO排布。更重要的是,配合Python这门简洁强大的语言,我们几乎可以“零门槛”地进入嵌入式开发的大门。

今天,我们就来手把手带你完成一次完整的实战旅程:如何使用Python在树莓派5上控制GPIO,从认识引脚到写出第一行代码,再到搭建一个温湿度报警系统。不讲空话,只讲你能用得上的东西。


树莓派5的40个引脚,到底哪个能用?

当你第一次看到树莓派背面那两排20针的金属插脚时,可能会有点懵:这么多针,都是干什么的?

别急。虽然有40个物理引脚,但真正“可编程”的其实只有28个通用GPIO(BCM0–BCM27),其余的是电源(3.3V、5V)、地线(GND)和专用功能引脚。

先搞清两种编号方式

这是新手最容易踩的第一个坑:BCM编号 vs 物理编号

  • BCM编号:是芯片内部的真实编号,由Broadcom SoC定义。例如BCM18
  • 物理编号:就是你从左往右、从上往下数的第几个针脚,比如“第12号引脚”。

📌重点提醒:写代码时强烈推荐使用BCM编号!因为它与底层硬件直接对应,避免因排布混乱导致错误。

举个例子:

BCM18 = 物理引脚12
这个引脚支持PWM输出,常用来调节LED亮度或控制舵机角度。

你可以随时运行下面这条命令查看当前树莓派的引脚布局:

pinout

前提是安装了gpiozero库(后面会讲),它会以图形化方式清晰展示每个引脚的功能和编号。


哪些引脚特别值得关注?

树莓派5相比前代做了不少升级,有几个新引入的专用引脚值得记住:

引脚名称功能说明
FAN支持PWM风扇控制,自动根据CPU温度调速
RUN拉低可重启系统,类似MCU的复位脚
SHUTDOWN外部信号触发安全关机,防止文件损坏

这些不是普通GPIO,而是深度集成到电源管理中的控制通道,非常适合做工业级项目。

⚠️安全警告:所有GPIO工作在3.3V逻辑电平,不能直接接5V设备!否则轻则读值不准,重则烧毁SoC。如果必须连接5V模块(如某些传感器或继电器板),请务必加装电平转换器(如TXS0108E)。

另外,单个GPIO最大输出电流约16mA,总输出建议不超过50mA。大功率负载(如电机、蜂鸣器阵列)一定要外接电源驱动。


Python怎么控制这些引脚?两个库就够了

好消息是:你不需要懂C语言、也不需要研究寄存器映射,Python已经帮你把底层封装好了。

目前最主流的选择有两个:RPi.GPIOgpiozero。它们各有定位,选对工具事半功倍。

RPi.GPIO:掌控一切的“工程师之选”

如果你想要精确控制时序、处理中断、生成PWM波形,那RPi.GPIO是首选。它是老牌经典库,稳定可靠,适合进阶应用。

安装方法
sudo apt update sudo apt install python3-rpi.gpio
最基本的三步走流程
  1. 设置编号模式 →GPIO.setmode(GPIO.BCM)
  2. 配置引脚方向 →GPIO.setup(pin, GPIO.OUT)
  3. 输出高低电平 →GPIO.output(pin, GPIO.HIGH)

来看一个经典案例:让LED闪烁。

import RPi.GPIO as GPIO import time # 使用BCM编号 GPIO.setmode(GPIO.BCM) # 定义LED连接的引脚 LED_PIN = 18 # 设置为输出模式 GPIO.setup(LED_PIN, GPIO.OUT) try: while True: GPIO.output(LED_PIN, GPIO.HIGH) # 开灯 time.sleep(1) GPIO.output(LED_PIN, GPIO.LOW) # 关灯 time.sleep(1) except KeyboardInterrupt: pass finally: GPIO.cleanup() # 必须调用!释放资源

关键点解析
-GPIO.cleanup()很重要!它会将所有被占用的引脚恢复为默认状态,避免下次运行时报错“这个引脚已被使用”。
-try...finally结构确保即使程序被Ctrl+C中断,也能安全清理。


gpiozero:让小学生都能学会的“极简主义”

如果说RPi.GPIO是手动挡汽车,那gpiozero就是自动挡+智能辅助驾驶。

它是树莓派基金会官方推荐的库,专为教育和快速原型设计打造。语法极其简单,连按钮去抖、后台线程都帮你处理好了。

安装方法
sudo apt install python3-gpiozero
再看一遍同样的LED闪烁,这次只需要三行!
from gpiozero import LED from signal import pause led = LED(18) led.blink(on_time=1, off_time=1) # 自动闪烁 pause() # 保持程序运行

是不是惊艳?没有循环、没有延时、不用管cleanup——blink()方法自带后台线程控制,干净利落。

再来看个更实用的例子:用一个按钮控制LED开关。

from gpiozero import LED, Button led = LED(18) button = Button(2) # 绑定事件:按下亮,松开灭 button.when_pressed = led.on button.when_released = led.off pause()

短短几行,就实现了完整的交互逻辑。这种“面向对象 + 事件绑定”的设计思路,特别适合教学演示或快速验证想法。


实战项目:做个本地温湿度报警器

光会点灯还不够,真正的嵌入式系统应该能“感知环境、做出反应”。下面我们做一个实用的小项目:当室内温度过高时,自动报警

硬件准备清单

  • 树莓派5 + 电源
  • DHT22 温湿度传感器
  • 红色LED ×1
  • 有源蜂鸣器 ×1
  • 面包板 + 若干跳线
  • 10kΩ 上拉电阻(用于DHT22数据线)

接线图(BCM编号)

设备连接引脚
DHT22 DataBCM4
LEDBCM17
蜂鸣器BCM27
DHT22 VCC3.3V
DHT22 GNDGND

💡 提示:DHT22对时序要求高,建议使用专用库读取数据,不要自己写bit-banging。

安装传感器库

pip3 install Adafruit_DHT

完整代码实现(基于RPi.GPIO)

import RPi.GPIO as GPIO import Adafruit_DHT import time # 配置参数 DHT_SENSOR = Adafruit_DHT.DHT22 DHT_PIN = 4 LED_PIN = 17 BUZZER_PIN = 27 THRESHOLD_TEMP = 30 # 报警阈值(℃) # GPIO初始化 GPIO.setmode(GPIO.BCM) GPIO.setup(LED_PIN, GPIO.OUT) GPIO.setup(BUZZER_PIN, GPIO.OUT) print("启动温湿度监控系统...") try: while True: humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN) if temperature is not None: print(f"温度: {temperature:.1f}°C, 湿度: {humidity:.1f}%") if temperature > THRESHOLD_TEMP: GPIO.output(LED_PIN, GPIO.HIGH) GPIO.output(BUZZER_PIN, GPIO.HIGH) print("⚠️ 高温报警!") else: GPIO.output(LED_PIN, GPIO.LOW) GPIO.output(BUZZER_PIN, GPIO.LOW) else: print("❌ 传感器读取失败,检查接线") time.sleep(2) # 每2秒采样一次 except KeyboardInterrupt: print("\n系统关闭中...") finally: GPIO.cleanup()

🎯这个项目的实际价值
- 无需联网即可本地报警,响应速度快
- 成本低,适合家庭、实验室等场景
- 易于扩展:加入WiFi上传数据、OLED显示、多节点组网等


老司机才知道的6个避坑指南

别以为接上线、跑通代码就万事大吉。以下是我在真实项目中踩过的坑,现在免费送给你:

1.永远不要带电插拔GPIO

热插拔可能瞬间产生反向电动势,击穿IO口。养成“先断电再接线”的习惯。

2.大电流负载必须独立供电

继电器、步进电机、RGB灯带这类设备,电流轻松突破百毫安。必须使用外部电源,并通过光耦或MOSFET隔离控制。

3.按钮要加软件去抖

机械按键按下时会有毫秒级抖动,可能导致误触发多次。gpiozero.Button内置防抖机制,而RPi.GPIO需手动添加延时或使用事件检测:

GPIO.add_event_detect(button_pin, GPIO.RISING, callback=my_callback, bouncetime=200)

4.尽量使用pull-up/pull-down电阻

浮空引脚容易受干扰。输入模式下可通过代码启用内置上下拉:

GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)

5.长期运行要用systemd守护进程

想让你的监控程序开机自启、崩溃重启?写个简单的.service文件就行:

[Unit] Description=Temp Monitor After=network.target [Service] ExecStart=/usr/bin/python3 /home/pi/temp_monitor.py WorkingDirectory=/home/pi StandardOutput=inherit StandardError=inherit Restart=always User=pi [Install] WantedBy=multi-user.target

保存为/etc/systemd/system/temp-monitor.service,然后启用:

sudo systemctl enable temp-monitor.service sudo systemctl start temp-monitor.service

6.模拟输入怎么办?树莓派没有ADC!

树莓派GPIO只能处理数字信号(高/低电平)。如果你想读取电位器、光照强度、模拟传感器,需要外接ADC芯片(如MCP3008),并通过SPI通信获取数据。

后续我们可以专门讲一讲“如何用SPI读取MCP3008”。


写在最后:GPIO只是起点

掌握GPIO控制,意味着你已经拿到了通往物理世界的钥匙。

从此以后,你可以:
- 用红外接收头解码遥控器信号
- 通过I²C连接OLED屏显示信息
- 用UART与ESP32进行无线通信
- 构建一个多传感器融合的家庭自动化中心

而这一切,都可以继续用Python优雅地完成。

未来的边缘计算时代,AI模型也能跑在树莓派上(TensorFlow Lite + GPIO联动)。想象一下:摄像头识别到陌生人,立刻触发蜂鸣器报警——这就是智能安防系统的雏形。

所以,别小看那两个闪动的LED灯。每一次亮灭,都是你在数字与现实之间架起的一座桥。

现在,去插上你的树莓派,打开终端,敲下第一行import RPi.GPIO as GPIO吧。

如果你在实现过程中遇到了其他挑战,欢迎在评论区分享讨论。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/4 1:33:15

StepFun-Formalizer:数学问题转Lean 4的终极AI工具

导语:StepFun-Formalizer-32B大语言模型正式发布,通过知识与推理融合技术,实现自然语言数学问题到Lean 4形式化语言的精准转换,为数学推理与定理证明领域带来突破性进展。 【免费下载链接】StepFun-Formalizer-32B 项目地址: h…

作者头像 李华
网站建设 2026/2/11 7:30:50

树莓派5运行PyTorch人脸追踪模型:低成本安防解决方案

用树莓派5 PyTorch 打造本地化人脸追踪系统:200美元内的边缘智能安防实战你有没有过这样的经历?家里的监控摄像头明明一直在录,但真想查点什么的时候,还得一帧一帧翻录像。或者更糟——收到一条“检测到移动”的推送,…

作者头像 李华
网站建设 2026/2/10 17:47:06

IndexTTS2语音合成完全实战指南:构建工业级情感可控AI语音系统

IndexTTS2语音合成完全实战指南:构建工业级情感可控AI语音系统 【免费下载链接】index-tts An Industrial-Level Controllable and Efficient Zero-Shot Text-To-Speech System 项目地址: https://gitcode.com/gh_mirrors/in/index-tts IndexTTS2作为业界领先…

作者头像 李华
网站建设 2026/2/6 10:26:18

huggingface镜像网站dataset加载IndexTTS2训练数据

使用镜像站点高效加载 IndexTTS2 训练数据的实践指南 在中文语音合成技术快速演进的今天,越来越多开发者希望将高质量 TTS(Text-to-Speech)系统部署到本地环境。然而,一个普遍存在的现实问题是:当项目依赖 Hugging Fa…

作者头像 李华
网站建设 2026/2/14 23:33:48

ASMR音频下载终极指南:3步轻松获取海量放松资源

ASMR音频下载终极指南:3步轻松获取海量放松资源 【免费下载链接】asmr-downloader A tool for download asmr media from asmr.one(Thanks for the asmr.one) 项目地址: https://gitcode.com/gh_mirrors/as/asmr-downloader 还在为寻找高质量的ASMR音频而四处…

作者头像 李华
网站建设 2026/2/14 1:40:37

Day42~给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零

给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零例:输入:1234输出:4321输入:-12300输出&…

作者头像 李华