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命令,一不小心就把硬盘给写了——别问我怎么知道的。

具体步骤:

  1. 下载Raspberry Pi Imager(官网就有)
  2. 选择操作系统:推荐Raspberry Pi OS Lite(无桌面版,省资源)
  3. 选择SD卡(建议16GB以上,Class 10速度)
  4. 点击烧录前,按Ctrl+Shift+X打开高级选项
  5. 启用SSH,设置用户名/密码,配置WiFi
  6. 烧录完成后,把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章 知识体系总览 GPIO引脚功能 系统烧录与SSH Python环境配置 40pin接口 BCM编号体系 Imager烧录 SSH远程登录 RPi.GPIO库 电源/地/功能引脚 物理 vs BCM编号 SD卡烧录+配置 ssh pi@IP + 更新 apt安装+测试脚本 ✅ 环境就绪,可以开始驱动开发 提示:本章所有操作只需一次配置,后续章节可直接使用

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,现在只能当备用机。