驱动博世BME280温度、湿度、压力传感器超过I2C的库
RPi.bme280的Python项目详细描述
连接Bosch BME280数字传感器模块(能够感应 温度、湿度和压力)在Python2或3中,对覆盆子使用I2C 圆周率。我买的那套工具可以从eBay那里花几英镑买到。进一步的技术细节 BME280传感器可以在datasheet中找到 [pdf]。
GPIO引脚输出
BME280是一个I2C设备,因此连接到RPI非常简单:
P1标题
对于原型制作,P1头销应按如下方式连接:
Board Pin | Name | Remarks | RPi Pin | RPi Function |
---|---|---|---|---|
1 | VIN | +3.3V Power | P01-1 | 3V3 |
2 | GND | Ground | P01-6 | GND |
3 | SCL | Clock | P01-5 | GPIO 3 (SCL) |
4 | SDA | Data | P01-3 | GPIO 2 (SDA) |
先决条件
确保i2c内核驱动程序已启用:
$ dmesg | grep i2c [ 4.925554] bcm2708_i2c 20804000.i2c: BSC1 Controller at 0x20804000 (irq 79) (baudrate 100000) [ 4.929325] i2c /dev entries driver
或:
$ lsmod | grep i2c i2c_dev 5769 0 i2c_bcm2708 4943 0 regmap_i2c 1661 3 snd_soc_pcm512x,snd_soc_wm8804,snd_soc_core
如果没有列出内核模块,并且没有使用dmesg显示任何内容,则这意味着 内核I2C驱动程序未加载。按如下方式启用I2C:
- 运行sudo raspi-config
- 使用向下箭头选择9 Advanced Options
- 向下箭头到A7 I2C
- 当要求您启用I2C时,选择yes
- 当询问是否自动加载内核模块时,也选择yes
- 使用右箭头选择<;finish>;按钮
- 当要求重新启动时,选择yes。
重新启动后,重新检查dmesg | grep i2c命令是否显示 在继续之前加载I2C驱动程序。
或者,为了提高性能,从默认值增加I2C波特率 通过将/boot/config.txt更改为包含:
dtparam=i2c_arm=on,i2c_baudrate=400000
然后重新启动。
然后将您的用户添加到I2C组:
$ sudo adduser pi i2c
安装一些软件包:
$ sudo apt-get install i2c-tools python-pip
接下来检查设备是否正常通信(如果使用rev.1板, 总线使用0而不是1):
$ i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- 76 --
安装python包
对于python2,在bash提示下,输入:
$ sudo python setup.py install
这将在^{tt7}中安装python文件$ 使它们可以在其他程序中使用。
对于python3,也可以键入:
$ sudo python3 setup.py install
cheeseshop安装
或者,可以使用pypi上的版本,只需执行以下操作:
$ sudo pip install RPi.bme280
软件驱动程序-示例用法
安装后,请确认i2c地址(请参阅先决条件,它将是 可能是0x76或0x77)和端口。
然后在python脚本或repl中:
importsmbus2importbme280port=1address=0x76bus=smbus2.SMBus(port)calibration_params=bme280.load_calibration_params(bus,address)# the sample method will take a single reading and return a# compensated_reading objectdata=bme280.sample(bus,address,calibration_params)# the compensated_reading class has the following attributesprint(data.id)print(data.timestamp)print(data.temperature)print(data.pressure)print(data.humidity)# there is a handy string representation tooprint(data)
然后应该打印如下内容:
ee50df9c-3aa3-4772-8767-73b6bb74f30f 2016-11-18 17:33:28.937863 20.563 980.91 48.41 compensated_reading(id=ee50df9c-3aa3-4772-8767-73b6bb74f30f, timestamp=2016-11-18 17:33:28.937863, temp=20.563 °C, pressure=980.91 hPa, humidity=48.41 % rH)
对于类似于数据记录器的应用程序,定期调用bme2.sample(bus, address, calibration_params)到 获取基于时间的读数。
参见weatherstation project了解 更完整的示例用法。
参考文献
>;待办事项
许可证
麻省理工学院许可证(MIT)
版权所有(c)2016 Richard Hull
兹免费准许任何人取得副本 本软件和相关文档文件(“软件”)的 在软件中不受限制,包括但不限于 使用、复制、修改、合并、发布、分发、再授权和/或出售 软件的副本,并允许软件的用户 在满足以下条件的情况下,可以这样做:
上述版权公告及本许可公告须包括在 软件的拷贝或大部分。
本软件按“原样”提供,无任何形式的保证,明示或 默示的,包括但不限于适销性保证, 适合特定目的和不侵权。在任何情况下 作者或版权所有者应对任何索赔、损害或其他 责任,无论是在合同诉讼、侵权诉讼或其他诉讼中, 不属于或与本软件有关,或使用或与本软件的其他交易有关。 软件。