2、Raspberry Pi基础:GPIO引脚、I2C/SPI/UART通信、操作系统安装与配置、远程访问方法
Raspberry Pi(树莓派)作为机器人视觉项目的核心计算平台,其价值不仅在于运行Linux系统和Python代码,更在于它提供了丰富的硬件接口,能够直接与摄像头、舵机、电机驱动、超声波传感器等外设交互。本章将围绕四个核心主题展开:GPIO引脚的工作原理与使用方法、I2C/SPI/UART三种串行通信协议的工程选型、操作系统的安装与基础配置,以及远程访问的多种方案。掌握这些内容,是后续实现目标跟踪与避障算法的硬件前提。
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常用于触发摄像头拍照、控制云台舵机、读取限位开关等实时性要求较高的场景。
操作流程:从原理图到代码控制
- 查看引脚映射:使用
pinout命令或查阅官方文档,确认物理引脚编号与BCM GPIO编号的对应关系。 - 安装控制库:推荐使用
RPi.GPIO或gpiozero库。gpiozero更现代且支持更多传感器抽象。 - 初始化引脚:设置引脚模式(BCM或BOARD),配置输入/输出方向。
- 编写控制逻辑:输出模式使用
GPIO.output(pin, GPIO.HIGH/LOW),输入模式使用GPIO.input(pin)读取电平。 - 清理资源:程序退出时调用
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()
案例拆解:超声波避障模块的GPIO接入
HC-SR04超声波传感器是避障机器人的常用组件。其Trig引脚接收10μs以上的高电平触发信号,Echo引脚输出与距离成正比的高电平持续时间。在树莓派上,我们需要一个GPIO输出触发信号,另一个GPIO输入读取回波。
| 传感器引脚 | 树莓派GPIO | 方向 | 说明 |
|---|---|---|---|
| VCC | 5V (Pin 2) | 电源 | HC-SR04需要5V供电 |
| Trig | BCM 23 | 输出 | 发送触发脉冲 |
| Echo | BCM 24 | 输入 | 接收回波(需分压) |
| GND | GND (Pin 6) | 地 | 共地 |
由于Echo输出5V高电平,而树莓派GPIO只能承受3.3V,必须使用电阻分压(如1kΩ与2kΩ串联)将电压降至3.3V以下。测量时,记录Echo引脚高电平持续的时间t,距离 = t × 340m/s ÷ 2。
2.2 I2C/SPI/UART通信协议:机器人的“神经系统”
核心原理与对比
I2C、SPI、UART是嵌入式系统中最常用的三种串行通信协议。它们各有优劣,适用于不同场景。I2C使用两根线(SDA数据线、SCL时钟线)连接多个设备,通过7位或10位地址寻址,适合低速传感器(如温度、加速度计)。SPI使用四根线(MOSI、MISO、SCLK、CS),支持全双工高速通信,适合摄像头、显示屏等大数据量设备。UART仅需TX/RX两根线,异步通信,常用于GPS模块、蓝牙模块和调试串口。
| 特性 | I2C | SPI | UART |
|---|---|---|---|
| 引脚数量 | 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库封装了底层细节,使开发者能专注于上层逻辑。
i2cdetect 是否能检测到设备。若检测不到,检查接线是否正确、是否启用了I2C接口、设备地址是否正确。注意部分传感器(如MPU6050)的地址可能为0x68或0x69,取决于AD0引脚电平。
2.3 操作系统安装与配置:搭建软件环境
核心原理
树莓派官方操作系统为Raspberry Pi OS(基于Debian),提供32位和64位版本。对于机器人视觉项目,推荐使用64位系统以充分利用4GB/8GB内存。系统安装的本质是将操作系统镜像写入SD卡,并配置启动参数。首次启动时,系统会自动扩展文件系统、生成SSH密钥并进入配置向导。
操作流程:从镜像到可用系统
- 下载镜像:从树莓派官网下载Raspberry Pi OS Lite(无桌面)或Desktop版本。视觉项目建议使用Lite版以节省资源,通过命令行操作。
- 写入SD卡:使用Raspberry Pi Imager工具,选择镜像和目标SD卡,点击写入。Imager支持预配置SSH、Wi-Fi和用户密码。
- 启用SSH:在SD卡根目录创建空文件
ssh(无扩展名),或在Imager中勾选启用SSH。 - 配置Wi-Fi:在SD卡根目录创建
wpa_supplicant.conf文件,写入网络配置。 - 首次启动:插入SD卡并上电,通过SSH连接(默认用户
pi,密码raspberry,建议立即修改)。 - 系统更新:执行
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隧道。