|
本帖最后由 topdog 于 2021-12-14 02:55 编辑
德国博世传感器技术公司(Bosch Sensortec)生产的BME280是一款为移动市场设计的集成环境传感器。它是一种低功耗设计,结合了高线性度和高精度传感器的压力,湿度和温度。
BME280既支持SPI接法,也支持I2C接法。BME280产品手册 。
我购买的这款模块外形如下:
接线图如下:
我购买的BME280模块I2C连接时SD0必须接GND,否则读数错误,接高电平时不能运行。I2C的地址设置为0x76才能正常操作。
I2C连接法:
SPI连接法:
库的选择:
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]
|
|