第二章:开发环境搭建——工欲善其事,必先利其器
说实话,我见过太多学员卡在环境搭建这一步。明明代码逻辑没问题,就是跑不起来。最后发现,要么是Python版本不对,要么是库没装全。所以这一章,咱们把地基打牢。
2.1 安装Python(推荐3.8+)
我个人习惯用Python 3.8或3.9。为什么?因为RPi.GPIO这个库在3.10以上版本偶尔会闹脾气。我在项目中遇到过,明明代码一模一样,换到3.10就报错。后来查了半天,发现是某些底层接口变了。
去官网下载安装包时,记得勾选「Add Python to PATH」。这个选项很多人会忽略,结果在命令行里敲python死活找不到命令。嗯,这里要注意。
python3 --version 就能看到版本号。如果版本低于3.8,建议升级一下。
2.2 配置虚拟环境
虚拟环境这东西,说白了就是给每个项目一个独立的小房间。你想想看,如果所有项目都共用一套库,A项目要numpy 1.20,B项目要numpy 1.24,那不乱套了?
我建议用 venv 模块,Python自带的,不用额外装。操作很简单:
# 创建虚拟环境
python -m venv massage_env
# 激活虚拟环境(Windows)
massage_env\Scripts\activate
# 激活虚拟环境(Linux/Mac)
source massage_env/bin/activate
激活成功后,命令行前面会出现 (massage_env) 字样。看到这个,就说明你已经在虚拟环境里了。
2.3 安装必要的库
接下来装四个核心库。我按顺序来,这样不容易出问题:
pip install RPi.GPIO
pip install numpy
pip install matplotlib
pip install scipy
等等,这里有个坑。如果你是在Windows上做开发(没有树莓派硬件),RPi.GPIO是装不上的。为什么?因为它依赖树莓派的硬件接口。别急,我有办法。
我推荐用 RPi.GPIO-emulator 这个模拟库。它能在普通电脑上模拟GPIO的行为:
pip install RPi.GPIO-emulator
装好之后,代码里导入的方式完全一样。你写 import RPi.GPIO as GPIO,它自动就用模拟版本。等代码调试好了,再部署到真树莓派上。这个技巧我在好几个项目里都用过,省了不少事。
2.4 验证GPIO输出
环境搭好了,咱们得验证一下能不能用。写个简单的测试脚本:
import RPi.GPIO as GPIO
import time
# 设置引脚模式
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT) # 用BCM编号的18号引脚
# 让LED闪烁5次
for i in range(5):
GPIO.output(18, GPIO.HIGH)
time.sleep(0.5)
GPIO.output(18, GPIO.LOW)
time.sleep(0.5)
# 清理资源
GPIO.cleanup()
如果你用的是真树莓派,接个LED到18号引脚和GND,就能看到它一闪一闪的。如果是模拟器,程序会正常跑完,不会报错——这就是验证通过。
GPIO.cleanup()。不然下次运行程序时,引脚可能还是上次的状态。我刚开始学的时候经常忘,结果LED死活不亮,排查了半天才发现是引脚没复位。
2.5 常见问题与避坑
我把这些年遇到的环境问题整理了一下,你直接对照着看:
| 问题 | 原因 | 解决办法 |
|---|---|---|
| pip安装超时 | 默认源在国外,网络慢 | 用国内镜像:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名 |
| ImportError: No module named 'RPi' | 没装RPi.GPIO,或者没激活虚拟环境 | 检查是否在虚拟环境里,重新安装 |
| GPIO.setmode报错 | 在非树莓派系统上运行,且没装模拟器 | 安装RPi.GPIO-emulator |
| matplotlib中文乱码 | 系统缺少中文字体 | 安装中文字体,或设置字体参数 |
我曾经有一次,在客户现场调试按摩仪波形程序。环境搭了半天,GPIO死活没反应。最后发现,是树莓派的GPIO引脚被之前的程序占用了,没释放干净。所以你看,cleanup() 这步真不能省。
2.6 本章小结
到这步,你的开发环境应该已经能跑起来了。Python 3.8+、虚拟环境、四个核心库、GPIO验证,一个都不能少。下一章,咱们开始真正写波形生成代码。到时候你会发现,环境搭得越稳,后面写代码越顺手。
对了,如果你在搭建过程中遇到任何问题,别硬扛。去群里问,或者翻翻我之前的文章。环境问题嘛,说白了就是经验问题,踩过一次坑,下次就记住了。