3、环境搭建:Python 虚拟环境创建,smbus2 与 adafruit-circuitpython-bmp 库安装
好,咱们正式开始动手了。
这一章,说白了就是给电脑“装上武器”。你想想看,传感器硬件接好了,但电脑不认识它,那等于白搭。我们需要一个干净的 Python 环境,再装上两个关键的库:smbus2 和 adafruit-circuitpython-bmp。
我个人习惯,每个项目都单独建一个虚拟环境。为什么?因为不同项目依赖的库版本可能打架。我曾经在一个项目里同时搞两个传感器,一个要旧版库,一个要新版,结果折腾了一下午。从那以后,我每个项目都老老实实建虚拟环境。
3.1 为什么需要虚拟环境?
Python 的虚拟环境,就像给每个项目一个独立的“小房间”。
- 隔离依赖:项目 A 用库版本 1.0,项目 B 用版本 2.0,互不干扰。
- 避免污染:不会把系统全局的 Python 环境搞得乱七八糟。
- 方便迁移:把虚拟环境目录打包,换个电脑就能跑。
嗯,这里要注意:千万别图省事直接在全局环境装库。尤其是树莓派这类系统,很多系统工具依赖特定版本的 Python 库,你一升级,系统可能就罢工了。
3.2 创建 Python 虚拟环境
假设你用的是树莓派,或者 Ubuntu 系统。Python 3.3 以上版本自带 venv 模块,不需要额外安装。
打开终端,先确认 Python 版本:
python3 --version
如果显示 Python 3.7 或更高版本,那就没问题。
然后,找个你喜欢的目录,比如 ~/weather_station:
mkdir ~/weather_station
cd ~/weather_station
python3 -m venv bmp_env
这条命令会创建一个名为 bmp_env 的虚拟环境目录。里面包含了独立的 Python 解释器和 pip。
激活虚拟环境:
source bmp_env/bin/activate
激活后,终端提示符前面会出现 (bmp_env) 字样。这就说明你已经在虚拟环境里了。
.env 文件夹,名字短,好记。但别用 .venv,有些工具会把它当成隐藏文件忽略掉。
3.3 安装 smbus2 库
smbus2 是干嘛的?它是用来和 I2C 设备通信的。BMP280 传感器就是通过 I2C 接口和树莓派对话的。
为什么不用系统自带的 smbus?因为 smbus2 是纯 Python 实现,兼容性更好,而且支持 Python 3。我遇到过 smbus 在 Python 3.9 上编译失败的情况,换成 smbus2 就没事了。
安装命令很简单:
pip install smbus2
安装完成后,可以验证一下:
python -c "import smbus2; print(smbus2.__version__)"
如果输出版本号,比如 0.4.2,那就成功了。
sudo raspi-config,在「Interface Options」里启用 I2C。不然 smbus2 找不到设备。
3.4 安装 adafruit-circuitpython-bmp 库
这个库是 Adafruit 官方为 BMP280/BMP180 等传感器写的驱动。它封装了底层的 I2C 读写操作,我们直接调用就能读取温度、气压、海拔等数据。
安装命令:
pip install adafruit-circuitpython-bmp
这个库会自动安装依赖,比如 Adafruit-Blinka 和 adafruit-circuitpython-busdevice。你不需要手动一个个装。
安装完成后,测试一下:
python -c "import adafruit_bmp280; print('BMP280 library imported successfully')"
如果没有报错,说明库已经装好了。
ImportError: No module named 'board'。这是因为 Adafruit-Blinka 需要系统级的 GPIO 库。解决办法是:pip install adafruit-blinka。如果还不行,检查一下 libgpiod 是否安装:sudo apt install libgpiod2。
3.5 验证整个环境
现在,我们来写一个简单的测试脚本,确保所有东西都能协同工作。
创建一个文件 test_env.py:
import smbus2
import adafruit_bmp280
import board
import busio
# 初始化 I2C 总线
i2c = busio.I2C(board.SCL, board.SDA)
# 创建 BMP280 对象
bmp = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
# 读取数据
print("Temperature: %.2f C" % bmp.temperature)
print("Pressure: %.2f hPa" % bmp.pressure)
print("Altitude: %.2f meters" % bmp.altitude)
运行它:
python test_env.py
如果看到类似这样的输出:
Temperature: 25.34 C
Pressure: 1013.25 hPa
Altitude: 12.45 meters
恭喜你,环境搭建成功了!
RuntimeError: CRC check failed,别慌。这通常是传感器连接不稳定,或者供电不足。检查一下杜邦线是否插紧,或者换个 USB 口供电。
3.6 退出虚拟环境
用完虚拟环境后,记得退出:
deactivate
退出后,终端提示符前的 (bmp_env) 就消失了。下次再进项目,重新激活就行。
3.7 总结一下
这一章我们做了三件事:
- 创建了独立的 Python 虚拟环境
bmp_env - 安装了 I2C 通信库
smbus2 - 安装了 BMP280 驱动库
adafruit-circuitpython-bmp
嗯,到这里,你的电脑已经准备好和 BMP280 传感器对话了。下一章,我们会真正把传感器接上树莓派,跑第一个读取程序。
记住:环境搭建这一步,慢一点没关系。我见过太多人急着写代码,结果卡在库安装上。磨刀不误砍柴工,对吧?