3、Python环境搭建与库安装:Python虚拟环境、pip安装、smbus、RPi.GPIO、Adafruit库、串口通信库
好,咱们正式开始动手了。这一章,说白了就是给你的电脑和树莓派「装上弹药」。没有Python环境和这些库,你写的代码就是一堆废纸。我见过太多新手卡在这一步,不是装错版本,就是权限搞混。别急,跟着我的节奏来,半小时搞定。
3.1 Python虚拟环境——为什么必须用?
你想想看,一个项目要用smbus,另一个项目要用更新的版本。如果全装到系统里,迟早会打架。虚拟环境就是给每个项目一个「独立的小房间」。我个人的习惯是,每个传感器项目都新建一个虚拟环境,干净又省心。
核心概念:虚拟环境是Python项目的隔离沙箱。它让你可以为不同项目安装不同版本的库,互不干扰。
3.1.1 创建虚拟环境
打开终端,先确认你装了Python 3:
python3 --version
然后创建虚拟环境。我一般用 venv 模块,它是Python自带的,不用额外装:
python3 -m venv sensor_env
这条命令会在当前目录生成一个 sensor_env 文件夹。里面藏着独立的Python解释器和pip。
3.1.2 激活与退出
激活环境,不同系统命令不一样:
- Linux / macOS:
source sensor_env/bin/activate - Windows:
sensor_env\Scripts\activate
激活后,终端前面会出现 (sensor_env) 字样。这时候你安装的所有库,都只在这个环境里生效。
小技巧:退出环境用 deactivate 命令。我经常忘记退出,结果在系统环境里装了一堆测试库,后来学乖了,每次用完就退。
3.2 pip安装——Python的「快递员」
pip是Python的包管理工具。你要的库,它都能帮你下载安装。我刚开始用的时候,总搞不清 pip 和 pip3 的区别。其实很简单:pip 对应Python 2,pip3 对应Python 3。现在Python 2已经退休了,直接用 pip3 就行。
3.2.1 基本用法
安装一个库:
pip3 install 库名
安装指定版本:
pip3 install 库名==1.2.3
我曾经在项目中遇到过版本冲突,一个库要求A的1.0版,另一个要求A的2.0版。后来我学会了用 pip3 freeze 查看当前环境的所有库版本,再配合虚拟环境,问题就解决了。
3.2.2 换源加速
国内下载Python库经常很慢。我建议用清华镜像源:
pip3 install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple
也可以永久配置:
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
注意:换源后,有些冷门库可能镜像站没有。这时候可以临时换回官方源:pip3 install 库名 -i https://pypi.org/simple
3.3 smbus库——I2C通信的钥匙
smbus是Python操作I2C设备的库。很多传感器(比如温湿度、气压计)都用I2C协议。说白了,它就是帮你读写I2C总线上的数据。
3.3.1 安装
pip3 install smbus2
注意,我推荐用 smbus2 而不是老旧的 smbus。smbus2是smbus的升级版,修复了一些bug,而且API完全兼容。
3.3.2 基本用法示例
读取一个I2C设备(比如地址0x76)的寄存器:
from smbus2 import SMBus
bus = SMBus(1) # 树莓派上I2C总线1
address = 0x76
register = 0x00
data = bus.read_byte_data(address, register)
print(f"读取到的数据: {data}")
bus.close()
避坑指南:我曾经在树莓派上忘记启用I2C接口,结果smbus一直报错。记得先运行 sudo raspi-config,在「Interface Options」里打开I2C。
3.4 RPi.GPIO库——控制GPIO的瑞士军刀
RPi.GPIO是树莓派GPIO控制的标配库。你要控制LED、读取按键、驱动电机,都靠它。
3.4.1 安装
pip3 install RPi.GPIO
注意,这个库只能在树莓派上运行。你在电脑上装会报错,这是正常的。
3.4.2 核心功能
| 功能 | 函数 | 说明 |
|---|---|---|
| 设置引脚模式 | GPIO.setmode(GPIO.BCM) | 使用BCM编号方式 |
| 设置输入/输出 | GPIO.setup(pin, GPIO.OUT) | pin是引脚编号 |
| 输出高低电平 | GPIO.output(pin, GPIO.HIGH) | HIGH为3.3V,LOW为0V |
| 读取输入 | GPIO.input(pin) | 返回0或1 |
| 清理资源 | GPIO.cleanup() | 程序退出前必须调用 |
警告:GPIO.cleanup() 一定要在程序结束时调用。我刚开始做项目时经常忘记,结果下次运行程序时引脚状态混乱,LED乱闪。后来我习惯用 try...finally 来保证清理。
3.5 Adafruit库——传感器驱动全家桶
Adafruit是一家做开源硬件的公司,他们为很多传感器写了Python驱动库。比如DHT11温湿度传感器、BMP280气压计、SSD1306 OLED屏幕等。用这些库,你不需要自己写底层的I2C或SPI通信代码。
3.5.1 安装Adafruit-Blinka
Adafruit的库大多依赖 Adafruit-Blinka,它是底层抽象层:
pip3 install Adafruit-Blinka
3.5.2 安装具体传感器库
比如你要用DHT11:
pip3 install Adafruit_DHT
用BMP280:
pip3 install adafruit-circuitpython-bmp280
Adafruit的库命名很规律:adafruit-circuitpython-设备名。你想想看,这比你自己从数据手册里抠寄存器地址要省多少事?
个人经验:Adafruit的库虽然方便,但有时候版本更新快,API会变。我建议在项目文档里记下你用的库版本号,用 pip3 freeze > requirements.txt 导出依赖列表。这样换环境时,直接 pip3 install -r requirements.txt 就能恢复。
3.6 串口通信库——与设备「对话」的桥梁
很多传感器和模块(比如GPS、RFID、某些激光雷达)用串口(UART)通信。Python里最常用的串口库是 pyserial。
3.6.1 安装
pip3 install pyserial
3.6.2 基本用法
打开串口并读取数据:
import serial
ser = serial.Serial(
port='/dev/ttyAMA0', # 树莓派上的串口设备
baudrate=9600, # 波特率,和传感器匹配
timeout=1 # 超时1秒
)
data = ser.readline() # 读取一行数据
print(data.decode('utf-8'))
ser.close()
避坑指南:树莓派的串口默认被蓝牙占用。我曾经折腾了一下午,才发现需要先禁用蓝牙串口。在 /boot/config.txt 里加上 dtoverlay=disable-bt,然后重启。另外,串口设备名可能是 /dev/ttyS0 或 /dev/ttyAMA0,用 ls -l /dev/tty* 查看。
3.7 本章知识体系图
下面这张图帮你理清本章的知识结构。从Python环境出发,到各个库的安装与用途,一目了然。
3.8 快速安装清单
最后,给你一个「一键安装」的脚本。在树莓派上运行,就能装好本章所有库:
# 更新pip
pip3 install --upgrade pip
# 安装核心库
pip3 install smbus2
pip3 install RPi.GPIO
pip3 install Adafruit-Blinka
pip3 install adafruit-circuitpython-bmp280
pip3 install pyserial
# 导出依赖列表
pip3 freeze > requirements.txt
总结一下:虚拟环境是隔离,pip是工具,smbus管I2C,RPi.GPIO管引脚,Adafruit管传感器驱动,pyserial管串口。把这六个东西装好,你的树莓派就「武装到牙齿」了。下一章,咱们就用这些工具,让传感器真正「开口说话」。
可可精品资料库