2. 开发环境搭建:Python虚拟环境创建、RPi.GPIO与wiringPi库安装、pyserial库安装、逻辑分析仪驱动配置
好,咱们正式开始动手。这一章说白了就是“把家伙事儿备齐”。
我见过太多学员,代码写得挺溜,结果一跑起来报错“ModuleNotFoundError”,或者逻辑分析仪插上电脑没反应——全是环境没搭好。咱们别走那个弯路,一步到位。
2.1 Python虚拟环境:为什么必须搞?
你想想看,一个项目用 RPi.GPIO 0.7.0,另一个项目可能要用 0.6.3。要是全装到系统 Python 里,迟早打架。虚拟环境就是给每个项目一个“独立的小房间”。
核心原则:每个硬件项目都新建一个虚拟环境,别偷懒。
我个人习惯用 venv,Python 3.3+ 自带,不用额外装。操作很简单:
# 创建虚拟环境(在项目目录下执行)
python3 -m venv gpio_env
# 激活环境(Linux/Mac)
source gpio_env/bin/activate
# 激活环境(Windows)
gpio_env\Scripts\activate
# 退出环境
deactivate
激活后,终端前面会出现 (gpio_env) 字样,说明你已经在“小房间”里了。之后所有 pip install 都只装在这个环境里,不影响系统。
小技巧:我习惯把虚拟环境建在项目根目录下,取名 venv 或 gpio_env,这样一眼就能看出来。别取什么 env1、test 这种名字,三个月后你自己都忘了是干嘛的。
2.2 RPi.GPIO 与 wiringPi 库安装
这两个库是树莓派 GPIO 控制的“两把刀”。RPi.GPIO 是 Python 原生库,简单易用;wiringPi 是 C 语言写的,性能更好,但配置稍麻烦。
| 库名 | 语言 | 特点 | 适用场景 |
|---|---|---|---|
| RPi.GPIO | Python | 安装简单,API 直观 | 快速原型、教学、简单控制 |
| wiringPi | C/Python绑定 | 性能高,支持中断、PWM | 高频控制、实时性要求高的项目 |
2.2.1 安装 RPi.GPIO
确保虚拟环境已激活,然后:
pip install RPi.GPIO
就这么简单。不过要注意——RPi.GPIO 只能在树莓派上跑。你在普通电脑上装会报错,因为底层依赖树莓派的硬件寄存器。我刚开始学的时候就在笔记本上试,折腾了半天才发现……嗯,白费劲。
避坑指南:如果你用的是树莓派 5,RPi.GPIO 目前(2024年)还不完全支持。建议用 lgpio 或 gpiozero 替代。我会在后续章节详细讲。
2.2.2 安装 wiringPi
wiringPi 的安装稍微曲折一点。官方版本已经停止维护,但社区有 fork 版本。我推荐用这个:
# 克隆仓库
git clone https://github.com/WiringPi/WiringPi.git
cd WiringPi
# 编译安装
./build
# 验证安装
gpio -v
如果看到版本号输出,说明装好了。wiringPi 的 Python 绑定需要单独装:
pip install wiringpi
我曾经在一个项目里用 wiringPi 做步进电机控制,PWM 频率跑到 20kHz 都没问题。RPi.GPIO 在这个场景下就有点吃力了。
2.3 pyserial 库安装
串口通信是硬件自动化的“基本功”。pyserial 是 Python 里最成熟的串口库,跨平台,API 统一。
pip install pyserial
装完之后,写个简单脚本测试一下:
import serial
# 打开串口(端口号根据实际情况修改)
ser = serial.Serial('/dev/ttyAMA0', 115200, timeout=1)
# 发送数据
ser.write(b'Hello from Python!\n')
# 读取数据
response = ser.readline()
print(response)
# 关闭串口
ser.close()
经验之谈:树莓派上串口设备名通常是 /dev/ttyAMA0 或 /dev/ttyS0。如果你用的是 USB 转串口模块,一般是 /dev/ttyUSB0。不确定的话,插拔设备时执行 ls /dev/tty* 对比一下。
2.4 逻辑分析仪驱动配置
逻辑分析仪是调试串口、I2C、SPI 等协议的“照妖镜”。信号对不对,一抓便知。我用的是 Saleae Logic 系列,驱动配置比较典型。
2.4.1 安装驱动
- 去 Saleae 官网下载对应操作系统的软件(Windows/Mac/Linux 都支持)。
- Linux 下需要添加 udev 规则,否则普通用户没权限访问设备。
# 创建 udev 规则文件
sudo nano /etc/udev/rules.d/99-saleae.rules
# 写入以下内容
SUBSYSTEM=="usb", ATTR{idVendor}=="21a9", ATTR{idProduct}=="1004", MODE="0666"
# 重新加载 udev 规则
sudo udevadm control --reload-rules
sudo udevadm trigger
插上逻辑分析仪,运行 Logic 软件,应该就能识别到了。
注意:不同品牌的逻辑分析仪 VID/PID 不同。我遇到过学员买了个山寨版,VID 是 1a86 开头的,得自己查一下。用 lsusb 命令就能看到。
2.4.2 验证连接
把逻辑分析仪的通道 0 夹到树莓派的 TX 引脚上,地线夹到 GND。然后在树莓派上发一串数据:
import serial
ser = serial.Serial('/dev/ttyAMA0', 115200)
ser.write(b'TEST123\n')
ser.close()
在 Logic 软件里设置采样率 1MHz,触发方式选“上升沿”,你应该能看到一串方波信号。如果看到的是平的一条线,检查接线和波特率设置。
关键点:逻辑分析仪的“地”必须和树莓派的“地”共地,否则信号全是乱的。我刚开始用的时候忘了接地,抓出来的波形像鬼画符,排查了半天才发现是这个问题。
2.5 本章知识体系
下面这张图把本章的核心内容串起来了,方便你对照检查:
到这步,你的开发环境就齐活了。后面咱们就可以真刀真枪地写代码、接硬件、抓波形了。