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环境出发,到各个库的安装与用途,一目了然。

Python环境搭建与库安装知识体系 Python 3 + pip 虚拟环境 (venv) smbus2 (I2C通信) RPi.GPIO (GPIO控制) Adafruit库 (传感器驱动) pyserial (串口通信) 每个库对应一类传感器通信方式 虚拟环境为所有库提供隔离的运行空间

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管串口。把这六个东西装好,你的树莓派就「武装到牙齿」了。下一章,咱们就用这些工具,让传感器真正「开口说话」。

可可精品资料库