0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

BME280传感器的使用

454398 来源:网络整理 作者:网络整理 2019-11-28 09:45 次阅读

概述

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相连。

示意图

点击放大

尺寸

以英寸为单位

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2548

    文章

    50654

    浏览量

    751795
收藏 人收藏

    评论

    相关推荐

    博世推出BME690室内空气质量传感器

    Bosch Sensortec 在设计制造空气质量传感器领域拥有悠久历史,处于业界领先地位。最新一代气体传感器 BME690 搭载创新人工智能功能(AI),可监测气体、温度、压力和湿度。BME
    的头像 发表于 09-18 16:25 586次阅读

    怎么区分PNP传感器和NPN传感器

    PNP传感器和NPN传感器在工业自动化、电子控制等领域中扮演着重要角色,它们的主要区别在于电流方向、电压输出以及在电路中的接线方式。以下将从多个方面详细阐述如何区分PNP传感器和NPN传感器
    的头像 发表于 09-13 17:39 2380次阅读

    车载传感器主要有哪些传感器

    车载传感器是现代汽车中不可或缺的组成部分,它们为车辆提供关键信息,以确保驾驶安全、提高燃油效率、增强驾驶体验和实现自动驾驶功能。车载传感器的种类繁多,每种传感器都有其特定的功能和应用场景。以下是一些
    的头像 发表于 09-07 09:30 426次阅读

    用于开发传感器模块的磁传感器

    电子发烧友网站提供《用于开发传感器模块的磁传感器.pdf》资料免费下载
    发表于 08-29 11:13 3次下载
    用于开发<b class='flag-5'>传感器</b>模块的磁<b class='flag-5'>传感器</b>

    深入解析:人体传感器、存在传感器与场景存在传感器的差异与应用

    场景存在传感器比存在传感器探测更精细化,存在传感器比人体传感器探测精度更高。
    的头像 发表于 05-22 11:05 2085次阅读
    深入解析:人体<b class='flag-5'>传感器</b>、存在<b class='flag-5'>传感器</b>与场景存在<b class='flag-5'>传感器</b>的差异与应用

    什么叫离子传感器?离子传感器的工作原理 离子传感器的特性

    什么叫离子传感器?离子传感器的工作原理 离子传感器的特性 离子传感器是一种能够检测和测量离子浓度的传感器。它们通常用于分析化学、环境监测和生
    的头像 发表于 03-05 17:01 1242次阅读

    【开源作品】基于树莓派4B、ESP32制作的桌面机器人、气象站、立方光!

    BME280 传感器: 第 1 步:Inkplate6 彩色电子纸显示屏 这是一个6英寸的彩色电子纸显示板。我已经做了十多年了,我对电子墨水技术及其用途很着迷。如果您不熟悉它,电子墨水显示只有在更新其内
    发表于 03-05 16:52

    气体传感器有哪些种类 气体传感器的原理与应用

    气体传感器是一种用于检测和测量周围环境中的气体浓度的装置。它可以广泛应用于工业生产、环境监测、安全警报和医疗诊断等领域。根据工作原理和检测气体的类型,气体传感器可以分为许多不同的种类。 气敏传感器
    的头像 发表于 02-02 13:49 1782次阅读

    如何读取PSoC6上的BME280传感器

    我想在我的项目中使用 I2C 通信读取 BME280 传感器... 我正在使用 PSoC 6 + PSoC Creator 4.4 + BME280 但我不知道如何开始! CAN 有人帮我吗?
    发表于 01-29 07:21

    【开源项目】Arduino ESP32 彩色电子气象站

    ,并使用特定的算法 Zambretti 算法生成我们自己的天气预报。但这是另一个 Instructable 的主题。 制作材料 电子纸展示板 DHT22 传感器 BMP180 传感器 自选 BME280
    发表于 01-16 14:01

    浅谈汽车传感器

    汽车上的传感器有很多种, 主要分为车身感知传感器和环境感知传感器两大类。 车身感知传感器提高了单车自身的信息化水平,使车辆具备感知自身的能力;按照输入的被测量不同主要分为压力
    的头像 发表于 01-16 13:44 362次阅读

    传感器的分类

    可分为压力和力传感器、位置传感器、液位传感器、能耗传感器、速度传感器、加速度传感器、射线辐射
    的头像 发表于 01-09 10:14 1370次阅读

    bmp280气压传感器模块例程

    BMP280 气压传感器是一种高精度的数字气压传感器,可以用于测量大气压力、温度和高度。它具有低功耗、高线性度和高分辨率的特点,适用于各种应用场景,如天气站、室内气压监测、气象预报和高度测量等
    的头像 发表于 12-18 13:51 2195次阅读

    无线传感器如何联网?无线传感器如何通信?

    无线传感器如何联网?无线传感器如何通信? 无线传感器的联网和通信是指利用无线技术将传感器节点连接到互联网,并实现传感器之间、
    的头像 发表于 12-15 10:10 2137次阅读

    用于高可靠性应用的PME和BME MLCC之对比

    用于高可靠性应用的PME和BME MLCC之对比
    的头像 发表于 12-01 16:00 720次阅读
    用于高可靠性应用的PME和<b class='flag-5'>BME</b> MLCC之对比