1. 课程导论与环境搭建:Raspberry Pi GPIO引脚功能详解、树莓派系统烧录与SSH远程登录、Python开发环境配置与GPIO库安装
各位同学好,我是你们这门课的老周。做嵌入式Linux驱动开发有些年头了,从早期的AT91到现在的i.MX、树莓派,摸过的板子不下几十种。今天咱们开始第一讲——先把家伙事儿备齐。
树莓派这东西,说白了就是一块信用卡大小的Linux电脑。但它跟普通电脑最大的区别,就是那排40个引脚的GPIO接口。你想想看,一个跑着Linux的系统,还能直接操作引脚电平、控制电机、读取传感器——这就是它最迷人的地方。
本章核心目标:让你拿到一块全新的树莓派,能在30分钟内完成系统烧录、SSH登录、Python环境配置,并且能用代码点亮一个LED。别小看这一步,我见过太多同学卡在环境上,后面课程根本跑不起来。
1.1 树莓派GPIO引脚功能详解
先看硬件。树莓派40pin接口,不是所有引脚都能当GPIO用。有些是电源,有些是地,有些是专用接口(I2C、SPI、UART)。我刚开始玩树莓派时,就犯过一个低级错误——把5V引脚当GPIO用,结果烧了一个传感器模块。嗯,从那以后我再也不敢不看引脚图就接线了。
下面是40pin中常用的GPIO引脚功能表(以BCM编号为准):
| 物理引脚 | BCM编号 | 功能 | 备注 |
|---|---|---|---|
| 3 | GPIO2 | SDA (I2C) | 默认上拉 |
| 5 | GPIO3 | SCL (I2C) | 默认上拉 |
| 7 | GPIO4 | GPCLK0 | 可输出时钟 |
| 8 | GPIO14 | TXD (UART) | 串口发送 |
| 10 | GPIO15 | RXD (UART) | 串口接收 |
| 11 | GPIO17 | 普通GPIO | 常用 |
| 12 | GPIO18 | PWM0 | 硬件PWM |
| 13 | GPIO27 | 普通GPIO | 常用 |
| 15 | GPIO22 | 普通GPIO | 常用 |
| 16 | GPIO23 | 普通GPIO | 常用 |
| 18 | GPIO24 | 普通GPIO | 常用 |
| 19 | GPIO10 | MOSI (SPI) | SPI主出从入 |
| 21 | GPIO9 | MISO (SPI) | SPI主入从出 |
| 23 | GPIO11 | SCLK (SPI) | SPI时钟 |
| 24 | GPIO8 | CE0 (SPI) | 片选0 |
我的习惯:接线前先用万用表量一下引脚电压,确认不是5V再往上怼。尤其是那些标注了"3.3V tolerant"的引脚,千万别直接接5V设备——虽然树莓派有保护,但长期这么干容易烧IO口。
这里要特别说一下编号体系。树莓派有三种引脚编号方式:物理引脚(1-40)、BCM编号(Broadcom芯片内部编号)、wiringPi编号(第三方库自定义)。我个人建议统一用BCM编号,因为所有主流库(RPi.GPIO、gpiozero、wiringPi)都支持,而且跟芯片手册对得上。
1.2 树莓派系统烧录与SSH远程登录
系统烧录这块,我推荐用Raspberry Pi Imager,官方工具,省心。以前我们烧系统都是手动dd命令,一不小心就把硬盘给写了——别问我怎么知道的。
具体步骤:
- 下载Raspberry Pi Imager(官网就有)
- 选择操作系统:推荐Raspberry Pi OS Lite(无桌面版,省资源)
- 选择SD卡(建议16GB以上,Class 10速度)
- 点击烧录前,按Ctrl+Shift+X打开高级选项
- 启用SSH,设置用户名/密码,配置WiFi
- 烧录完成后,把SD卡插入树莓派,上电
注意:树莓派3B+及以后版本,WiFi模块是BCM43455,默认固件可能不支持5GHz频段。我建议在高级选项里只配2.4GHz的WiFi,否则可能连不上。曾经有个学员折腾了一下午,最后发现是路由器开了双频合一……
SSH登录很简单。找到树莓派的IP地址(可以从路由器后台看,或者用nmap扫),然后:
ssh pi@192.168.1.100
# 默认密码:raspberry(如果你没改的话)
第一次登录会提示确认主机密钥,输入yes就行。我个人习惯登录后第一件事就是改密码,然后更新系统:
sudo apt update
sudo apt upgrade -y
为什么要先更新?因为树莓派官方镜像里的软件包可能不是最新的,尤其是内核和固件。我遇到过几次因为内核太旧导致GPIO库不兼容的问题,所以这个习惯我一直保留着。
1.3 Python开发环境配置与GPIO库安装
树莓派OS默认自带Python3,但版本可能不是最新的。先确认一下:
python3 --version
# 应该看到 Python 3.7 以上
如果版本太低,可以手动安装Python 3.9或3.10。不过我个人建议用系统自带的版本,因为树莓派的很多底层库(比如libgpiod)对Python版本有依赖,乱升级容易出问题。
接下来安装GPIO库。我们这门课主要用两个库:
| 库名 | 安装命令 | 特点 | 适用场景 |
|---|---|---|---|
| RPi.GPIO | sudo apt install python3-rpi.gpio |
经典库,API简单 | 基础GPIO控制 |
| gpiozero | sudo apt install python3-gpiozero |
面向对象,支持更多外设 | 传感器、电机驱动 |
| pigpio | sudo apt install pigpio python3-pigpio |
支持硬件PWM、远程控制 | 精确时序控制 |
安装完成后,写个简单的测试脚本验证一下:
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
# 使用BCM编号
GPIO.setmode(GPIO.BCM)
# 设置GPIO17为输出
GPIO.setup(17, GPIO.OUT)
print("开始闪烁LED...")
for i in range(5):
GPIO.output(17, GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17, GPIO.LOW)
time.sleep(0.5)
GPIO.cleanup()
print("测试完成")
避坑指南:运行GPIO脚本必须用sudo!因为GPIO操作需要访问/dev/mem或/dev/gpiomem,普通用户权限不够。我曾经写了个自动化脚本忘了加sudo,结果LED死活不亮,排查了半天才发现是权限问题。
如果你用的是gpiozero库,代码会更简洁:
from gpiozero import LED
from time import sleep
led = LED(17)
for i in range(5):
led.on()
sleep(0.5)
led.off()
sleep(0.5)
gpiozero的好处是不用手动调用cleanup(),对象销毁时会自动释放资源。而且它支持链式调用,比如led.blink()就能直接让LED闪烁,非常方便。
1.4 本章知识体系总览
下面这张图把本章的核心知识点串起来了。你跟着这个流程走一遍,环境搭建就不会漏步骤。
1.5 常见问题与避坑
最后,我把这些年遇到的环境搭建问题整理一下,你遇到了可以直接对照:
- SSH连不上:先ping一下IP,能通的话检查SSH服务是否开启。
sudo systemctl status ssh。我遇到过最奇葩的一次是路由器开了AP隔离,设备之间不能互访。 - GPIO脚本报错:确认是否加了sudo。如果加了还报错,检查/dev/gpiomem的权限:
ls -l /dev/gpiomem,应该属于root:gpio组。 - LED不亮:先测引脚电压,用万用表量GPIO17和GND之间是否有3.3V。如果有电压但LED不亮,检查电阻——LED必须串一个220Ω-1kΩ的限流电阻,否则可能烧坏引脚。
- 系统启动卡住:可能是SD卡速度太慢或者供电不足。树莓派3B+需要2.5A的电源,别用手机充电器糊弄。
重要提醒:千万不要在树莓派通电的情况下插拔GPIO线!虽然偶尔一次没事,但热插拔容易产生浪涌电流,烧坏IO口。我实验室里有一块树莓派就是被学员热插拔搞废了GPIO17,现在只能当备用机。