概述
博世推出了新型BMP280传感器,这是一种具有温度,大气压力的环境传感器,是BMP085/BMP180/BMP183的下一代升级产品,可进一步提高竞争力。该传感器非常适合各种天气传感,甚至可以在I2C和SPI中使用!
博世的这种精密传感器是用于测量气压为±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针,用于从BMP280发送到处理器的数据
SDI -这是 S 串行 D ata I n/ M aster O ut S lave I n pin,数据从处理器发送到BMP280
CS -这是 C hip S 选择引脚,将其降低开始SPI事务。它是芯片的输入
如果要将多个BMP280连接到一个微控制器,请让它们共享SDI,SDO和SCK引脚。然后为每个分配一个唯一的CS引脚。
I2C逻辑引脚:
SCK -这也是 I2C时钟引脚,连接到您的微控制器I2C时钟线。
SDI -这也是 I2C数据引脚,连接到微控制器的I2C数据线。
将其他引脚断开
程序集
装配像素使用BME280,但形状/大小与BMP280
相同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
SPI接线
由于这是具有SPI功能的传感器,因此我们可以使用硬件或“软件” SPI。为了使所有Arduino上的接线相同,我们将从“软件” SPI开始。应该使用以下引脚:
将 Vin 连接到电源,可以使用3V或5V。使用微控制器逻辑所基于的相同电压。对于大多数Arduino,这是5V
将 GND 连接到公共电源/数据地
将 SCK 引脚连接到数字#13 ,但是以后可以使用任何引脚
将 SDO 引脚连接到数字#12 ,但是可以使用任何引脚稍后
将 SDI 引脚连接到数字#11 ,但是以后可以使用任何引脚
连接 CS 引脚数字#10 ,但以后可以使用任何引脚
稍后,一旦我们开始使用它,我们便可以根据需要调整库以使用硬件SPI,或将引脚更改为其他
要开始读取传感器数据,您需要安装Adafruit_BMP280库(代码在我们的github存储库)。可以从Arduino库管理器中获得它,因此我们建议使用它。
从IDE中打开库管理器。..
,然后输入 adafruit bmp280 来查找库。点击安装
您还需要安装 Adafruit统一传感器库
我们还提供了有关Arduino库安装的出色教程,网址为:
http://learn .adafruit.com/adafruit-all-about-arduino-libraries-install-use
加载演示
打开文件-》示例-》 Adafruit_BMP280 -》 bmp280test 并上传到您的Arduino接线至传感器
根据您使用的是I2C还是SPI,更改引脚名称并注释或取消注释以下几行。
下载:文件
复制代码
#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11
#define BMP_CS 10
Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK); #define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11
#define BMP_CS 10
Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
上传到yo您的Arduino,以9600的波特率打开串行控制台,以查看正在打印的数据
温度以摄氏度为单位,您可以使用经典的F = C * 9/5将其转换为F + 32等式。
压力以 Pascals 的SI单位返回。 100帕斯卡= 1 hPa = 1毫巴。通常,大气压力以毫巴或英寸汞柱表示。供将来参考,1帕斯卡= 0.000295333727英寸汞柱,或1英寸汞柱= 3386.39帕斯卡。因此,如果将Pascal值(例如100734)除以3389.39,将得到29.72英寸汞柱。
您还可以计算海拔高度。 但是,只有知道您所在位置和一天在海平面上的hPa压力,您才能真正做得非常准确!传感器非常精确,但是如果您没有更新数据对于当前一天,则可能很难获得比10米更高的精度。
库参考
您可以使用
通过使用任一软件SPI(其中所有四个引脚可以是任何I/O)创建BMP280对象开始。 div》
下载:文件
复制代码
Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK); Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
或者您可以使用硬件SPI。使用硬件SPI,您必须使用Arduino的硬件SPI引脚-每个arduino类型都有不同的引脚!请检查SPI参考以查看使用哪些引脚。在这种情况下,您可以使用任何CS引脚,但其他三个引脚是固定的
下载:文件
复制代码
Adafruit_BMP280 bmp(BMP_CS); // hardware SPI Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
或使用默认I2C总线的I2C,未分配任何引脚
下载:文件
复制代码
Adafruit_BMP280 bmp; // I2C Adafruit_BMP280 bmp; // I2C
启动后,您可以使用
下载:文件
复制代码
if (!bmp.begin()) {
Serial.println(“Could not find a valid BMP280 sensor, check wiring!”);
while (1);
} if (!bmp.begin()) {
Serial.println(“Could not find a valid BMP280 sensor, check wiring!”);
while (1);
}
begin()将在找到传感器后返回True,否则返回False。如果返回假值,请检查接线!
读取温度和压力很容易,只需致电:
下载:文件
复制代码
bmp.readTemperature()
bmp.readPressure() bmp.readTemperature()
bmp.readPressure()
温度在百年历程中始终是一个浮点数。 Pressure是一个32位整数,压力单位为Pascals。您可能需要将其转换为其他值,以使其与天气报告相匹配。
还可以将BMP280转换为高度计。如果您知道海平面的压力,则图书馆可以将当前的大气压计入海拔高度
Python和CircuitPython测试
使用带有CircuitPython和Adafruit CircuitPython BMP280模块的BMP280传感器很容易。此模块使您可以轻松编写可从传感器读取温度和压力的Python代码。
您可以将此传感器与任何CircuitPython微控制器板或具有GPIO和Python的计算机配合使用,这要感谢我们的CircuitPython Adafruit_Blinka -for-Python兼容性库。
CircuitPython微控制器接线
首先,将Arduino的BMP280完全连接到您的电路板上。您可以使用I2C或SPI布线,尽管为简单起见建议使用I2C。以下是使用I2C将Feather M0连接到传感器的示例:
板3V 到传感器VIN
板GND 》到传感器GND
板SCL 到传感器SCK
板SDA 到传感器SDI
以及一个羽毛M0的示例
板3V 到传感器VIN
板GND 到传感器GND
板载SCK 到传感器SCK
BoardMOSI 到传感器SDI
板MISO 到传感器SDO
板D5 到传感器CS (或使用任何其他免费的数字I/O引脚)
Python计算机接线
由于有数十种Linux计算机/板供您使用,我们将显示Raspberry Pi的接线。对于其他平台,请访问Linux上的CircuitPython指南,以了解您的平台是否受支持。
以下是与I2C相连的Raspberry Pi:
Pi 3V3 至传感器VIN
Pi GND 至传感器GND
Pi SCL 至传感器SCK
Pi SDA 到传感器SDI
以及连接SPI的Raspberry Pi 3 Model B的示例:
Pi 3V3 到传感器VIN
Pi GND 到传感器GND
Pi MOSI 到传感器SDI
Pi MISO 到传感器SDO
Pi SCLK 到传感器SCK
Pi#5 到传感器CS (或使用任何其他可用的GPIO引脚)
CircuitPython安装BMP280库
您需要在CircuitPython板上安装Adafruit CircuitPython BMP280库。
首先请确保为您的电路板运行最新版本的Adafruit CircuitPython。
接下来,您需要安装必要的库以使用硬件-仔细按照以下步骤查找并安装这些库来自Adafruit的CircuitPython库捆绑包。我们的CircuitPython入门指南上有一个很棒的页面,说明如何安装库捆绑包。
对于诸如Trinket M0或Gemma M0的非表达板,您需要从捆绑包中手动安装必要的库:
adafruit_bmp280.mpy
adafruit_bus_device
在继续之前,请确保板的lib文件夹或根文件系统已复制 adafruit_bmp280.mpy,和 adafruit_bus_device 文件和文件夹。/p》
下一步连接到开发板的串行REPL,因此您位于CircuitPython的提示符下。
BMP280库的Python安装
您需要安装Adafruit_Blinka库在Python中提供CircuitPython支持。这可能还需要在您的平台上启用I2C并验证您正在运行Python3。由于每个平台都有所不同,并且Linux经常更改,请访问Linux上的CircuitPython指南以准备好您的计算机!
完成后,从命令行运行以下命令:
sudo pip3 install adafruit-circuitpython-bmp280
如果您的默认Python是版本3,则可能需要改为运行“ pip”。只要确保您不尝试在Python 2.x上使用CircuitPython,就不支持它!
CircuitPython和Python的用法
为演示传感器的用法,我们将对其进行初始化,并从电路板上读取温度,湿度等信息Python REPL。
如果您使用的是I2C连接,请运行以下代码以导入必要的模块并使用传感器初始化I2C连接:
下载:文件
复制代码
import board
import busio
import adafruit_bmp280
i2c = busio.I2C(board.SCL, board.SDA)
sensor = adafruit_bmp280.Adafruit_BMP280_I2C(i2c) import board
import busio
import adafruit_bmp280
i2c = busio.I2C(board.SCL, board.SDA)
sensor = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
或者,如果您使用的是SPI连接,请运行以下代码来设置SPI连接和传感器:
下载:文件
复制代码
import board
import busio
import digitalio
import adafruit_bmp280
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
cs = digitalio.DigitalInOut(board.D5)
sensor = adafruit_bmp280.Adafruit_BMP280_SPI(spi, cs) import board
import busio
import digitalio
import adafruit_bmp280
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
cs = digitalio.DigitalInOut(board.D5)
sensor = adafruit_bmp280.Adafruit_BMP280_SPI(spi, cs)
现在您可以从中读取值了传感器具有以下任一属性:
温度-传感器温度,以摄氏度为单位。
压力-以hPa为单位的压力。
海拔-以米为单位的海拔。
例如打印温度和压力:
下载:文件
复制代码
print(‘Temperature: {} degrees C’.format(sensor.temperature))
print(‘Pressure: {}hPa’.format(sensor.pressure)) print(‘Temperature: {} degrees C’.format(sensor.temperature))
print(‘Pressure: {}hPa’.format(sensor.pressure))
对于海拔高度,您需要设置您所在位置的海平面压力以获得最准确的测量值(请记住,这些传感器只能根据压力推断海拔高度,并且需要设置校准点)。查看您当地的天气预报以获取海平面读数的压力,并设置 seaLevelhPA 属性:
下载:文件
复制代码
sensor.sea_level_pressure = 1013.25 sensor.sea_level_pressure = 1013.25
然后读取海拔高度属性更准确的海拔高度读数(但请记住,该海拔高度会随气压变化而波动!):
下载:文件
复制代码
print(‘Altitude: {} meters’.format(sensor.altitude)) print(‘Altitude: {} meters’.format(sensor.altitude))
这是在CircuitPython中使用BMP280传感器的全部内容!
这是一个开始打印的示例每2秒测量一次温度,压力和海拔高度:
下载:Project Zip 或bmp280_simpletest.py | 在Github上查看
复制代码
import time
import board
# import digitalio # For use with SPI
import busio
import adafruit_bmp280
# Create library object using our Bus I2C port
i2c = busio.I2C(board.SCL, board.SDA)
bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
# OR create library object using our Bus SPI port
#spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
#bmp_cs = digitalio.DigitalInOut(board.D10)
#bmp280 = adafruit_bmp280.Adafruit_BMP280_SPI(spi, bmp_cs)
# change this to match the location‘s pressure (hPa) at sea level
bmp280.sea_level_pressure = 1013.25
while True:
print(“ Temperature: %0.1f C” % bmp280.temperature)
print(“Pressure: %0.1f hPa” % bmp280.pressure)
print(“Altitude = %0.2f meters” % bmp280.altitude)
time.sleep(2)
import time
import board
# import digitalio # For use with SPI
import busio
import adafruit_bmp280
# Create library object using our Bus I2C port
i2c = busio.I2C(board.SCL, board.SDA)
bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
# OR create library object using our Bus SPI port
#spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
#bmp_cs = digitalio.DigitalInOut(board.D10)
#bmp280 = adafruit_bmp280.Adafruit_BMP280_SPI(spi, bmp_cs)
# change this to match the location’s pressure (hPa) at sea level
bmp280.sea_level_pressure = 1013.25
while True:
print(“ Temperature: %0.1f C” % bmp280.temperature)
print(“Pressure: %0.1f hPa” % bmp280.pressure)
print(“Altitude = %0.2f meters” % bmp280.altitude)
time.sleep(2)
常见问题解答
为什么海拔高度计算错误?我的传感器坏了吗?
不,您的传感器可能还好。高度计算取决于了解海平面的气压
如果您在当前日期未为您所在的位置设置正确的海平面压力,它将无法准确计算高度
海平面气压每天都会根据天气而变化!
如果两次读取之间有较长的延迟,则第一个数据读取似乎不正确?
BMx280“保存”内存中的最后一次读取供您查询。只需连续阅读两次并扔掉第一读!
下载
文档
分组讨论中使用的BMP280传感器的数据表
Arduino BMP280驱动程序
Adafruit Fritzing库中的Fritzing对象
上的EagleCAD PCB文件GitHub
示意图 strong》
单击放大。 BMP280与BME280共享相同的封装和引脚,因此原理图是相同的
div》尺寸
以英寸为单位。 BMP280与BME280共享相同的封装和引脚,因此布局相同
责任编辑:wv
-
传感器
+关注
关注
2546文章
50516浏览量
751296 -
BMP280
+关注
关注
1文章
20浏览量
5703
发布评论请先 登录
相关推荐
评论