Bosch BME280 Arduino的使用介绍-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2753|回复: 0

Bosch BME280 Arduino的使用介绍

[复制链接]
发表于 2021-12-12 23:48 | 显示全部楼层 |阅读模式
本帖最后由 topdog 于 2021-12-14 02:55 编辑

德国博世传感器技术公司(Bosch Sensortec)生产的BME280是一款为移动市场设计的集成环境传感器。它是一种低功耗设计,结合了高线性度和高精度传感器的压力,湿度和温度。
BME280既支持SPI接法,也支持I2C接法。BME280产品手册
我购买的这款模块外形如下:

bme2801.jpg

bme2802.jpg


接线图如下:

我购买的BME280模块I2C连接时SD0必须接GND,否则读数错误,接高电平时不能运行。I2C的地址设置为0x76才能正常操作。
bme280接线图.JPG

I2C连接法:
BME280_I2C.JPG


SPI连接法:
BME280_SPI.JPG

库的选择:
Adafruit BME280对SPI接线友好。 SparkFun BME280更新及时,模式、滤波等功能丰富,建议使用。

I2C连接法,程序实现:
[pre]#include <Wire.h>

#include "SparkFunBME280.h"
BME280 mySensor;

void setup()
{
  Serial.begin(115200);
  Serial.println("Example showing alternate I2C addresses");

  Wire.begin();
  Wire.setClock(400000);              //调节到快速 I2C 速度!
  mySensor.setI2CAddress(0x76);       //I2C地址0x76
  mySensor.beginI2C();

  mySensor.setFilter(1); //0 至 4 有效, 滤波器系数, 见手册 3.4.4 IIR filter
  mySensor.setStandbyTime(0); //0 至 7 有效 读数之间的时间

  mySensor.setTempOverSample(1); //0 至 16 有效 ,为0时禁用温度传感.见手册 4.2.2、5.4.8
  mySensor.setPressureOverSample(1); //0 至 16 有效 ,为0时禁用大气压传感.见手册 5.4.7
  mySensor.setHumidityOverSample(1); //0 至 16 有效 ,为0时禁用湿度传感. 见手册5.4.9

  mySensor.setMode(MODE_NORMAL); //MODE_SLEEP(睡眠模式), MODE_FORCED(突发模式), MODE_NORMAL (普通模式)有效,见手册 3.3 Sensor modes
}

void loop()
{
  Serial.print("Humidity: ");
  Serial.print(mySensor.readFloatHumidity(), 0);

  Serial.print(" Pressure: ");
  Serial.print(mySensor.readFloatPressure(), 0);

  Serial.print(" Alt: ");                                       //测量高度。
  Serial.print(mySensor.readFloatAltitudeMeters(), 1);    //公制
  //Serial.print(mySensor.readFloatAltitudeFeet(), 1);     //英制

  Serial.print(" Temp: ");
  //Serial.print(mySensor.readTempC(), 2);
  Serial.print(mySensor.readTempF(), 2);

  Serial.println();

  delay(500);
}[/pre]

SPI连接法,程序实现:

[pre]#include <SPI.h>

#include "SparkFunBME280.h"
BME280 mySensor;

void setup()
{
  Serial.begin(115200);
  Serial.println("Reading basic values from BME280");

  if (mySensor.beginSPI(10) == false) //开始通过SPI进行通信。使用引脚10作为CS。
  {
    Serial.println("The sensor did not respond. Please check wiring.");
    while(1);
  }
}

void loop()
{
  Serial.print("Humidity: ");
  Serial.print(mySensor.readFloatHumidity(), 0);

  Serial.print(" Pressure: ");
  Serial.print(mySensor.readFloatPressure(), 0);

  Serial.print(" Alt: ");   //测量高度。
  Serial.print(mySensor.readFloatAltitudeMeters(), 1);
  //Serial.print(mySensor.readFloatAltitudeFeet(), 1);

  Serial.print(" Temp: ");
  Serial.print(mySensor.readTempC(), 2);  //摄氏
  //Serial.print(mySensor.readTempF(), 2);    //华氏

  Serial.println();

  delay(500);
}[/pre]





您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 02:34 , Processed in 0.100126 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表