143 lines
3.4 KiB
Arduino
143 lines
3.4 KiB
Arduino
|
/*
|
|||
|
BME280I2C Modes.ino
|
|||
|
|
|||
|
This code shows how to use predefined recommended settings from Bosch for
|
|||
|
the BME280I2C environmental sensor.
|
|||
|
|
|||
|
GNU General Public License
|
|||
|
|
|||
|
Written: Dec 30 2015.
|
|||
|
Last Updated: Sep 23 2017.
|
|||
|
|
|||
|
Connecting the BME280 Sensor:
|
|||
|
Sensor -> Board
|
|||
|
-----------------------------
|
|||
|
Vin (Voltage In) -> 3.3V
|
|||
|
Gnd (Ground) -> Gnd
|
|||
|
SDA (Serial Data) -> A4 on Uno/Pro-Mini, 20 on Mega2560/Due, 2 Leonardo/Pro-Micro
|
|||
|
SCK (Serial Clock) -> A5 on Uno/Pro-Mini, 21 on Mega2560/Due, 3 Leonardo/Pro-Micro
|
|||
|
|
|||
|
*/
|
|||
|
|
|||
|
#include <BME280I2C.h>
|
|||
|
#include <Wire.h> // Needed for legacy versions of Arduino.
|
|||
|
|
|||
|
#define SERIAL_BAUD 115200
|
|||
|
|
|||
|
/* Recommended Modes -
|
|||
|
Based on Bosch BME280I2C environmental sensor data sheet.
|
|||
|
|
|||
|
Weather Monitoring :
|
|||
|
forced mode, 1 sample/minute
|
|||
|
pressure ×1, temperature ×1, humidity ×1, filter off
|
|||
|
Current Consumption = 0.16 μA
|
|||
|
RMS Noise = 3.3 Pa/30 cm, 0.07 %RH
|
|||
|
Data Output Rate 1/60 Hz
|
|||
|
|
|||
|
Humidity Sensing :
|
|||
|
forced mode, 1 sample/second
|
|||
|
pressure ×0, temperature ×1, humidity ×1, filter off
|
|||
|
Current Consumption = 2.9 μA
|
|||
|
RMS Noise = 0.07 %RH
|
|||
|
Data Output Rate = 1 Hz
|
|||
|
|
|||
|
Indoor Navigation :
|
|||
|
normal mode, standby time = 0.5ms
|
|||
|
pressure ×16, temperature ×2, humidity ×1, filter = x16
|
|||
|
Current Consumption = 633 μA
|
|||
|
RMS Noise = 0.2 Pa/1.7 cm
|
|||
|
Data Output Rate = 25Hz
|
|||
|
Filter Bandwidth = 0.53 Hz
|
|||
|
Response Time (75%) = 0.9 s
|
|||
|
|
|||
|
|
|||
|
Gaming :
|
|||
|
normal mode, standby time = 0.5ms
|
|||
|
pressure ×4, temperature ×1, humidity ×0, filter = x16
|
|||
|
Current Consumption = 581 μA
|
|||
|
RMS Noise = 0.3 Pa/2.5 cm
|
|||
|
Data Output Rate = 83 Hz
|
|||
|
Filter Bandwidth = 1.75 Hz
|
|||
|
Response Time (75%) = 0.3 s
|
|||
|
|
|||
|
*/
|
|||
|
|
|||
|
BME280I2C::Settings settings(
|
|||
|
BME280::OSR_X1,
|
|||
|
BME280::OSR_X1,
|
|||
|
BME280::OSR_X1,
|
|||
|
BME280::Mode_Forced,
|
|||
|
BME280::StandbyTime_1000ms,
|
|||
|
BME280::Filter_Off,
|
|||
|
BME280::SpiEnable_False,
|
|||
|
0x76 // I2C address. I2C specific.
|
|||
|
);
|
|||
|
|
|||
|
BME280I2C bme(settings);
|
|||
|
|
|||
|
//////////////////////////////////////////////////////////////////
|
|||
|
void setup()
|
|||
|
{
|
|||
|
Serial.begin(SERIAL_BAUD);
|
|||
|
|
|||
|
while(!Serial) {} // Wait
|
|||
|
|
|||
|
Wire.begin();
|
|||
|
while(!bme.begin())
|
|||
|
{
|
|||
|
Serial.println("Could not find BME280I2C sensor!");
|
|||
|
delay(1000);
|
|||
|
}
|
|||
|
|
|||
|
// bme.chipID(); // Deprecated. See chipModel().
|
|||
|
switch(bme.chipModel())
|
|||
|
{
|
|||
|
case BME280::ChipModel_BME280:
|
|||
|
Serial.println("Found BME280 sensor! Success.");
|
|||
|
break;
|
|||
|
case BME280::ChipModel_BMP280:
|
|||
|
Serial.println("Found BMP280 sensor! No Humidity available.");
|
|||
|
break;
|
|||
|
default:
|
|||
|
Serial.println("Found UNKNOWN sensor! Error!");
|
|||
|
}
|
|||
|
|
|||
|
// Change some settings before using.
|
|||
|
settings.tempOSR = BME280::OSR_X4;
|
|||
|
|
|||
|
bme.setSettings(settings);
|
|||
|
}
|
|||
|
|
|||
|
//////////////////////////////////////////////////////////////////
|
|||
|
void loop()
|
|||
|
{
|
|||
|
printBME280Data(&Serial);
|
|||
|
delay(500);
|
|||
|
}
|
|||
|
|
|||
|
//////////////////////////////////////////////////////////////////
|
|||
|
void printBME280Data
|
|||
|
(
|
|||
|
Stream* client
|
|||
|
)
|
|||
|
{
|
|||
|
float temp(NAN), hum(NAN), pres(NAN);
|
|||
|
|
|||
|
BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
|
|||
|
BME280::PresUnit presUnit(BME280::PresUnit_Pa);
|
|||
|
|
|||
|
bme.read(pres, temp, hum, tempUnit, presUnit);
|
|||
|
|
|||
|
client->print("Temp: ");
|
|||
|
client->print(temp);
|
|||
|
client->print("°"+ String(tempUnit == BME280::TempUnit_Celsius ? 'C' :'F'));
|
|||
|
client->print("\t\tHumidity: ");
|
|||
|
client->print(hum);
|
|||
|
client->print("% RH");
|
|||
|
client->print("\t\tPressure: ");
|
|||
|
client->print(pres);
|
|||
|
client->println(" Pa");
|
|||
|
|
|||
|
delay(1000);
|
|||
|
}
|