2、Raspberry Pi基础:GPIO引脚、I2C/SPI/UART通信、操作系统安装与配置、远程访问方法

Raspberry Pi(树莓派)作为机器人视觉项目的核心计算平台,其价值不仅在于运行Linux系统和Python代码,更在于它提供了丰富的硬件接口,能够直接与摄像头、舵机、电机驱动、超声波传感器等外设交互。本章将围绕四个核心主题展开:GPIO引脚的工作原理与使用方法、I2C/SPI/UART三种串行通信协议的工程选型、操作系统的安装与基础配置,以及远程访问的多种方案。掌握这些内容,是后续实现目标跟踪与避障算法的硬件前提。

Raspberry Pi 硬件接口与系统架构总览 Raspberry Pi BCM2711 / 4核A72 GPIO 40-Pin 数字I/O / PWM / 中断 3.3V逻辑电平 舵机 / 电机 / LED I2C 总线 SDA / SCL 双线 地址寻址 7-bit 传感器 / OLED / ADC SPI 总线 MOSI / MISO / SCLK / CS 高速全双工 摄像头 / 显示屏 / ADC UART 串口 TX / RX 双线 异步通信 GPS / 蓝牙 / 调试 网络接口 Wi-Fi / 以太网 SSH / VNC 远程访问 电源系统 5V / 3.3V / GND USB-C 供电 电流限制与保护 GPIO复用功能:同一引脚可配置为I2C/SPI/UART或普通数字I/O 3.3V逻辑电平,严禁直接输入5V信号 TP1 TP2 TP3

2.1 GPIO引脚:数字世界的“手脚”

核心原理

GPIO(General Purpose Input/Output)是Raspberry Pi最基础的硬件接口。树莓派4B/5B提供了40针排针,其中可编程GPIO引脚约26个。每个引脚可配置为输入或输出模式,输出模式下可驱动3.3V高电平或0V低电平,输入模式下可读取外部信号的高低电平状态。需要注意的是,树莓派GPIO并非5V兼容,所有信号必须保持在3.3V逻辑电平范围内,否则可能损坏SoC(System on Chip)。

GPIO的典型应用包括:控制舵机(通过PWM脉冲)、读取超声波传感器回波、驱动LED指示灯、读取编码器信号等。在机器人视觉项目中,GPIO常用于触发摄像头拍照、控制云台舵机、读取限位开关等实时性要求较高的场景。

操作流程:从原理图到代码控制

  1. 查看引脚映射:使用 pinout 命令或查阅官方文档,确认物理引脚编号与BCM GPIO编号的对应关系。
  2. 安装控制库:推荐使用 RPi.GPIO 或 gpiozero 库。gpiozero更现代且支持更多传感器抽象。
  3. 初始化引脚:设置引脚模式(BCM或BOARD),配置输入/输出方向。
  4. 编写控制逻辑:输出模式使用 GPIO.output(pin, GPIO.HIGH/LOW),输入模式使用 GPIO.input(pin) 读取电平。
  5. 清理资源:程序退出时调用 GPIO.cleanup() 释放引脚。
# 示例:使用gpiozero控制舵机(SG90)
from gpiozero import Servo
from time import sleep

servo = Servo(17)  # BCM 17引脚
servo.min()        # 转到最小角度
sleep(1)
servo.max()        # 转到最大角度
sleep(1)
servo.value = 0    # 回到中间位置
servo.close()
经验提醒:舵机控制需要PWM信号,频率通常为50Hz(周期20ms),脉宽1ms~2ms对应0°~180°。gpiozero的Servo类已封装好这些细节,但若使用RPi.GPIO的PWM,需手动设置频率和占空比。

案例拆解:超声波避障模块的GPIO接入

HC-SR04超声波传感器是避障机器人的常用组件。其Trig引脚接收10μs以上的高电平触发信号,Echo引脚输出与距离成正比的高电平持续时间。在树莓派上,我们需要一个GPIO输出触发信号,另一个GPIO输入读取回波。

传感器引脚树莓派GPIO方向说明
VCC5V (Pin 2)电源HC-SR04需要5V供电
TrigBCM 23输出发送触发脉冲
EchoBCM 24输入接收回波(需分压)
GNDGND (Pin 6)地共地

由于Echo输出5V高电平,而树莓派GPIO只能承受3.3V,必须使用电阻分压(如1kΩ与2kΩ串联)将电压降至3.3V以下。测量时,记录Echo引脚高电平持续的时间t,距离 = t × 340m/s ÷ 2。

风险提示:直接连接5V信号到GPIO引脚会永久损坏树莓派SoC。任何外部模块接入前,务必确认电平兼容性。对于5V传感器,建议使用电平转换模块或分压电路。

2.2 I2C/SPI/UART通信协议:机器人的“神经系统”

核心原理与对比

I2C、SPI、UART是嵌入式系统中最常用的三种串行通信协议。它们各有优劣,适用于不同场景。I2C使用两根线(SDA数据线、SCL时钟线)连接多个设备,通过7位或10位地址寻址,适合低速传感器(如温度、加速度计)。SPI使用四根线(MOSI、MISO、SCLK、CS),支持全双工高速通信,适合摄像头、显示屏等大数据量设备。UART仅需TX/RX两根线,异步通信,常用于GPS模块、蓝牙模块和调试串口。

特性I2CSPIUART
引脚数量2 (SDA, SCL)4+ (MOSI, MISO, SCLK, CS)2 (TX, RX)
通信速率100kbps~3.4Mbps可达10Mbps以上典型115200bps
多设备支持是(地址寻址)是(片选信号)点对点
全双工否(半双工)是是
典型应用传感器、OLED、ADC摄像头、LCD、SD卡GPS、蓝牙、调试

判断方法:如何选择通信协议

  • 设备数量多且引脚紧张:优先I2C,只需两根线即可挂载多个设备。
  • 需要高速传输大量数据:选择SPI,如摄像头图像数据、LCD刷新。
  • 与PC或模块进行简单串口通信:使用UART,如连接蓝牙模块或调试输出。
  • 设备本身只支持某种协议:以传感器数据手册为准,例如MPU6050支持I2C和SPI,但I2C接线更简单。

实战场景:使用I2C连接OLED显示屏

在机器人视觉项目中,OLED显示屏常用于显示系统状态、IP地址或调试信息。SSD1306驱动的0.96寸OLED是常见选择,支持I2C接口。连接时,将OLED的SDA接到树莓派BCM 2(物理Pin 3),SCL接到BCM 3(物理Pin 5),VCC接3.3V,GND接地。

# 启用I2C接口
sudo raspi-config
# 选择 Interface Options → I2C → Enable

# 安装Python库
sudo pip3 install adafruit-circuitpython-ssd1306

# 测试I2C设备检测
i2cdetect -y 1
# 输出中应看到设备地址 0x3C 或 0x3D

检测到设备后,即可通过Python代码在OLED上绘制文字或图形。I2C通信的关键在于正确的设备地址和寄存器操作,Adafruit库封装了底层细节,使开发者能专注于上层逻辑。

排障经验:I2C通信失败时,首先检查 i2cdetect 是否能检测到设备。若检测不到,检查接线是否正确、是否启用了I2C接口、设备地址是否正确。注意部分传感器(如MPU6050)的地址可能为0x68或0x69,取决于AD0引脚电平。

2.3 操作系统安装与配置:搭建软件环境

核心原理

树莓派官方操作系统为Raspberry Pi OS(基于Debian),提供32位和64位版本。对于机器人视觉项目,推荐使用64位系统以充分利用4GB/8GB内存。系统安装的本质是将操作系统镜像写入SD卡,并配置启动参数。首次启动时,系统会自动扩展文件系统、生成SSH密钥并进入配置向导。

操作流程:从镜像到可用系统

  1. 下载镜像:从树莓派官网下载Raspberry Pi OS Lite(无桌面)或Desktop版本。视觉项目建议使用Lite版以节省资源,通过命令行操作。
  2. 写入SD卡:使用Raspberry Pi Imager工具,选择镜像和目标SD卡,点击写入。Imager支持预配置SSH、Wi-Fi和用户密码。
  3. 启用SSH:在SD卡根目录创建空文件 ssh(无扩展名),或在Imager中勾选启用SSH。
  4. 配置Wi-Fi:在SD卡根目录创建 wpa_supplicant.conf 文件,写入网络配置。
  5. 首次启动:插入SD卡并上电,通过SSH连接(默认用户 pi,密码 raspberry,建议立即修改)。
  6. 系统更新:执行 sudo apt update && sudo apt upgrade -y 更新软件包。
# wpa_supplicant.conf 示例
country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="YourWiFiName"
    psk="YourPassword"
    key_mgmt=WPA-PSK
}

案例拆解:无显示器配置树莓派

在机器人项目中,树莓派通常没有连接显示器。通过预配置SSH和Wi-Fi,可以实现“无头”启动。具体步骤:使用Imager烧录镜像时,点击设置按钮,输入Wi-Fi名称和密码,勾选启用SSH并设置用户名和密码。烧录完成后,将SD卡插入树莓派上电,等待约1分钟,从同一局域网内的电脑执行 ssh pi@raspberrypi.local 即可连接。

经验提醒:如果无法通过 raspberrypi.local 解析主机名,可以登录路由器管理页面查看树莓派分配的IP地址,或使用 nmap 扫描局域网设备。

2.4 远程访问方法:高效开发与调试

核心原理

远程访问是树莓派开发的核心工作方式。SSH(Secure Shell)提供命令行访问,VNC(Virtual Network Computing)提供图形界面访问。此外,还可以通过SFTP传输文件、通过VS Code Remote-SSH进行远程开发。对于机器人视觉项目,SSH是基础,VNC用于调试图形界面程序(如OpenCV窗口显示)。

操作流程:配置与连接

  • SSH连接:ssh pi@<IP地址>,输入密码即可登录。推荐配置SSH密钥实现免密登录。
  • VNC连接:在树莓派上执行 sudo raspi-config → Interface Options → VNC → Enable。然后在电脑上使用VNC Viewer连接。
  • 文件传输:使用 scp 命令或FileZilla等SFTP工具。
  • 远程开发:在VS Code中安装Remote-SSH插件,连接后可直接编辑树莓派上的代码。
# 配置SSH密钥免密登录
ssh-keygen -t rsa -b 4096
ssh-copy-id pi@<IP地址>
# 之后即可直接 ssh pi@<IP地址> 无需密码

常见误区与总结复盘

风险提示:默认用户名 pi 和密码 raspberry 是安全漏洞。首次登录后必须修改密码,并考虑禁用SSH密码登录,仅允许密钥认证。此外,不要将树莓派直接暴露在公网,如需外网访问,应使用VPN或SSH隧道。