BME280传感器的使用

概述
bosch推出了新型bme280传感器,这是一款具有温度,大气压力和湿度的环境传感器,可助您一臂之力!该传感器非常适合各种天气/环境传感,甚至可以在i2c和spi中使用!
博世的这种精密传感器是用于湿度测量的最佳低成本传感解决方案,精度为±3%精度,绝对精度为±1 hpa的大气压力和精度为±1.0°c的温度。由于压力会随高度变化,因此压力测量值非常好,因此您也可以将其用作高度计,精度为±1米!
bme280是博世的下一代传感器,是bmp085/bmp180的升级版/bmp183-具有0.25m的低海拔噪声和相同的快速转换时间。它具有相同的规格,但可以使用i2c 或 spi。为了实现简单易接线,请使用i2c。如果要连接一堆传感器而不必担心i2c地址冲突,请使用spi。
好的传感器对吗?因此,我们使您轻松进入下一个项目。表面贴装传感器焊接到pcb上,并带有3.3v稳压器和电平转换功能,因此您可以将其与3v或5v逻辑微控制器一起使用而无需担心。我们甚至编写了一个不错的教程,其中包含接线图,原理图,库和示例,让您在10分钟内就可以运行!
插脚
电源引脚:
vin -这是电源引脚。由于传感器芯片使用3 vdc,因此我们在板载了一个稳压器,该稳压器将采用3-5 vdc,并将其安全地转换下来。要为电路板供电,请为其提供与微控制器逻辑电平相同的功率-例如,对于像arduino这样的5v微型电池,请使用5v
3vo -这是稳压器的3.3v输出,如果您愿意,您可以从中获取100ma电流
gnd -电源和逻辑的公共接地
spi逻辑引脚:
所有进入分线的引脚均具有电平转换电路,以使其具有3-5v逻辑电平安全性。使用 vin!
sck 上的任何逻辑电平-这是 s pi c loc k 引脚,它是芯片的输入
sdo -这是 s 串行 d ata o ut/ m aster i n s lave o ut针,用于从bmp183发送到处理器的数据
sdi -这是 s 串行 d ata i n/ m aster o ut s lave i n pin,用于从处理器发送到bme280的数据
cs -这是 c hip s 选择引脚,将其放下低电平以启动spi事务。它是芯片的输入
如果要将多个bme280连接到一个微控制器,请让它们共享sdi,sdo和sck引脚。然后为每个分配一个唯一的cs引脚。
i2c逻辑引脚:
sck -这也是也是 i2c时钟引脚,连接到微控制器的i2c时钟线。
sdi -这也是也是 i2c数据引脚,连接到您的微控制器i2c数据线。
其余引脚断开连接
程序集
《表class =“ build-table”》
准备标题栏:
如有必要,将条切成一定长度。如果将其插入面包板,则焊接会更容易-长按针脚
添加分线板:
将分线板放在插针上,以便短插针穿过分线垫
然后焊接!
请务必焊接所有引脚以实现可靠的电接触。
(有关焊接的技巧,请务必查看我们的 优秀焊接指南 )。
tr》
您完成了!目视检查焊点,然后继续进行下一步
arduino测试
您可以轻松地将此分线连接到任何微控制器,我们将使用arduino。对于另一种微控制器,只要您有4个可用的引脚,就可以“逐位spi”,也可以使用两个i2c引脚,但是通常这些引脚固定在硬件中。只需签出库,然后移植代码。
i2c接线
如果要通过i2c接口连接,请使用此接线
将 vin 连接到3-5v电源很好使用微控制器逻辑所基于的相同电压。对于大多数arduino,这是5v
将 gnd 连接到公共电源/数据地
将 sck 引脚连接到i2c在arduino上的时钟 scl 引脚上。在基于uno和‘328的arduino上,这也称为 a5 ,在mega上也称为 digital 21 ,在leonardo/micro上,也称为数字3
将 sdi 引脚连接到arduino上的i2c数据 sda 引脚。在基于uno&’328的arduino上,这也称为 a4 ,在mega上也称为 digital 20 ,在leonardo/micro上,也称为数字2
默认情况下,i2c地址为0x77。如果从sdo到gnd添加跳线,则地址将更改为0x76。
如果您遇到i2c的间歇性问题,请尝试跳线cs到vin。
spi接线
由于这是具有spi功能的传感器,因此我们可以使用硬件或“软件” spi。为了使所有arduino上的接线相同,我们将从“软件” spi开始。应该使用以下引脚:
将 vin 连接到电源,可以使用3v或5v。使用微控制器逻辑所基于的相同电压。对于大多数arduino,这是5v
将 gnd 连接到公共电源/数据地
将 sck 引脚连接到数字#13 ,但是以后可以使用任何引脚
将 sdo 引脚连接到数字#12 ,但是可以使用任何引脚稍后
将 sdi 引脚连接到数字#11 ,但是以后可以使用任何引脚
连接 cs 销钉数字#10 ,但是以后可以使用任何销钉
稍后,一旦我们开始使用,我们就可以调整库以使用硬件如果需要,可以使用spi,或者将引脚更改为其他
安装adafruit_bme280库
要开始读取传感器数据,您将需要安装adafruit_bme280库(在我们的github存储库中的代码)。可以从arduino库管理器中获得它,因此我们建议使用它。
从ide中打开库管理器。..
,然后输入 adafruit bme280 来查找库。点击安装
还添加 adafruit unified sensor 库
我们还提供了有关arduino库安装的出色教程,网址为:
http://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use
加载演示
打开文件-》示例-》 adafruit_bme280 -》 bmp280test 并上传到连接至传感器的arduino
根据您使用的是i2c还是spi,更改引脚名称并注释或取消注释以下几行。
下载:文件
复制代码
#define bme_sck 13
#define bme_miso 12
#define bme_mosi 11
#define bme_cs 10
adafruit_bme280 bme; // i2c
//adafruit_bme280 bme(bme_cs); // hardware spi
//adafruit_bme280 bme(bme_cs, bme_mosi, bme_miso, bme_sck); #define bme_sck 13
#define bme_miso 12
#define bme_mosi 11
#define bme_cs 10
adafruit_bme280 bme; // i2c
//adafruit_bme280 bme(bme_cs); // hardware spi
//adafruit_bme280 bme(bme_cs, bme_mosi, bme_miso, bme_sck);
上传到arduino之后,打开串行控制台以9600波特率查看数据被打印出来
温度以摄氏度为单位,您可以使用经典的f = c * 9/5 + 32方程将其转换为f。
压力以帕斯卡的si单位返回。 100帕斯卡= 1 hpa = 1毫巴。通常,大气压力以毫巴或英寸汞柱表示。供将来参考,1帕斯卡= 0.000295333727英寸汞柱,或1英寸汞柱= 3386.39帕斯卡。因此,如果将pascal值(例如100734)除以3386.39,将得到29.72英寸汞柱。
您还可以计算海拔高度。 但是,只有知道您所在位置和一天在海平面上的hpa压力,您才能真正做得非常准确!传感器非常精确,但是如果您没有更新数据对于当前一天,则可能很难获得比10米更高的精度。
库参考
您可以使用
通过使用任一软件spi(其中所有四个引脚可以是任何i/o)创建bme280对象开始。 div》
下载:文件
复制代码
adafruit_bme280 bme(bme_cs, bme_mosi, bme_miso, bme_sck); adafruit_bme280 bme(bme_cs, bme_mosi, bme_miso, bme_sck);
或者您可以使用硬件spi。使用硬件spi,您必须使用arduino的硬件spi引脚-每个arduino类型都有不同的引脚!请检查spi参考以查看使用哪些引脚。在这种情况下,您可以使用任何cs引脚,但其他三个引脚是固定的
下载:文件
复制代码
adafruit_bme280 bme(bme_cs); // hardware spi adafruit_bme280 bme(bme_cs); // hardware spi
或使用默认i2c总线的i2c,未分配任何引脚
下载:文件
复制代码
adafruit_bme280 bme; // i2c adafruit_bme280 bme; // i2c
启动后,您可以使用
下载:文件
复制代码
if (!bme.begin()) {
serial.println(“could not find a valid bme280 sensor, check wiring!”);
while (1);
} if (!bme.begin()) {
serial.println(“could not find a valid bme280 sensor, check wiring!”);
while (1);
}
begin()将在找到传感器后返回true,否则返回false。如果返回假值,请检查接线!
读取湿度,温度和压力很容易,只需致电:
下载:文件
复制代码
bme.readtemperature()
bme.readpressure()
bme.readhumidity() bme.readtemperature()
bme.readpressure()
bme.readhumidity()
温度在摄氏度中始终是一个浮点。 pressure是一个32位整数,压力单位为pascals。您可能需要转换为其他值,以使其与天气报告相匹配。湿度以相对湿度%
将bme280转换为高度计也是可能的。如果您知道海平面的压力,则该库可以将当前的气压计入海拔高度
下载:文件
复制代码
bmp.readaltitude(sealevelpressure) bmp.readaltitude(sealevelpressure)
但是,您实际上只能做得很好如果您知道您所在位置和一天在海平面上的hpa压力,就可以计算高度!传感器非常精确,但是如果您没有当天的最新数据,则可能很难获得比现在更高的精度10米。
传入当前海平面压力( hpa )-因此该值大约为1000。您还可以使用通用1013.25值进行测试。
python和circuitpython测试
很容易将bme280传感器与python或circuitpython和adafruit circuitpython bme280模块一起使用。此模块可让您轻松编写python代码,以从传感器读取湿度,温度,压力等信息。
您可以将此传感器与任何circuitpython微控制器板或具有gpio和python的计算机一起使用感谢我们的circuitpython-for-python兼容性库adafruit_blinka。
circuitpython微控制器接线
首先,按照与arduino前几页完全相同的方式将bme280接线到板上。您可以使用i2c或spi布线,尽管为简单起见建议使用i2c。以下是使用i2c将feather m0连接到传感器的示例:
板3v 到传感器vin
板3v 》到传感器cs
板gnd 到传感器gnd
板scl 到传感器sck
板级sda 到传感器sdi

以及连接了硬件spi的feather m0的示例:
板3v 到传感器vin
板gnd 到传感器gnd
板sc k 到传感器sck
boardmosi 到传感器sdi
板miso 到传感器sdo
板d5 到传感器cs (或使用任何其他免费的数字i/o针)
python计算机接线
由于有数十种linux计算机/主板可以使用,因此我们将显示raspberry pi的接线。对于其他平台,请访问linux上的circuitpython指南,以了解您的平台是否受支持。
以下是与i2c相连的raspberry pi:
pi 3v3 至传感器vin
pi 3v3 到传感器cs
pi gnd 到传感器gnd
pi scl 到传感器sck
pi sda 传感器sdi
以及raspberry pi 3 model b上的示例
pi 3v3 至传感器vin
pi gnd 到传感器gnd
pi mosi 到传感器sdi
pi miso 到传感器sdo
pi sclk 到传感器sck
pi#5 到传感器cs (或使用任何其他免费的gpio引脚)
bme280的circuitpython安装库
您需要在circuitpython板上安装adafruit circuitpython bme280库。
首先请确保您正在为板运行最新版本的adafruit circuitpython。
接下来,您需要安装必要的库以使用硬件-仔细按照以下步骤从adafruit的circuitpython库捆绑包中查找和安装这些库。我们的circuitpython入门指南上有一个很棒的页面,说明如何安装库捆绑包。
对于诸如trinket m0或gemma m0的非表达板,您需要从捆绑包中手动安装必要的库:
adafruit_bme280.mpy
adafruit_bus_device
在继续之前,请确保板的lib文件夹或根文件系统具有 adafruit_bme280.mpy,和 adafruit_bus_device 文件和文件夹 已复制。
下一步连接到开发板的串行repl,这样您就可以在circuitpython上出现》》》 提示。
bme280库的python安装
您需要安装adafruit_blinka库,该库在python中提供circuitpython支持。这可能还需要在您的平台上启用i2c并验证您正在运行python3。由于每个平台都略有不同,并且linux经常更改,请访问linux上的circuitpython指南以准备好您的计算机!
完成后,从命令行运行以下命令:
sudo pip3 install adafruit-circuitpython-bme280
如果您的默认python是版本3,则可能需要改为运行“ pip”。只要确保您不尝试在python 2.x上使用circuitpython,就不支持它!
circuitpython和python的用法
为演示传感器的用法,我们将对其进行初始化,并从电路板上读取温度,湿度等信息python repl。
如果您使用的是i2c连接,请运行以下代码以导入必要的模块并使用传感器初始化i2c连接:
下载:文件
复制代码
import board
import busio
import adafruit_bme280
i2c = busio.i2c(board.scl, board.sda)
bme280 = adafruit_bme280.adafruit_bme280_i2c(i2c) import board
import busio
import adafruit_bme280
i2c = busio.i2c(board.scl, board.sda)
bme280 = adafruit_bme280.adafruit_bme280_i2c(i2c)
或者,如果您使用的是spi连接,请运行以下代码来设置spi连接和传感器:
下载:文件
复制代码
import board
import busio
import digitalio
import adafruit_bme280
spi = busio.spi(board.sck, mosi=board.mosi, miso=board.miso)
cs = digitalio.digitalinout(board.d5)
bme280 = adafruit_bme280.adafruit_bme280_spi(spi, cs) import board
import busio
import digitalio
import adafruit_bme280
spi = busio.spi(board.sck, mosi=board.mosi, miso=board.miso)
cs = digitalio.digitalinout(board.d5)
bme280 = adafruit_bme280.adafruit_bme280_spi(spi, cs)
现在您可以从中读取值了使用以下任一属性的传感器:
温度-传感器的温度,以摄氏度为单位。
湿度-相对湿度百分比,取值范围为0到100%。
压力-以hpa为单位的压力。
altitude -以米为单位的海拔高度。
例如打印温度,湿度和压力:
下载:文件
复制代码
print(“ temperature: %0.1f c” % bme280.temperature)
print(“humidity: %0.1f %%” % bme280.humidity)
print(“pressure: %0.1f hpa” % bme280.pressure)
print(“ temperature: %0.1f c” % bme280.temperature)
print(“humidity: %0.1f %%” % bme280.humidity)
print(“pressure: %0.1f hpa” % bme280.pressure)
对于海拔高度,想要在您所在位置设置海平面压力以获得最准确的测量值(请记住,这些传感器只能根据压力推断海拔高度,并且需要设置校准点)。查看您当地的天气预报以获取海平面读数的压力,然后设置 sea_level_pressure 属性:
下载:文件
复制代码
bme280.sea_level_pressure = 1013.4 bme280.sea_level_pressure = 1013.4
然后读取海拔高度属性更准确的海拔高度读数(但请记住,该海拔高度会随气压变化而波动!):
下载:文件
复制代码
print(“altitude = %0.2f meters” % bme280.altitude) print(“altitude = %0.2f meters” % bme280.altitude)
您可以使用bme280的温度和湿度通过magnus公式计算露点!对于此示例,您需要import一个附加库:math。运行以下代码:
下载:文件
复制代码
import math
b = 17.62
c = 243.12
gamma = (b * bme280.temperature /(c + bme280.temperature)) + math.log(bme280.humidity / 100.0)
dewpoint = (c * gamma) / (b - gamma)
print(dewpoint) import math
b = 17.62
c = 243.12
gamma = (b * bme280.temperature /(c + bme280.temperature)) + math.log(bme280.humidity / 100.0)
dewpoint = (c * gamma) / (b - gamma)
print(dewpoint)
将bme280传感器与circuitpython一起使用就可以了!
完整示例代码
下载:project zip 或 bme280_simpletest.py | 查看github
复制代码
import time
import board
import busio
import adafruit_bme280
# create library object using our bus i2c port
i2c = busio.i2c(board.scl, board.sda)
bme280 = adafruit_bme280.adafruit_bme280_i2c(i2c)
# or create library object using our bus spi port
#spi = busio.spi(board.sck, board.mosi, board.miso)
#bme_cs = digitalio.digitalinout(board.d10)
#bme280 = adafruit_bme280.adafruit_bme280_spi(spi, bme_cs)
# change this to match the location‘s pressure (hpa) at sea level
bme280.sea_level_pressure = 1013.25
while true:
print(“ temperature: %0.1f c” % bme280.temperature)
print(“humidity: %0.1f %%” % bme280.humidity)
print(“pressure: %0.1f hpa” % bme280.pressure)
print(“altitude = %0.2f meters” % bme280.altitude)
time.sleep(2)
import time
import board
import busio
import adafruit_bme280
# create library object using our bus i2c port
i2c = busio.i2c(board.scl, board.sda)
bme280 = adafruit_bme280.adafruit_bme280_i2c(i2c)
# or create library object using our bus spi port
#spi = busio.spi(board.sck, board.mosi, board.miso)
#bme_cs = digitalio.digitalinout(board.d10)
#bme280 = adafruit_bme280.adafruit_bme280_spi(spi, bme_cs)
# change this to match the location’s pressure (hpa) at sea level
bme280.sea_level_pressure = 1013.25
while true:
print(“ temperature: %0.1f c” % bme280.temperature)
print(“humidity: %0.1f %%” % bme280.humidity)
print(“pressure: %0.1f hpa” % bme280.pressure)
print(“altitude = %0.2f meters” % bme280.altitude)
time.sleep(2)
常见问题解答
为什么海拔高度计算错误?我的传感器坏了吗?
不,您的传感器可能还好。高度计算取决于了解海平面的气压
如果您在当前日期未为您所在的位置设置正确的海平面压力,它将无法准确计算高度
海平面气压每天都会根据天气而变化!
如果两次读取之间有较长的延迟,则第一个数据读取似乎不正确?
bmx280“保存”内存中的最后一次读取供您查询。只需连续阅读两次并扔掉第一读!
下载
文档
此分会中使用的bme280传感器的数据表
arduino bme280驱动程序
adafruit fritzing库中的fritzing对象
上的eaglecad pcb文件github
k&r smith校准说明
替代驱动程序(python)
如果将此突破与raspberry pi或pi2一起使用,则还可以查看adafruit_python_bme280驱动程序。
此替代方法驱动程序使用i2c与bme280进行通信,因此将pi上的scl与bme上的sck以及sda与sdi以及电源(3.3v至vin)和gnd相连。
示意图
点击放大
尺寸
以英寸为单位


数字资产抵押借贷平台开发运营区块链平台运营模式的新方向
电源管理芯片的振荡与物理特性简述
通过单片机来控制蜂鸣器
国家电网一行参观调研河套地区国际标准组织建设情况并展开深度交流
若Arm收购失败,高通称愿意加大投资
BME280传感器的使用
terawins T106
性能、价格都很诱人的电源管理芯片U92153
Sink Operation断开或通信失败
桁架机器人机械手价格是多少?
高精度充放电电源设计方案高效率,高精度
工业机器人的驱动系统包括哪些_工业机器人的优点和缺点
水流量传感器工作原理
美高森美与中国电信合作优化OTN技术以启动5G时代
dcdc大功率升压电路原理
华为在边缘计算方面的实践及产业观点
尼康再掀裁员风暴,涉及数码相机与半导体制造业务
FPGA实现SDI视频编解码的方案
ps怎么自由裁剪图片,具体方法是怎样的
三星电子将举办代工论坛2019大会 届时公布晶圆代工的相关细节